TCP와 UDP는 OSI 7계층의 전송계층에서 사용되는 프로토콜이다.
전송계층을 간단히 설명하면 송신자와 수신자를 연결해 데이터의 전달을 담당하는 계층이라고 생각하면 된다.
먼저 TCP부터 알아보자.
TCP(Trasmission Control Protocol)
TCP는 연결 지향적 프로토콜이며, 손실되면 안되는 중요한 데이터(웹, 이메일, 파일 등등)를 주고받을 때 통신의 신뢰성을 높이기 위해 사용한다. 연결 지향 프로토콜이란 클라이언트와 서버가 연결된 상태에서 데이터를 주고받는 프로토콜을 의미한다.
데이터를 전송하기 위해서는 클라이언트와 서버가 연결이 되어야 하는데 클라이언트와 서버 간에 연결을 하기 위해서 3-way-handshaking 과정을 통해 연결이 되고, 데이터 전송이 끝나면 4-way-handshaking을 통해 연결이 해제가 된다.
3-way-handshaking
서버와 클라이언트가 데이터를 주고 받기 위한 3-way-handshaking 과정을 살펴보자.
SYN : synchronize sequence number (연결 확인을 위해 보내는 무작위의 숫자값)
ACK : acknowledgement (클라이언트 혹은 서버로부터 받은 SYN에 1을 더해 SYN을 잘 받았다는 ACK)
1. 클라이언트는 서버에 접속을 하기 위해서 SYN(x) 패킷을 보내 접속 요청을 한다. (클라이언트는 SYN_SENT 상태)
2. 서버는 클라이언트가 보낸 SYN 패킷을 확인하면 요청을 수락한다는 의미로 ACK(x + 1) 패킷(클라이언트에게 받은 SYN 패킷에 1을 더한 값)과 받은 SYN(y) 패킷을 다시 보낸다. (SYN_RECEIVED 상태)
3. 클라이언트는 서버가 보낸 SYN(y) 패킷과 ACK(x + 1) 패킷을 받고 다시 ACK(y + 1) 패킷을 서버에 보내면 연결이 된다. (ESTABLISHED 상태)
위 과정을 거치게 되면 서버와 클라이언트는 데이터를 주고받을 수 있는 연결 상태가 된다.
SYN 패킷을 보낼 때 랜던함 숫자가 담겨서 보내지는데 왜 랜덤 한 숫자를 보내게 되는 걸까?
이전에는 연결을 맺을 때 사용하는 포트는 유한 범위 내에서 사용하고 시간이 지나면 재사용하는 방식이었었다. 여기서 문제가 발생했는데 클라이언트와 서버가 과거에 사용된 포트 번호 쌍을 다시 사용할 수 도 있는 문제가 존재했다. 서버는 패킷의 SYN을 보고 패킷을 구분하는데 랜덤 한 수가 아닌 순차적인 번호가 전송이 되면, 이전에 연결할 때 보냈던 패킷으로 인식할 수 있다. 그래서 이러한 가능성을 줄이기 위해서 SYN을 난수로 설정한다.
4-way-handshaking
이번에는 데이터 전송이 끝나면 서버와 클라이언트간 연결 종료를 위한 4-way-handshaking 과정을 알아보자.
우선 과정 처음에는 서버와 클라이언트는 연결 상태이기 때문에 Established 상태이다.
- 클라이언트는 서버에게 연결을 종료한다는 FIN 플래그를 보낸다. (FIN_WAIT_1 상태)
- 서버는 FIN을 받고, 클라이언트에게 ACK를 보낸다. (이때 모든 데이터를 보내기 위해 CLOSE_WAIT 상태가 된다. 클라이언트는 FIN_WAIT_2 상태)
- 데이터를 모두 보냈다면, 연결이 종료되었다는 FIN 플래그를 클라이언트에게 보낸다.
- 클라이언트는 FIN을 받고, 확인했다는 ACK를 서버에게 보낸다. (아직 서버로부터 받지 못한 데이터가 있을 수 있으므로 TIME_WAIT을 통해 기다다 시간이 끝나면 클라이언트를 닫는다.)
UDP
UDP는 TCP와 달리 비연결지향 통신이다. TCP처럼 데이터의 신뢰성을 신경쓰지 않고 데이터를 빨리 보내고 싶을 때는 UDP(User Datagram Protocol)를 사용한다.
UDP는 데이터를 보내면 TCP처럼 확인 응답과 같은 절차(비연결성)를 생략할 수 있으므로 통신의 속도를 높일 수 있다는 장점이 있다.
그래서 속도를 필요로 하는 서비스들이 UDP를 사용하고 있다.
TCP와 UDP의 차이
TCP
데이터 전송 절차가 존재(연결 지향성)하기 때문에 데이터 전송 과정에서 발생하는 손실을 확인하고 재전송을 한다.
그렇기 때문에 UDP보다 데이터의 전송 속도가 느리지만 신뢰성이 높고 안정성이 높다는 장점이 있다.
UDP
TCP와 달리 데이터 전송 절차가 없어(비연결성) 데이터를 처리하는 속도가 빠르다. 하지만 데이터를 일방적으로 주고받기 때문에 신뢰성과 안정성이 떨어진다.
'Network' 카테고리의 다른 글
HTTPS란 무엇인가? (0) | 2023.01.06 |
---|---|
HTTP란? (0) | 2022.12.31 |