앞서서 IP의 문제점인 비연결성, 비신뢰성 등의 문제점을 해결하기 위해 등장한 프로토콜이 TCP와 UDP 이다.
인터넷 프로토콜의 4계층
- 애플리케이션 계층 - HTTP, FTP
- 전송 계층 - TCP, UDP
- 인터넷 계층 - IP
- 네트워크 인터페이스 계층
아래의 그림을 통해 프로토콜 계층에서 어떻게 동작하는지 알아보자! (출처)
- 어떠한 프로그램이 메시지를 보낸다고 가정한다면, 소켓 라이브러리를 통해 OS 계층으로 메시지를 전달한다.
- OS계층에서는 메시지에다가 TCP정보를 겉에다가 씌워준다.
- 그리고 이어서 TCP정보 겉에다가 IP정보를 씌워준다.
- 이제 네트워크 인터페이스에서 LAN 카드를 통해서 나갈 때 이더넷 프레임이라는 것을 포함해서 밖으로 나간다.
메시지를 보내게 될 경우 아래 그림과 같이 전송데이터를 기준으로 TCP정보와 IP정보가 감싼 형태가 된다. (출처)
이런 형태로 메시지가 나가기 때문에 이래서 TCP/IP를 붙여서 얘기하는 구나...!
TCP의 특징
- 전송 제어 프로토콜(Transmission Control Protocol)
- 연결지향 - TCP 3 way handshake (가상 연결)
- 데이터 전달 보증 - IP의 비신뢰성 해결
- 순서보장
- 신뢰할 수 있는 프로토콜 / 현재 대부분 TCP 프로토콜을 사용
연결 지향 - TCP 3 way handshake (출처)
- TCP/IP 프로토콜로 연결하면 먼저 클라이언트에서 서버로 SYN이라는 메시지를 보낸다.
- 서버에서는 SYN을 받고 어 왔네? 하고 ACK를 보내서 응답과 함께 나도 연결해줘 하면서 보낸다.
- 클라이언트도 서버에서의 요청을 받고 ACK를 보내준다.
- 즉 서로 신뢰관계가 성립된 상태가 성립(서로 ACK 상태) 일 경우에 데이터를 전송한다는 뜻
- 요즘에는 최적화가 되어서 3번 ACK를 보낼 때 데이터도 같이 전송한다.
데이터 전달 보증 (출처)
- TCP/IP에서는 TCP가 붙게되면 클라이언트에서 데이터를 전송했을 때 서버에서는 잘 받았다고 전송해준다.
- 서로 신뢰관계로 연결되기 떄문에 데이터가 잘 전달되었다고 보증할 수 있다.
순서 보장 (출처)
- 패킷을 아래처럼 이렇게 보냈는데 패킷도착이 잘못된 경우를 보면
- 서버에서는 전송되어 온 패킷을 다 버리고 제대로 다시 보내 하면서 리턴해준다.
- 클라이언트는 잘못보낸게 있구나를 인지하고 다시 보낸다.
- 즉 순서가 보장이 된다
UDP의 특징
- 사용자 데이터그램 프로토콜(User Datagram Protocol)
- TCP와는 달리 기능이 거의 없다.
- 순서 보장도 되지 않는다.
- 데이터 전달도 보증이 되지않는다.
- 즉, UDP는 IP와 거의 같은데 추가적으로 PORT와 체크섬(메시지가 제대로 왔는지 체크하는 정도)부분이 추가된다.
그럼 UDP는 왜쓰는 걸까?
- TCP는 3 way handshake 하는데 시간도 들고, 전송할 때 확인작업(데이터를 잘받았는지 확인작업) 등이 있어서 데이터 양도 많다.
- 결정적으로 거의 모든 인터넷이 TCP로 연결되어있어서 TCP를 바꾸기는 어렵다.
- 이렇기 때문에 TCP가 아닌 UDP를 통해 최적화를 하는 방향으로 대세가 넘어가고 있는 추세이다. (최적화에 용이)
- HTTP3 스펙에서는 TCP에서 handshake를 통해 SYN, ACK등을 보내는데 이마저도 최적화하여 줄여보자 하여 UDP가 각광받고있다.
'Dev > HTTP' 카테고리의 다른 글
HTTP 시작 (0) | 2021.05.11 |
---|---|
UR패밀리 URI, URL, URN 과 웹브라우저 흐름 (0) | 2021.05.06 |
친숙한 이름으로 바꿔주는 DNS (0) | 2021.05.05 |
프로세스를 구분하는 PORT (0) | 2021.05.05 |
IP(Internet Protocol) (0) | 2021.05.05 |