TCP(Transmission Control Protocol, 전송 제어 프로토콜)란?
컴퓨터가 다른 컴퓨터와 데이터 통신을 하기 위한 프로토콜의 일종으로 신뢰성을 보장하는 연결형 서비스『연결 지향형 프로토콜이라 말합니다.』를 지원합니다.
TCP 특징
1. 양방향 연결(Full Duplex Connection)형 서비스를 제공합니다.
- 전이중 통신 방식 사용합니다.
2. 연결형 서비스로 가상 회선 방식을 제공합니다.
- 3-Way Handshaking 과정을 통해 연결을 설정하고 4-Way Handshaking을 통해 연결을
해제합니다.
3. 신뢰성 있는 데이터를 전송합니다.
4. UDP보다 전송속도가 느립니다.
5. 스트림 전송 서비스를 제공합니다.
- 전송 측에서의 데이터 순서가 최종 목적지에도 일치되도록 합니다.
6. 흐름 제어 (Flow Control), 오류 제어 (Error Control),
혼잡 제어 (Congestion Control) 기능을 지원합니다.
- 흐름 제어 : 데이터 처리 속도를 조절하여 수신 측의 버퍼 오버플로우를 방지합니다.
- 혼잡 제어 : 네트워크 내의 패킷 수를 넘치지 않도록 방지합니다.
- 오류 제어 : ARQ(Automatic Repeat Request) 기법을 사용하여
프레임이 손상되었거나 손실되었을 경우 재전송(retransmission)을 통해 오류를 복구합니다.
● 3-Way Handshaking, 4-Way Handshaking
3-Way Handshaking 과정
'호스트 A'(클라이언트)는 CLOSED 상태, '호스트 B'(서버)는 LISTEN 상태입니다.
[STEP 1]
'호스트 A'가 '호스트 B'에게 접속 요청을 위한 SYN 플래그를 보내고
'호스트 A'는 SYN_SENT 상태가 됩니다.
[STEP 2]
'호스트 B'는 '호스트 A'에게 SYN 플래그를 요청을 받은 다음, 연결을 수락을 위한 ACK 플래그를 전송합니다. 이를 합쳐 SYN+ACK라 표현하기도 하며 '호스트 B'는 SYN_RECEIVED 상태가 되고 SYN+ACK 플래그를 받은 '호스트 A'는 ESTABLISHED 상태가 됩니다.
[STEP 3]
'호스트 A'는 '호스트 B'에게 ACK 플래그를 보내고 TCP 연결을 성립합니다. 이때 '호스트 B'는 ESTABLISHED 상태가 됩니다.
4-Way Handshaking 과정
'호스트 A', '호스트 B'의 상태는 ESTABLISHED 상태입니다.
[STEP 1]
'호스트 A'가 연결을 종료하겠다는 FIN 플래그를 '호스트 B'에게 전송하고 '호스트 A'는 FIN_WAIT_1 상태가 되고 FIN 플래그를 받은 '호스트 B'는 CLOSED_WAIT 상태가 됩니다.
[STEP 2]
'호스트 B'는 FIN 플래그에 대한 확인 메시지 ACK 플래그를 '호스트 A'에게 전송하고 그와 동시에 해당 포트에 연결되어 있는 애플리케이션에게 close()를 요청을 합니다.
ACK를 받은 '호스트 A'는 FIN_WAIT_2 상태가 됩니다.
[STEP 3]
close() 요청을 받은 '호스트 B'의 애플리케이션은 종료 프로세스를 진행하고 FIN 플래그를
'호스트 A'에게 보내고 LAST_ACK 상태가 됩니다.
[STEP 4]
FIN 플래그를 받은 '호스트 A'는 ACK 플래그를 '호스트 B'에 전송하고 TIME_WAIT상태가
됩니다. ACK 플래그를 받은 '호스트 B'는 CLOSED 상태가 됩니다.
'호스트 A'의 TIME_WAIT 상태는 일정 시간이 지나면 CLOSED 상태가 됩니다.
TIME_WAIT
TCP 연결을 종료할 때 신뢰성을 높이기 위해 존재하는 것으로 FIN 플래그에 대한
ACK 플래그를 송신한 후 바로 일정 시간 대기한 후 연결을 해지합니다.
클라이언트가 서버로부터 FIN 플래그를 수신하고 일정 시간 세션을 유지하지 않는다면
다음과 같은 문제가 발생할 수 있습니다.
1. 지연 패킷 발생할 경우 이미 다른 연결로 진행되었다면 지연 패킷이 뒤늦게 도달해 문제가 발생합니다.
마지막 ACK 플래그 유실 시 서버는 LAST_ACK 상태에 빠지게 되고 새로운 SYN 플래그 전달 시
∴ TIME_WAIT 상태로 일정 시간 대기하여 패킷의 오동작을 막아야 합니다. |
상태 | 설명 | 기타 |
CLOSED [클라이언트, 서버] |
포트가 닫힌 상태 | 3-Way Handshaking 4-Way Handshaking |
LISTEN [서버] |
포트가 열린 상태로 연결 요청 대기 상태 | 3-Way Handshaking |
SYN_SENT [클라이언트] |
SYN 플래그를 요청한 상태 | |
SYN_RECEIVED [서버] |
SYN 플래그를 받고 상대방의 응답을 기다리는 상태 | |
ESTABLISHED [클라이언트, 서버] |
포트 연결 상태 | 3-Way Handshaking 4-Way Handshaking |
FIN_WAIT_1 [클라이언트] |
FIN 플래그를 보내고 ACK 플래그 수신을 대기하는 상태 | 4-Way Handshaking |
CLOSED_WAIT [서버] |
애플리케이션에게 close()를 요청 진행하는 상태 | |
FIN_WAIT_2 [클라이언트] |
서버로부터 FIN 플래그 수신을 기다리는 상태 | |
LAST_ACK [서버] |
연결은 종료되었으나 확인을 기다리는 상태 | |
TIME_WAIT [클라이언트] |
연결은 종료되었으나 수신 보장을 위해 대기하는 상태 | |
SYN | 연결 요청 | - |
ACK | 응답 확인 | |
FIN | 연결 종료 요청 | |
RST | 연결 재설정 | 비정상적인 세션을 끊기 위해 연결을 재설정 하는 과정 |
[표-1] Handshaking 상태 및 플래그 표
● ARQ 기법
GO-Back-N ARQ
손상되거나 분실된 프레임 이후의 프레임을 모두 재전송하는 방식으로 추가 버퍼가 필요하지 않으며 구조가
비교적 간단하고 구현이 단순합니다.
단점으로는 하나의 패킷으로 인해 많은 패킷을 불필요하게 재전송하게 됩니다.
Selective-Reject ARQ
손상되거나 분실된 프레임만을 재전송하는 방식입니다.
단점으로는 프레임 재배열 등의 추가 로직이 필요하므로 구조가 복잡하며 순차적이지 않은 프레임을 재배열하기 위해 버퍼가 필요합니다.
Stop-and-wait ARQ
수신 측에서 전송한 1개의 프레임을 송신 측에서 손상 및 분실을 검사하여 손상 분실 시 재전송하는 방식으로
구현 방식이 단순하여 최대 프레임 크기의 버퍼를 하나만 잡아도 됩니다.
단점으로는 송신 측에서 확인을 할 때까지 다음 프레임을 전송할 수 없으므로 전송효율이 떨어집니다.
실제 네트워크에서 채용하지 않는 방식입니다.
Adaptive ARQ
전송 효율을 최대로 하기 위해서 데이터 블록의 길이를 채널의 상태에 따라 동적으로 변경하는 방식입니다.
전송 효율이 제일 좋지만 제어 회로가 복잡하고 비용이 많이 들어 현재는 거의 사용하지 않습니다.
UDP(User Datagram Protocol, 사용자 데이터그램 프로토콜)란?
비연결형 서비스를 지원하는 전송계층 프로토콜로써 송신 측에서 일방적으로 데이터를 전달하는
통신 프로토콜로 데이터를 데이터그램 단위로 처리합니다.
※ 데이터그램 : 독립적인 관계를 지니는 패킷이라는 뜻입니다.
- 신뢰성보다는 연속성이 중요한 서비스 예를 들면 실시간 서비스(streaming)에 자주 사용됩니다.
(e.g., DNS, 음성 인터넷 프로토콜(VoIP), 온라인 게임, 실시간 스트리밍 서비스)
UDP 특징
1. 비연결형 서비스로 데이터그램 방식을 제공합니다.
2. 정보를 주고받을 때 정보를 보내거나 받는다는 신호 절차를 거치지 않습니다.
3. 신뢰성 없는 데이터를 전송합니다.
4. 데이터의 경계를 구분합니다.
5. TCP보다 전송속도가 빠릅니다.
정리
프로토콜 종류 | TCP | UDP |
연결 방식 | 연결형 서비스 | 비연결형 서비스 |
데이터단위 | 세그먼트 | 데이터그램 |
패킷 교환 방식 | 가상 회선 방식 | 데이터그램 방식 |
데이터 전송 순서 | 데이터 전송 순서 보장 | 데이터 전송 순서 바뀔 수 있음 |
수신 여부 확인 | 수신 여부 확인 | 수신 여부 확인하지 않음 |
손실 여부 | 손실 없음 | 손실 가능성 있음 |
통신방식 | 1:1 통신 | 1:1 or 1:N or N:N 통신 |
신뢰성 | 높다 | 낮다 |
속도 | 느리다 | 빠르다 |
e.g. | HTTP, 파일 전송 | 실시간 스트리밍 서비스 |
[표-2] TCP / UDP 비교표
참고 1. 프로토콜(Protocol) 참고 2. OSI 7 계층(OSI 7 Layer) 참고 3. TCP/UDP 대표 프로토콜 참고 4. TDP/UDP 헤더(Heder) 참고 5. IP(Internet Protocol) 참고 6. DNS(도메인 네임 시스템) |
'Network' 카테고리의 다른 글
[Network] IP《Internet Protocol》 (0) | 2021.02.20 |
---|---|
[Network] TCP/UDP 헤더《TCP/UDP Header》 (0) | 2021.02.20 |
[Network] TCP/UDP 대표 프로토콜《TCP/UDP Protocol》 (0) | 2021.02.20 |
[Network] OSI 7계층《OSI 7 Layer》 (0) | 2021.01.27 |
[Network] 프로토콜《Protocol》 (0) | 2021.01.05 |