E D R S I H C RSS
ID
Password
Join
하고 싶은 모든 일을 할 수 있는 시간을 찾는 가장 쉬운 길은, 지금 당장 그 바보상자(TV)를 끄는 것. ―J.H.S.


TCP는 연결을 초기화할 때 3-way handshake 방식을 사용합니다. 이 과정은 다음과 같은 두가지 역할을 합니다:
  • 양쪽 모두 데이타를 전송할 준비가 되었다는 것을 보장하고, 실제로 데이타 전달이 시작하기전에 한쪽이 다른 쪽이 준비되었다는 것을 알수 있도록 합니다.
  • 양쪽 모두 상대편에 대한 초기 순차일련변호를 얻을 수 있도록 합니다.

새로운 연결을 열때 왜 단순하게 초기 일련번호를 0으로 놓지 않을까요? 만약 연결이 짧은 순간에 이루어질 경우 단지 몇개의 세그먼트들만을 교환할 것이기 때문에, 이런 경우 낮은 일련변호를 재사용할 지도 모르게 됩니다. 따라서, 데이타를 전송하기를 원하는 쪽에서는 초기 일련번호를 선택할 수 있어야만 합니다. 3-way handshake는 다음과 같이 진행됩니다:

  1. TCP A는 초기 일련번호(A_SEQ)를 정하고 이를 B로 다음과 같이 전송합니다: SYN_FLAG=1, ACK_FLAG=0, SEQ=A_SEQ
  2. TCP B가 SYN 패킷을 받으면, B역시 초기 일련번호(B_SEQ)를 정하고 이를 A로 다음과 같이 전송합니다: ACK=(A_SEQ+1), ACK_BIT=1, SEQ=B_SEQ, SYN_FLAG=1
  3. A가 B의 응답을 받았으면, B가 선택한 초기 일련번호를 알 수 있는 패킷을 "데이타영역없이" 보냅니다 : SYN_FLAG=0, ACK=(B_SEQ+1), ACK_BIT=1, SEQ=A_SEQ+1(데이타길이 = 0)
  4. 데이타 전송은 이시점에서 시작할 수 있습니다.

주의: The sequence number used in SYN segments are actually part of the sequence number space. That is why the third segment that A sends contains SEQ=(A_SEQ+1). This is required so that we don't get confused by old SYNs that we have already seen. To insure that old segments are ignored, TCP ignores any segments that refer to a sequence number outside of its receive window. This includes segments with the SYN bit set.

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2010-10-28 12:42:52
Processing time 0.0327 sec