티스토리 뷰
1. 인터넷 통신
클라이언트 - 서버가 물리적으로 직접 연결되어있으면 요청 -> 응답하면 된다.
하지만 인터넷에선 ?
복잡한 인터넷망의 노드들이 서로 정보를 던져가면서 연결한다.
2. IP (인터넷 프로토콜) 역할
- 지정한 IP 주소 (IP Address) 에 전달
- 패킷(Packet) 이라는 통신 단위로 데이터 전달 (패키지라고 생각)
이 IP 패킷이 전송 데이터를 감싸고 있다.
IP 패킷 정보에는 출발지 IP, 목적지 IP, etc .. 가 있다.
그러면 클라이언트 IP -> 서버 IP로 데이터를 전송할때는
전송 데이터를 감싼 패킷에는 출발지 ip, 목적지 ip, etc ... 가 담겨있고 인터넷 망속의 노드들에서 이동하면서 서버까지 이동한다.
서버에서 클라이언트로 전달할 때도 마찬가지로 패킷에 전송 데이터를 감싸서
출발 IP, 목적지 IP, 상태 코드, etc ... 을 담아서 인터넷 망속의 노드들을 통해서 클라이언트까지 이동한다.
근데 IP 프로토콜에 한계가 있다.
- 비연결성
- 패킷을 받을 대상이 없거나 서비스 불능 상태여도 패킷 전송
- 비신뢰성
- 중간에 패킷 사라지면 ?
- 패킷이 순서대로 안오면 ?
- 프로그램 구분
- 같은 IP를 사용하는 서버에서 통신하는 애플리케이션이 둘 이상이면 ?
- 대상 서버가 받을 수 있는 상태인지 아닌지도 모르는데 일단 패킷을 전송하는 단점
- 인터넷 망에서 노드들을 이동하면서 패킷이 소실될 수 있음
- 전송 데이터의 양이 많아지면 패킷이 나뉘어 순서가 생기는데 1-2 순서로 전송하고 싶은데 2-1 이렇게 서버에서 순서대로 받지 못할 수 있음
3. TCP, UDP
인터넷 프로토콜 스택의 4 계층
애플리케이션 계층 - HTTP, FTP
전송 계층 - TCP, UDP
인터넷 계층 - IP
네트워크 인터페이스 계층
프로토콜 계층
1. 프로그램이 메시지 생성
2. socket 라이브러리를 통해 전달
3. TCP 정보 생성, 메시지 데이터 포함
4. IP 패킷 생성, TCP 데이터 포함
-> LAN 카드(Ethernet frame) -> 인터넷
IP 패킷 정보에서는
출발지 ip, 목적지 ip, etc ... 였다면
TCP / IP 패킷 정보에서는
TCP 가 먼저 전송 데이터를 감싸고 그 걸 IP 가 감싸고 있다.
TCP 정보에서는
출발지 PORT, 목적지 PORT, 전송 제어, 순서, 검증 정보, etc ... 가 있다.
TCP (Transmission Control Protocol) : 전송 제어 프로토콜의 특징
- 연결 지향 - TCP 3 way handshake (가상연결)
- 데이터 전달 보증
- 순서 보장
- 신뢰할 수 있는 프로토콜
- 현재는 대부분 TCP 사용
- TCP 3 way handshake
클라이언트 -> 서버 : 1. SYN : 접속 요청
서버 -> 클라이언트 : 2. SYN : 접속 요청 + ACK : 요청 수락
클라이언트 -> 서버 : 3. ACK : 요청 수락 (여기서 함께 데이터 전송 가능)
4. 데이터 전송
데이터 전달 보증과 순서 보장은 3 way handshake 로 처리하면서 해결된다.
UDP (User Datagram Protocol) : 사용자 데이터그램 프로토콜 특징
- 하얀 도화지에 비유 (기능이 거의 없음)
- 연결 지향 - TCP 3 way handshake X
- 데이터 전달 보증 X
- 순서 보장 X
- 데이터 전달 및 순서가 보장되지 않지만, 단순하고 빠름
- IP와 거의 같음, PORT, 체크섬 정도만 추가
- 애플리케이션에서 추가 작업 필요
최근에는 최적화를 위해 사용한다.
4. PORT
한 번에 둘 이상 연결해야 하면?
TCP/ IP 패킷 정보에는 출발지 IP, 출발지 PORT, 목적지 IP, 목적지 PORT, 전송 데이터... 가 있다.
이 정보의 PORT 번호를 활용해서 구분하여 사용할 수 있다.
PORT 는 같은 IP 내에서 프로세스를 구분한다.
IP 를 아파트 동이라고 표현하면 PORT 는 호수라고 표현할 수 있다.
0 ~ 65535 : 할당 가능
0 ~ 1023 : 잘 알려진 포트, 사용하지 않는 것이 좋음
- FTP : 20, 21
- TELNET : 23
- HTTP : 40
- HTTPS : 443
5. DNS (Domain Name System)
도메인 네임 시스템
- 전화번호부로 비유
- 도메인 명을 IP 주소로 변환
- IP 는 기억하기 어렵다.
- ex)IP: 100.100.100.1
- IP 는 변경될 수 있다.
클라이언트 -> 서버
1. 도메인명인 google.com 로 연결
2. DNS 서버에서 도메인 네임이 google.com 인 IP 를 찾아서 그 IP 를 클라이언트에게 다시 주고
3. 클라이언트에선 그 IP 로 서버에 접속
※ 출처
www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC/dashboard
'CS' 카테고리의 다른 글
HTTP 6. HTTP 상태코드 (0) | 2021.01.07 |
---|---|
HTTP 5. HTTP 메서드 활용 (0) | 2021.01.06 |
HTTP 4. HTTP 메서드 (0) | 2021.01.05 |
HTTP 3. HTTP 기본 (0) | 2021.01.04 |
HTTP 2. URI 와 웹 브라우저 요청 흐름 (0) | 2021.01.04 |
- Total
- Today
- Yesterday
- BOJ
- REST API
- 이펙티브자바 스터디
- 모던자바스크립트
- ㅇㄷㅇㅈ
- JS 딥다이브
- 프로그래머스 SQL
- java
- Spring Security
- 백준
- 김영한 JPA
- 패스트캠퍼스 컴퓨터공학 완주반
- js array
- 이펙티브자바
- js promise
- 백기선 스터디
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초
- 드림코딩
- 이펙티브자바 아이템60
- js api
- 김영한 http
- dreamcoding
- 킹수빈닷컴
- 이펙티브자바 아이템59
- HTTP 완벽가이드
- GCP
- 프로그래머스
- JPA 연관관계 매핑
- HTTP 완벽 가이드
- http
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |