-
TCP Header개발하면서/etc 2009. 5. 6. 18:58반응형tcpheader.pdfIP가 데이타 교환만을 하는데, TCP는 데이터 누락, 패킷의 순서 뒤바뀜 등의 교정 관련 기능을 가지고 있다.
[TCP HEADER의 구조]
URG (1 bit) – URGENT POINTER 필드가 유효
(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
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
반응형