이전글 : [TCP] 연결수립 과정

TCP의 연결 준비

 연결의 식별자  

  TCP는 많은 연결을 동시에 처리할 수 있어야 합니다. 각 연결을 유일 하도로 식별하기 위해서

  연결이 이루어지는 두 장비의 소켓 식별자(IP 주소 및 포트번호)를 연결의 식별자로 사용합니다. 

 연결의 데이터 저장 : TCB(전송 제어 블록)

   각 연결에 대한 독립적인 데이터를 유지 하기 위해서 TCB(transmission control block)라는

   데이터 구조를 사용합니다. 

   TCB에는 연결를 식별하기 위한 정보, 송수신되는 데이터를 가리키는 버퍼, 승인처리와 관련된 데이터

   등등...이 저장됩니다. 

   일반적으로 TCP는 서버/클라이언트를 구조를 가지게 되는데 클라이언트 입장에서는 서버의 접속 정보를 

   알고 있기 때문에 TCB정보를 바로 생성할 수 있습니다. 

   하지만 서버의 경우 어떠한 클라이언트가 접속 할지 모르기 때문에 우선 클라이언트의 정보를 지정하지 않고 

   생성한 다음에 연결이 들어 올 때 클라이언트 정보를 TCB에 연결시킵니다. 

 

TCP 연결 수립 과정 : 쓰리 웨이 핸드 셰이크

 연결 수립 기능

  TCP는 연결 수립시 첫 번째 통신에서 사용 할 초기 순서번호를 지정하고 상대방에게 알립니다. 

 TCP 연결 수립에 사용 되는 메시지

메 시 지 설명
SYN(synchronize) 동기화 메시지. 연결을 초기화하고 수립한다. 이 메시지는 장비간의 순서 번호를 동기화 시킨다.
ACK(acknowledgment) 승인 메지시. 이 메시지는 SYN나 FIN의 메시지 대해서 잘 받았다는 응답을 처리한다.

  #TCP가 해당 메시지를 전달하는 방법은 TCP 헤더의 제어 비트의 플레그를 통해서 제어합니다. 

 연결 수립에서 사용되는 FSM

상 태 설 명
CLOSE 연결 수립을 시작하기전의 기본 상태(연결 없음)
LISTEN 클라이언트의 SYN(연결 초기화 요청)메시지를 기다리는 상태
SYN-SENT 자신의 SYN 메시지를 보내고 상대방의 응답 SYN를 기다리는 상태
SYN-RECEIVED 상대방의 SYN 메시지를 전달받고 자신의 SYN 메시지를 보내고 ACK를 기다리는 상태

 

쓰리 웨이 핸드 셰이크 연결 수립 과정 

TCP 연결 수립 과정

 

위 그림과 같이 3번의 통신을 통해서 TCP연결이 수립되기 때문에 "쓰리 웨이 핸드 셰이크" 라고 불립니다.

연결 수립시에는 서버에서 클라이언트의 SYN 메시지를 받고 곧바로 SYN와 ACK를 보낼 수 있기 때문에

3회에 메시지로 연결이 가능 합니다. 

연결 종료시에는 서버에서 클라이언트의 FIN 메시지를 받고 곧바로 FIN메시지를 보낼 수 없습니다.

이 내용은 연결 종료 글에서 설명드리겠습니다.

TCP 연결 수립 순서 번호 동기화와 인자 교환

 TCP는 패킷의 순서를 보장을 위해서 TCP연결 수립시 순서번호에 대한 동기화 작업을 진행합니다. 

 ISN(초기 순서 번호)은 예전에는 4 마이크로초(1/1,000,000 초)마다 증가하는 카운터를 사용해서 32비트의 숫자를

 사용 했었는데 이런 경우 이전의 ISN을 보고 ISN을 예측 할 수 있어서 이런 문제를 보완하기 위해서

 무작위를 사용한다. 

 TCP연결 수립 SYN 메시지에 새로 생성 된 ISN을 TCP의 헤더의 순서번호 필드에 입력해서 보내고 받은 쪽에서는

 그 ISN에 +1을 한 값을 ACK 메시지의 승인번호 필드에 입력해서 보내는 형식으로 동기화 작업을 진행합니다. 

순서번호 동기화 예제

 위의 예제는 클라이언트의 ISN은 100이고 서버의 ISN은 2080으로 지정된 예제입니다. 

 ESTABLISHED상태에서 데이터를 주고 받을 때 마다 ISN으로 지정된 순서번호가 증가해서

 데이터를 얼마나 전송되었는지 확인하며 승인번호를 기준으로 상대방이 데이터를 받았는지 확인합니다. 

 자세한 내용은 TCP 데이터 송수신 부분에서 설명을 드리겠습니다. 

+ Recent posts