TCP(Transmission Control Protocol)
TCP는 패킷 사이의 순서를 보장하고 연결지향 프로토콜을 사용해서 연결을 진행하며 이를 바탕으로 신뢰성을 구축해서 수신 여부를 확인하는 가상회선 패킷 교환 방식을 사용한다.
장점 | 단점 |
신뢰할 수 있는 프로토콜이다. | 광역 네트워크용으로 만들어졌으므로 리소스가 부족한 소규모 네트워크에서는 크기가 문제가 될 수 있다. |
오류 검사 메커니즘과 복구 메커니즘을 제공한다. | 여러 계층을 실행하므로 네트워크 속도를 늦출 수 있다. |
흐름 제어를 제공한다. | 연결을 통한 안정적인 데이터 전달을 보장함에 따른 오버헤드가 발생하여 속도가 느리다. |
데이터가 전송된 정확한 순서대로 올바르게 도달했는지 확인할 수 있다. |
가상회선 패킷 교환 방식
각 패킷에는 가상회선 식별자가 포함되며 모든 패킷을 전송하면 가상회선이 해제되고 패킷들은 전송된 순서대로 도착하는 방식이다.
3-웨이 핸드셰이크
TCP는 신뢰성을 확보할 때 3-웨이 핸드셰이크라는 작업을 진행한다.
그림과 같이 클라이언트와 서버가 통신할 때 세 단계의 과정을 거치게 된다.
1. SYN 단계: 클라이언트가 서버에 클라이언트의 ISN을 담아 SYN을 보낸다.
2. SYN + ACK 단계: 서버는 클라이언트의 SYN을 수신하고 서버의 ISN을 보내며 승인번호로 클라이언트의 ISN + 1을 보낸다. 여기서 ACK은 서버가 받은 세그먼트에 대한 응답을 나타낸다.
3. ACK 단계: 클라이언트는 서버의 ISN + 1한 값인 승인번호를 담아 ACK를 서버에 보낸다.
SYN(Synchronize Sequence Number): 연결 요청 플래그
ACK: 응답 플래그
ISN: TCP 연결의 첫 번째 패킷에 할당되는 임의의 32비트 시퀀스 번호
4-웨이 핸드셰이크
TCP가 연결을 해제할 때는 4-웨이 핸드셰이크라는 작업을 진행한다.
그림과 같이 네 단계의 과정을 거치게 된다.
1. 클라이언트가 연결을 닫으려고 할 때 FIN으로 설정된 세그먼트를 보내고 클라이언트는 FIN_WAIT_1 상태로 들어가고 서버의 응답을 기다린다.
2. 서버는 클라이언트로 ACK라는 승인 세그먼트를 보내고 CLOSE_WAIT 상태에 들어간다. 클라이언트는 세그먼트를 받으면 FIN_WAIT_2 상태에 들어간다.
3. 서버는 ACK를 보내고 일정 시간 이후에 클라이언트에 FIN이라는 세그먼트를 보낸다.
4. 클라이언트는 TIME_WAIT 상태가 되고 다시 서버로 ACK를 보내서 서버는 CLOSED 상태가 된다. 이후 클라이언트는 어느 정도의 시간(30초 ~ 2분)을 대기한 후 연결이 닫히고 클라이언트와 서버의 모든 자원의 연결이 해제된다.
TIME_WAIT: 소켓이 바로 소멸되지 않고 일정 시간 유지되는 상태를 말하며 지연 패킷 등의 문제점을 해결하는 데 쓰인다.
데이터 무결성: 데이터의 정확성과 일관성을 유지하고 보증하는 것
여기서 클라이언트가 연결을 바로 닫으면 되는데 굳이 일정 시간 뒤에 닫는 이유는 뭘까?
일정 시간이 지나고 닫는 이유는 지연 패킷이 발생할 경우를 대비하기 위해서다. 만약 연결을 닫았는데 패킷이 뒤늦게 도달하여 이를 처리하지 못한다면 데이터 무결성 문제가 발생할 것이다.
또 다른 이유로 두 장치가 연결이 닫혔는지 확인할 수 있다. 만약 LAST_ACK 상태에서 닫히게 되면 다시 새로운 연결을 하려고 할 때 장치는 계속 LAST_ACK 상태로 되어 있기 때문에 접속 오류가 발생하게 된다.
UDP(User Datagram Protocol)
UDP는 순서를 보장하지 않고 수신 여부를 확인하지 않으며 단순히 데이터만 주는 데이터그램 패킷 교환 방식을 사용한다.
또한 UDP는 TCP 3-웨이 핸드셰이크와 같은 연결이 필요 없는 프로토콜이므로 데이터 전송 전에 연결을 설정할 필요가 없다. 이러한 특성으로 인해 UDP를 신뢰성이 없는 프로토콜이라고 한다.
그럼에도 UDP를 사용하는 이유는 연결이 없기 때문에 낮은 지연 및 데이터 손실 허용을 통한 연결을 구축하는 데 도움을 준다.
TCP는 확실한 데이터 전달로 신뢰성을 제공하지만 추가적인 오버헤드와 지연을 유발하게 된다. 따라서 실시간 서비스나 고성능이 필요한 경우 UDP를 통해서 지연된 패킷을 처리하는 대신 패킷이 삭제되도록 허용해 주고 오류 확인이 없으므로 대역폭도 절약할 수 있게 된다.
장점 | 단점 |
연결을 설정하고 안정적인 데이터 전달을 보장하는 오버헤드가 없기 때문에 TCP보다 빠르다. | 패킷 전달이나 전달 순서를 보장하지 않으므로 데이터가 누락되거나 중복될 수 있다. |
연결 설정이 없으므로 대기 시간이 짧고 응답 시간이 빠르다. | 정체 제어 기능이 없으므로 네트워크 정체를 유발할 수 있는 속도로 패킷을 보낼 수 있다. |
TCP보다 프로토콜 설계가 단순하여 구현 및 관리가 더 쉽다. | 흐름 제어가 없기 때문에 수신자가 처리할 수 없는 패킷을 계속 전송할 수 있다. |
여러 수신자에게 브로드캐스팅을 지원하므로 비디오 스트리밍 같은 실시간 서비스에 유용하다. | 서비스 거부 공격에 취약하다. |
TCP보다 더 적은 패킷 크기를 사용하므로 네트워크 정체를 줄이고 전체 네트워크 성능을 향상시킬 수 있다. | 안정적인 데이터 전달이 필요한 서비스에 적합하지 않다. |
데이터그램 패킷 교환 방식
패킷이 독립적으로 이동하며 최적의 경로를 선택하여 가는데, 하나의 메시지에서 분할된 여러 패킷은 서로 다른 경로로 전송될 수 있으며 도착한 순서가 다를 수 있는 방식이다.
'CS > 네트워크' 카테고리의 다른 글
네트워크 - HTTP (2) | 2023.10.20 |
---|---|
네트워크 - IP (0) | 2023.10.14 |
네트워크 - 네트워크 기기 (0) | 2023.10.13 |
네트워크 - OSI 7계층과 TCP/IP 4계층 (0) | 2023.10.12 |
네트워크 - 유선 LAN과 무선 LAN (0) | 2023.10.12 |