티스토리 뷰

 

TCP 프로토콜은 신뢰할 수 있고 정확한 데이터를 전달하기 위해 연결형 통신을 사용하는 프로토콜이다.

또한 데이터를 패킷으로 분할하여 전송하고, 패킷 전송 과정을 연결형 통신 방식으로 제어하며, 수신한 패킷들을 재조립하는 방식으로 데이터 전송의 정확성과 신뢰성을 확보하고 있다.


▶TCP Header

 

▷ Source/Destination Port # : 각 호스트에 있는 응용 프로그램의 포트 번호

▷ Sequence # : Segment Stream의 첫번째 Byte 번호, 송신되어지는 data의 순서를 구분하기 위해 사용

▷ ACK #: 

더보기

성공적으로 수신한 마지막 byte 번호 + 1이다.

NACK가 없다 -> 누적 ACK를 이용한다.

▷ 헤더 길이 : TCP 헤더의 길이, 옵션부분이 가변이므로 헤더의 길이가 바뀔수 있다.

▷ 예약: 예약하여 아직 사용하지 않는 필드

▷ Window size: 흐름제어를 위한 윈도우 사이즈

▷ Flag: 

더보기

U: URG

 1 = 마지막 필드인 Urgent Point가 유효

  - 특별한 제어 정보를 전달할때 쓰인다.

  - 수신 즉시 TCP는 수신측 APP에게 정보를 전달한다.

  - Telnet이나 rlogin과 같은 응용에서 인터럽트 키가 전송되거나 FTP에서 파일 전송

    중단과 같은 경우에 사용된다.

 

A: ACK

 1 =  ACK#가 유효

 

P: PSH

 1 = 클라이언트의 데이터가 TCP 버퍼에 쌓이지 않도록 한다.

  - 현재 대부분의 API에서 제공하지 않는다.

 

R: RST

긴급하게 강제로 끊을때

1 =  TCP 연결을 재설정한다.

시퀀스넘버와 버퍼를 초기화한다.

  - FIN과는 달리 버퍼를 즉시 비우고 접속을 종료한다.

  - half open 상태를 재설정한다.

  - 닫힌 포트에 대한 접속 요청에 응답(종료신호)

 

S: SYN

 1 = 연결 요청과 설정, 확인 응답에서 순서 번호 동기화

 

F: FIN

 1 = TCP 연결 세션 종료

▷ checkSum: 헤더와 데이터를 모두 포함한 사용자 데이터그램 전체에 대해 오류를 탐지하기 위해 사용된다.

 

 

반응형
Comments