ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TCP Header
    개발하면서/etc 2009. 5. 6. 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

    댓글 0

Designed by Tistory.