Search
Duplicate
🛡️

TCP(Transmission Control Protocol)

개요
전송 제어 프로토콜로 네트워크에 연결된 컴퓨터에서 실행되는 프로그램 간에 통신을 안정적으로 순서대로 에러없이 교환할 수 있게 한다.
TCP의 안정성을 필요로 하지 않는 어플리케이션의 경우, 일반적으로 TCP 대신 비접속형 사용자 데이터그램 프로토콜(UDP)를 사용한다.
TCP는 UDP보다 안전하지만 느리다.
구조
Source Port: 2 byte
Destination Port: 2 byte
Sequence Number: 4 byte
Acknowledgement Number: 4 byte
Offset: 헤더의 길이
Reserved: 예약된 필드로 사용하지 않음
Checksum
Window: 사용공간이 얼마나 남아있는지 알려주는 필드 즉, 남아있는 TCP 버퍼 공간을 알려줌
Usgent Pointer: 긴급한 정보인 경우, 해당 데이터의 인덱스를 알려준다.
TCP Option: 일반적으로 잘 안붙고 붙더라도 4byte씩 붙으며 총 10개까지 붙을 수 있음
Flags는 TCP가 계속해서 통신을 진행하면서 연결 상태를 물어보는데, 이때 어떤 플래그를 보내는 것인지에 따라 통신이나 데이터를 제어할 수 있다.
URG flag (Urgent)
Urgent Pointer에 값이 채워져있음을 알린다.
ACK flag (Acknowledgement)
승인 비트로 데이터를 보내도 되는지 확인 응답을 받는 필드다.
PSH flag (Push)
TCP 버퍼가 일정한 크기만큼 쌓여야 패킷을 추가적으로 전송하는데, 버퍼 상관없이 계속해서 데이터를 밀어넣겠다는 의미를 가진 필드다.
RST flag (Reset)
Reset Flag로, 연결(Established)이 되어있는 상태에서 추가적으로 데이터를 주고받을 때 문제가 발생해서 연결을 초기화하는 필드다.
SYN flag (Synchronize)
동기화 플래그로 상대방과 연결을 시작할 때 사용하는 플래그다.
해당 비트가 처음 보내지고 난 이후부터 둘 사이의 연결이 동기화되기 시작한다.
FIN flag (Finish)
Fin Flag로 종료 플래그며 연결을 끊을 때 사용하는 필드다.
종결요청: FIN = 1, 종결응답: FIN=1, ACK=1
연결은 결과적으로 순서로 구현되며 연결은 상태(전이)라는 개념을 동반한다.
TCP는 네트워크에 연결된 컴퓨터에서 실행되는 프로그램 간에 일련의 옥텟을 안정적으로 순서대로 에러 없이 교환할 수 있게 한다.
장치들 사이의 논리적인 접속을 성립하기 위해 연결을 설정하여 신뢰성을 보장하는 연결형 서비스다.
세그먼트를 보낸다. UDP는 데이터그램
특징
연결형 서비스로 가상 회선 방식을 제공한다.
3-way handshaking 과정을 통해 연결을 설정하고 4-way handshaking 과정을 통해 연결을 해제한다.
발신지와 수신지를 연결하여 패킷을 전송하기 위한 논리적 경로를 배정한다는 말이다.
흐름 제어
데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지한다.
혼잡 제어
네트워크 내의 패킷 수가 과도하게 증가하지 않도록 방지한다.
높은 신뢰성 보장
신뢰성이 높은 전송을 한다. 다만 이 때문에 UDP보다 속도가 느리다.
따라서 TCP는 신뢰성이 중요한 전송 방식에 사용하는 프로토콜로 적합하다. 파일 전송이 이에 속한다.
Full-Duplex, Point-to-Point 방식
Full-Duplex : 전송이 양방향으로 동시에 일어날 수 있다.
Point-to-Point : 연결이 정확히 2개의 종단점을 가지고 있다.
TCP 연결 및 연결 해제 과정
TCP 연결 과정(3-way handshaking)
1.
클라이언트가 서버에게 요청 패킷을 보낸다.
2.
서버가 클라이언트의 요청을 받아들이는 패킷을 보낸다.
3.
클라이언트는 이를 최종적으로 수락하는 패킷을 보낸다.
#1, #2에서 각자 고유한 시퀀스 번호를 발급하고 이를 Sequence Number에 넣어서 송신한다.
각 클라이언트와 서버는 시퀀스 번호를 수신 후, 1씩 더해서 응답한다.
각 송수신 과정에서의 Flags
#1에선 SYN Flag를 활성화하므로 0x02(00000010)이다.
#2에선 SYN와 ACK를 활성화하므로 0x12(00010010)이다.
#3에선 ACK를 활성화하므로 0x10(00010000)이다.
TCP 통신 과정
1.
보낸 쪽에서 또 보낼 때는 SEQ 번호와 ACK 번호가 그대로다.
2.
받는 쪽에서 SEQ 번호는 받은 ACK 번호가 된다.
3.
받는 쪽에서 ACK 번호는 받은 SEQ 번호 + 데이터의 크기
TCP 연결 해제 과정(4-way handshaking)
연결을 끊을 때 클라이언트가 FIN 세그먼트와 ACK 세그먼트를 보낸다.
서버는 연결된 상태에서 이를 수신하고 ACK를 보낸다.
TC 연결 상태 변화