ecsimsw

Tcp_ flow control / handshake 본문

Tcp_ flow control / handshake

JinHwan Kim 2019. 8. 6. 14:28

Flow control 

 

   송신부가 아무리 빨리 데이터를 전송할 수 있어도 수신부가 그 속도를 못 따라가 버퍼를 비우는 속도보다 채우는 속도가 빨라진다면 버퍼 오버플로우가 발생하여 데이터를 빠르게 보내는데 의미가 없을 것이다.

 

   TCP는 송신부에서 수신부의 버퍼 상황을 수시로 확인하여 송신 속도를 조절하는 flow control 서비스를 제공한다. 즉, 송신 속도와 수신 처리 속도를 같도록 하는 것이다. 

 

   TCP의 송신자는 수신측에 사용 가능한 버퍼 공간(receive window)을 알고 있다. 이를 rwnd 변수에 저장하고 송신자는 이를 이용하여 송신하고, 수신자는 응답 시 현재 rwnd를 송신부에 전달한다. TCP는 duplex(이중 통신) 구조기 때문에 각 측의 송신자는 상대의 수신 윈도우를 유지하는 것이다.

 

   ** rcv buffer에서 응답으로 rwnd=0 을 송신부에 전달하면, 송신부는 대기 상태에 빠지고, 수신부 버퍼에 공간이 생겨도 응답을 들어 기다리는 상태만 유지되는 교착 상태에 빠질 수 있다. 이런 상황을 막기 위해 송신부에서 rwnd=0을 수신한다면 지속적으로 데이터가 0인 의미 없는 세그먼트를 전송하여 응답을 받는 것으로 수신부의 버퍼 상황을 확인한다.

 

Handshake

 

   TCP의 연결 설정은 성능과 보안 측면에서 중요하다. 연결 설정 과정은 3단계로 이를 3-way handshake라고 부른다. 그 연결 과정은 다음과 같다.

 

   1. 클라이언트 - [SYN:1, seq: init_c], SYN segment를 전송

   2. 서버 - SYN segment를 수신하고 [SYN:1, seq:init_s, ack:init_c+1], SYN_ACK segment 전송

   3. 클라이언트 - [SYN:0, seq: init_c+1, ack: init_s+1, DATA] 전송

 

   ** 2 way로만 하면 client는 송수신이 확인되지만 server는 본인의 송신을 확인할 방법이 없다. 즉 양쪽 채널의 송수신 모두 보장되기 위해 3 way로 처리한다.

 

   연결 종료에는 같은 원리지만 한가지 단계가 추가되어 4 way handshake 방식이 사용된다. 연결 해제를 위한 비트는 FIN을 이용한다.

 

4way handshake, 연결 종료 방식

   1. 클라이언트 - [FIN:1, seq: fin_seq] 전송

   2. 서버 - [ACK] 전송

   3. 서버 - [FIN] 전송

   4. 클라이언트 - [ACK] 전송 이후, ACK의 loss에 따른 FIN의 재전송에 대비해 일정 시간 동안 지연해둔다. 

 

time wait 가 없을 시 문제 발생

   time wait이 없는 상황에서 server의 FIN에 대한 응답이 loss되면 서버는 FIN을 다시 재전송하려 할 것이고 close 하지 못하고 무한 반복 될 것이다. 이런 상황을 막기 위해 클라이언트는 close 전 약간의 시간 지연을 두는 것이다.

'Computer Science > Network' 카테고리의 다른 글

Network layer  (0) 2019.08.13
Tcp_ congestion control / fairness  (0) 2019.08.07
Transport layer_TCP  (0) 2019.08.05
Pipelining _ Go Back N, Selective Repeat  (0) 2019.07.29
Transport layer_ RDT  (0) 2019.07.23
Comments