•
개요
◦
전송 제어 프로토콜로 네트워크에 연결된 컴퓨터에서 실행되는 프로그램 간에 통신을 안정적으로 순서대로 에러없이 교환할 수 있게 한다.
◦
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 연결 상태 변화