달력

042018  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  •  
  •  
  •  
  •  
  •  

'TCP header'에 해당되는 글 1건

  1. 2009.05.06 TCP Header

TCP Header

개발하면서 2009.05.06 18:58
IP가 데이타 교환만을 하는데, TCP는 데이터 누락, 패킷의 순서 뒤바뀜 등의 교정 관련 기능을 가지고 있다.


[TCP HEADER의 구조]
(RESERVED는 6비트, CODEBITS는 CWR, ECE를 제외한 6비트로 가정하자.);;; 보기좋은거 따오다보니...

. SOURCE PORT/DESTINATION PORT
SOURCE PORT : 메시지를 보내는 측의 포트
DESTINATION PORT : 메시지를 받는 측의 포트

. SEQUENCE NUMBER
뒤에서 나올 SYN플래그가 설정되어있다면, SEQUENCE NUMBER는 초기화 된다. SYN이 설정이 되어있지 않다면 초기화된 SEQUENCE NUMBER + 1의 값이 들어간다.다음부터는 순서대로 +1이 되어 대입이 된다.
초기화된 SEQUENCE NUMBER(ISN)

. ACKNOWLEDGEMENT NUMBER
다음에 받을것으로 예상되는 SEQUENCE NUMBER가 대입이 된다.

. DATA OFFSET
TCP 헤더의 크기를 나타낸다. 최소 5 words 최대 15 words이다. 여기서 word는 32 bit임

. RESERVED

나중을 위해 예약된 필드, 0으로 초기화 된다.

. CODE BITS
  URG (1 bit) – URGENT POINTER 필드가 유효
  ACK (1 bit) – ACKNOWLEDGMENT필드를 유효
  PSH (1 bit) – 세그먼트 PUSH를 요청
  RST (1 bit) – 즉시 연결을 끊음(비정상적인 종료)
  SYN (1 bit) – sequence numbers 동기화
  FIN   (1 bit) – 정상적인 종료

. CHECKSUM
전송된 세그먼트가 잘 전송된건지 검사한다.

. URGANT POINTER
세그먼트가 긴급데이터를 포함한다는것을 의미한다.
URG가 설정되어있다면 마지막 긴급한 데이터의 위치에 대한 포인터를 갖는다.

. OPTION + PADDING
OPTION : 받는 측의 부가정보를 전달하기 위해 사용한다.
PADDDING : 헤드의 크기를 맞추기 위해 사용한다.

. 연결 시작
1. 클라이언트에서 SYN과 SEQ를 전송한다.
2. 서버에서 SYN과 클라이언트 SEQ에 대한 ACK, 그리고 자신의 SEQ를 전송한다.
3. 클라이언트에서 서버 SEQ에 대한 ACK를 전송하여 연결을 시작한다.


. 연결 종료

1. 클라이언트에서 FIN 플래그와 마지막 데이터의 SEQ를 전송한다.
2. 서버에서 클라이언트 SEQ에 대한 ACK를 전송한다.
3. 서버에서 또 FIN플래그와 서버 마지막 데이터의 SEQ를 전송한다.
4. 클라이언트는 서버 SEQ에 대한 ACK를 전송함으로 연결을 종료한다.

이 글은 저의 이해 및 정리한 것이므로 사실과 다를 수 있습니다.
틀린점은 지적해주시면 감사하겠습니다.

참고 :
http://www.joinc.co.kr/modules/moniwiki//wiki.php/article/TCP_%C0ڼ%BC%C8%F7_%BA%B8%B1%E2
http://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_checksum_using_IPv4
http://condor.depaul.edu/~jkristof/technotes/tcp.html
Posted by 오산돌구