2007년 6월 27일 수요일

TCP 이해

첫번째, 잃어버린 TCP확인 메세지(acknowledgement)는 재전송을 강요할 필요가 없는데 왜 그런가?

host A 과 host B 가 TCP 통신을 한다고 가정하겠습니다.
TCP 세그먼트에는 Sequence Number 와 Acknowledgment Number 라는 요소가 포함되어 있습니다.
먼저 host A가 host B에게 TCP 세션을 맺기 위해 SYN(Synchronize) 세그먼트를 전송합니다.
여기에는 임의의 Sequence Number 가 포함됩니다. 이것을 SEQ#=100 이라 가정하겠습니다.
그럼 host B는 이것에 대한 SYN(Synchronize), ACK(Acknowledgment) 세그먼트를 host A에게 전송하는데 Sequence Number 는 임의로 생성되지만 Acknowledgment Number 는 host A에게서 받은 SEQ#=100 보다 1이 증가한 101을 보내야 합니다.
이것을 SEQ#=100 , ACK#=101 이라고 가정하겠습니다.
그럼 이것을 받은 host A는 ACK#=101 이 자신이 보낸 SEQ#=100 보대 1이 증가한 것을 검사한 후 세션이 제대로 이루어졌다고 판단하게 됩니다.
ACK#=101 이 아닌 다른 number나 SYN, ACK 세그먼트를 받지 못하게 되면 통신이 제대로 수행되지 않았다고 판단하고 다시 SYN 세그먼트를 host B 에게 보내게 되는 가죠.
따라서 ACK 세그먼트의 재전송을 강요하지 않고도 세션이 이루어 졌는 지를 판단할 수 있습니다.

두번째, TCP는 연결을 설정하기 위해 두 종단간 동의가 있어야 한다. 두 종단간의 연결 설정 과정을 설명하라!

① host A SYN (SEQ#=100 CODE Bit=SYN) ===> host B
: 임의의 SEQ# 를 생성하여 host B에 전송
② host A <=== (SEQ#=200, ACK#=101 CODE Bit=SYNACK) host B
: 임의의 SEQ# 를 생성하고 host A에게 받은 SEQ#=100 에 대해 ACK#=101 를 host A에 전송
③ host A (SEQ#=101 ACK#=201 CODE Bit=ACK) ===> host B
: 임으로 생성한 SEQ#=100 의 다음 번호인 SEQ#=101 과 host B에게 받은 SEQ#=200에 대한 ACK#=201 를 host B에 전송
④ host A <=== (SEQ#=201 ACK#=102 CODE Bit=ACK) host B
: 임으로 생성한 SEQ#=200 의 다음 번호인 SEQ#=201 과 host A에게 받은 SEQ#=101에 대한 ACK#=102 를 host B에 전송

이상과 같은 4가지 과정으로 정상적인 TCP 세션이 맺어진 후에 Data 의 전송이 이루어집니다.

TCP 3-way/4-way handshaking 그림참조
3-way handshaking 데이터전송시 세션하이젝킹
TCP/IP통신프로토콜
TCP통신 차단기법을 이용한 인터넷서비스 차단

댓글 없음: