TCP - L4

00SNU3K·2021년 8월 6일
0

  • 인터넷상에서 데이터를 메시지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜.

  • 일반적으로 TCP와 IP를 함께 사용하는데 IP가 데이터의 배달을 처리한다면 TCP는 패킷을 추적.

  • 연결형 서비스로 가상 회선 방식 제공
    (발신지와 수신지를 연결하여 패킷을 전송하기 위한 논리적 경로 배정)

  • 3-way handshaking 통해 세션을 성립하고 연결 설정, 4-way handshaking 통해 해제

  • 높은 신뢰성, 흐름제어(수신자의 처리량을 초과하여 전송하지 않음) 및 혼잡제어(라우터 처리량을 초과하여 전송하지 않음), 오류제어(재전송), UDP보다 속도 느림(CPU를 사용하기 때문에)


TCP Segment Header Format

▶Source/Destination Port Number (각 16비트)

Source Port는 정해져 있는 것도 있지만 대부분의 경우 처음 세그먼트를 전송하는 측에서 임의의 번호 사용(client port, 1024~ 이상 port 사용)

Destination Port는 처음 세그먼트를 전송하는 측에서 사용하는 포트가 정해져 있음. (예로 들어, HTTP는 80번포트)

▶Sequence Number (32비트)

TCP 세그먼트의 순서번호 표시. 통신을 시작하는 양단의 장비들이 별개로 임의의 번호부터 시작

▶Acknowledgement Number (32비트)

수신하기를 기대하는 다음 바이트 번호. == 마지막 수신 성공 번호 + 1

▶HLEN (Header Length, 4비트)

‘4바이트’ 단위로 표시. TCP 헤더 길이는 최소 20바이트, 총 60바이트(3way-handshake) 이하

▶6개의 Flag bits (1비트씩 총 6비트)

TCP 세그먼트 전달의 회선 및 데이터 관리 제어 기능을 하는 플래그

ㅇURG (Urgent)

Urgent Pointer 필드에 값이 채워져있음을 알림

. 송신측 상위 계층이 긴급 데이터라고 알려주면,

. 긴급비트 URG를 1 로 설정하고,

. 순서에 상관없이 먼저 송신됨

긴급 데이터의 마지막 바이트 위치가 Urgent Pointer로 가리켜짐

ㅇACK (Acknowledgement) ✔

확인응답 필드에 확인응답번호(Acknowledgement Number) 값이 셋팅됐음을 알림

. 1로 셋팅되면, 확인번호 유효함을 뜻함

. 0로 셋팅되면, 확인번호 미포함 (즉, 32 비트 크기의 확인응답번호 필드 무시됨)

SYN 세그먼트 전송 이후(TCP 연결 시작후) 모든 세그먼트에는 항상 이 비트가 1로 셋팅됨

ㅇPSH (Push)

버퍼링된 데이타를 가능한한 빨리 상위 계층 응용프로그램에 즉시 전달할 것

. 수신측은 버퍼가 찰 때까지 기다리지 않고,

. 수신 즉시 버퍼링된 데이터를 응용프로그램에 전달

. 例) telnet 세션에서 q 입력 만으로 세션 종료를 알릴 때 등

때론, 서버측에서 더이상 전송할 데이터가 없음을 나타내기도 함

※ 아래 3개 비트 플래그(RST,SYN,FIN)는 TCP 연결설정 및 TCP 연결종료에 주체적으로 사용됨

ㅇRST (Reset) [강제 연결 초기화 용도] ✔

연결확립(ESTABLISHED)된 회선에 강제 리셋 요청

. 강제 리셋 : RST=1 (RST 세그먼트 또는 RESET 세그먼트)

. 연결 상의 문제를 발견한 장비가 RST 플래그를 1로 설정한 TCP 세그먼트를 송출

​ .. LISTEN,SYN_RCVD 상태일때 => RST 수신한 경우에 => LISTEN 상태로 들어감

​ .. 그밖의 상태 일때 => RST 수신한 경우에 =>

​ 연결 끓고 CLOSED 상태로 들어감

* 반 개방 또는 연결 문제 등의 상황 처리를 위한 특별한 초기화용 제어 비트

ㅇSYN (Synchronize) [연결시작,회선개설 용도] ✔

TCP 연결설정 초기화를 위한 순서번호의 동기화 ☞ TCP 연결 설정

​ . 연결요청 : SYN=1, ACK=0 (SYN 세그먼트)

​ . 연결허락 : SYN=1, ACK=1 (SYN+ACK 세그먼트)

​ . 연결설정 : ACK=1 (ACK 세그먼트)

* 즉, 송수신 간에 순서번호의 동기화

ㅇFIN (Finish) [연결해제,회선종결 용도] ✔

송신기가 데이타 보내기를 끝마침 ☞ TCP 연결 종료

​ . 종결요청 : FIN=1 (FIN 세그먼트)

​ . 종결응답 : FIN=1, ACK=1 (FIN+ACK 세그먼트)

▶Window size (16비트)

흐름제어를 위해 사용하는 16비트 필드, 상대편에게 자신의 버퍼 여유 용량 크기를 지속적으로 통보. 수신측에 의한 능동적 흐름제어 가능케함

▶Checksum (16비트)

헤더와 데이터의 에러를 확인하기 위한 필드(IP는 Header Checksum)
TCP는 모든 패킷을 checksum함.

▶Urgent Pointer (16비트)

TCP 세그먼트에 포함된 긴급 데이터의 마지막 바이트에 대한 일련번호.

없으면 전송한 데이터의 맨 마지막 바이트를 포인터로 가르킴.

▶Option

최대 40바이트까지 옵션데이터 포함가능

추가적인 옵션이 있을 경우 표시

profile
네트워크 전문가를 꿈꾸며

0개의 댓글