본문 바로가기

TCP Handshakes

TCP Timer

- TCP에서는 연결의 신뢰성을 보장하기 위해 4개의 타이머를 설정한다.

- TCP에서 timer 값은 RTT + 약간의 추가시간으로 설정한다.

 

* Retransmission 타이머

송신측은, 매 세그먼트 전송 시마다 타이머를 설정한다. 타이머 시간 내에 ACK를 받지 못하면 재전송 한다.

 


3-Way-Handshaking

TCP 프로토콜에서 연결을 설정하는 방법이다. 양 측이 데이터 송수신할 준비가 되었다는 것을 보장한다.

 

* 2-Way 사용 안하는 이유 

2-way

A입장에서는 연결이 되었다는 것을 확인할 수 있지만, B입장에서는 자신이 보낸 것이 잘 도착한지 알 수 없다.

 

ACK : Acknowledgement

SYN : Synchronized sequence numbers

 

1단계 : A는 B에게 접속 요청하는 SYN 패킷 보낸다. SEQ를 동기화 하기 위해 보내는 패킷이다.

 

2단계 : B는 SYN 패킷을 받아, 연결해도 좋다는 SYN-ACK 패킷을 보낸다.

동기화를 위한 SYN 세그먼트를 전송하고, 다음 SEQ 번호를 ACK 필드에 표시해서, 다음 SYN 세그먼트 수신을 확인한다., X+1은 SEQ=X 까지 수신이 잘 되었다는 의미도 포함하고 있다.

 

SEQ 동기화되었다는 것을 알려주기 위해 ACK에 SEQ+1 을 담아 보낸다.

 

3단계: A는 SYN-ACK 패킷을 받아, 응답을 잘 받았다는 ACK 패킷을 B에게 보낸다.

ACK는 2단계 에서 받은 SEQ+1 로 설정해서 보낸다.

 


4-Way-Handshaking

TCP 프로토콜에서 연결을 해제하는 방법이다.

 

1단계 : 클라이언트가 연결 해제위해 FIN 플래그 전송

 

2단계 : 서버는 FIN 받았다고 확인하기 위해 ACK를 보낸다. 그리고, 서버 통신이 끝날 때 까지 기다린다, 이 상황에서는 여전히 데이터 송신이 가능하다.

 

3단계 : 마지막으로 받을 ACK를 다 받았으면, 서버는 클라이언트에게 FIN 플래그를 전송한다.

 

4단계 : 클라이언트는 서버에게 ACK 보낸다. 그리고 Segment LifeTime의 최대 2배 시간정도 Time Wait 한다.

 

* 마지막에 Time Wait 하는 이유

만약, 서버에서 FIN을 보냈는데 유실이 되었다. 서버에서 보냈으므로, 타이머가 설정되었다. 유실이 되었으므로 응답을 받을 수 없으므로 서버에서는 다시 FIN을 보낸다.

 

만약 클라이언트에서 보내는 ACK가 유실되었는데, 서버는 응답을 받지 못했으므로 타이머가 터진다. 그러므로, 클라이언트에서 다시 ACK를 보내야 하므로, TIME_WAIT가 필요하다!

 

 

 

참고

https://sostarzia.tistory.com/45
https://adriansblog.tistory.com/43
http://www.ktword.co.kr/test/view/view.php?m_temp1=2470

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

OSI 7 계층 / TCP/IP Protocol Suite  (0) 2022.06.22