인터넷상에서 데이터를 메시지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜.
일반적으로 TCP와 IP를 함께 사용하는데 IP가 데이터의 배달을 처리한다면 TCP는 패킷을 추적.
연결형 서비스로 가상 회선 방식 제공
(발신지와 수신지를 연결하여 패킷을 전송하기 위한 논리적 경로 배정)
3-way handshaking 통해 세션을 성립하고 연결 설정, 4-way handshaking 통해 해제
높은 신뢰성, 흐름제어(수신자의 처리량을 초과하여 전송하지 않음) 및 혼잡제어(라우터 처리량을 초과하여 전송하지 않음), 오류제어(재전송), UDP보다 속도 느림(CPU를 사용하기 때문에)
TCP Segment Header Format
Source Port는 정해져 있는 것도 있지만 대부분의 경우 처음 세그먼트를 전송하는 측에서 임의의 번호 사용(client port, 1024~ 이상 port 사용)
Destination Port는 처음 세그먼트를 전송하는 측에서 사용하는 포트가 정해져 있음. (예로 들어, HTTP는 80번포트)
TCP 세그먼트의 순서번호 표시. 통신을 시작하는 양단의 장비들이 별개로 임의의 번호부터 시작
수신하기를 기대하는 다음 바이트 번호. == 마지막 수신 성공 번호 + 1
‘4바이트’ 단위로 표시. TCP 헤더 길이는 최소 20바이트, 총 60바이트(3way-handshake) 이하
TCP 세그먼트 전달의 회선 및 데이터 관리 제어 기능을 하는 플래그
Urgent Pointer 필드에 값이 채워져있음을 알림
. 송신측 상위 계층이 긴급 데이터라고 알려주면,
. 긴급비트 URG를 1 로 설정하고,
. 순서에 상관없이 먼저 송신됨
긴급 데이터의 마지막 바이트 위치가 Urgent Pointer로 가리켜짐
확인응답 필드에 확인응답번호(Acknowledgement Number) 값이 셋팅됐음을 알림
. 1로 셋팅되면, 확인번호 유효함을 뜻함
. 0로 셋팅되면, 확인번호 미포함 (즉, 32 비트 크기의 확인응답번호 필드 무시됨)
SYN 세그먼트 전송 이후(TCP 연결 시작후) 모든 세그먼트에는 항상 이 비트가 1로 셋팅됨
버퍼링된 데이타를 가능한한 빨리 상위 계층 응용프로그램에 즉시 전달할 것
. 수신측은 버퍼가 찰 때까지 기다리지 않고,
. 수신 즉시 버퍼링된 데이터를 응용프로그램에 전달
. 例) telnet 세션에서 q
입력 만으로 세션 종료를 알릴 때 등
때론, 서버측에서 더이상 전송할 데이터가 없음을 나타내기도 함
※ 아래 3개 비트 플래그(RST,SYN,FIN)는 TCP 연결설정 및 TCP 연결종료에 주체적으로 사용됨
연결확립(ESTABLISHED)된 회선에 강제 리셋 요청
. 강제 리셋 : RST=1 (RST 세그먼트 또는 RESET 세그먼트)
. 연결 상의 문제를 발견한 장비가 RST 플래그를 1
로 설정한 TCP 세그먼트를 송출
.. LISTEN,SYN_RCVD 상태일때 => RST 수신한 경우에 => LISTEN 상태로 들어감
.. 그밖의 상태 일때 => RST 수신한 경우에 =>
연결 끓고 CLOSED 상태로 들어감
* 반 개방 또는 연결 문제 등의 상황 처리를 위한 특별한 초기화용 제어 비트
TCP 연결설정 초기화를 위한 순서번호의 동기화 ☞ TCP 연결 설정
. 연결요청 : SYN=1, ACK=0 (SYN 세그먼트)
. 연결허락 : SYN=1, ACK=1 (SYN+ACK 세그먼트)
. 연결설정 : ACK=1 (ACK 세그먼트)
* 즉, 송수신 간에 순서번호의 동기화
송신기가 데이타 보내기를 끝마침 ☞ TCP 연결 종료
. 종결요청 : FIN=1 (FIN 세그먼트)
. 종결응답 : FIN=1, ACK=1 (FIN+ACK 세그먼트)
흐름제어를 위해 사용하는 16비트 필드, 상대편에게 자신의 버퍼 여유 용량 크기를 지속적으로 통보. 수신측에 의한 능동적 흐름제어 가능케함
헤더와 데이터의 에러를 확인하기 위한 필드(IP는 Header Checksum)
TCP는 모든 패킷을 checksum함.
TCP 세그먼트에 포함된 긴급 데이터의 마지막 바이트에 대한 일련번호.
없으면 전송한 데이터의 맨 마지막 바이트를 포인터로 가르킴.
최대 40바이트까지 옵션데이터 포함가능
추가적인 옵션이 있을 경우 표시