[Network] TCP 3Way / 4Way Hand Shaking

3Way Hand Shaking

Tcp 커넥션의 연결과정
커넥션을 맺을려고 하는 측이 Active Open 수신하는 측이 Passive Open이라 하며 다음과 같이 동작한다
3way handshaking

  1. Passive Open측은 포트를 열어두고 연결을 기다린다
    • Listen 상태
  2. Active Open측은 원격으로 연결 요청을 보낸다
    • Syn send상태
    • SYN NUM은 랜덤하게 사용한다
    • SYN NUM이 매번 0부터 시작할 경우 Passive Open측에서 이전 연결에 대한 응답인지 새로운 연결에 대한 응답인지 구분할 수가 없기 때문이다
  3. Passive Open측은 요청을 받고 응답을 보낸다
    • Syn recv 상태
    • Passive Open측에서 메세지가 잘 가는지 확인하는 단계
  4. Active Open측은 메세지를 받고 응답을 보낸다
    • Active Open은 이 때 부터 Established 상태가 된다
    • Active Open에서 보낸 메세지가 올바르게 응답이 왔다는 확인이 된다
  5. Passive Open측은 응답을 받는다
    • Passive Open은 이 때 부터 Established 상태가 된다
    • Passive Open에서 보낸 메세지가 올바르게 전송되었고 응담이 왔다는 확인이 된다


4Way Hand Shaking

Tcp 커넥션의 종료과정
커넥션을 끊으려고 하는 측이 Active Close 수신하는 측이 Passive Close이라 하며 다음과 같이 동작한다
4way handshaking

  1. Active Close측은 종료를 위해 FIN 메세지를 보낸다
    • FIN_WAIT_1 상태
  2. Passive Close측은 FIN메세지를 수신하고 ACK메세지를 보낸다
    • CLOSE_WAIT 상태
    • 이 응답을 받은 Active Close측은 FIN_WAIT_2 상태가 된다
  3. Passive Close측은 FIN메세지를 보낸다
    • LASK_ACK 상태
    • FIN 메세지를 받고 전송하던 파일이 존재할 수도 있으니 ACK와 FIN을 나눠서 보내게 된다
  4. Active Close측은 메세지를 받고 응답을 보낸다
    • 이 때 Active Close측은 Time_Wait을 가진다
    • ACK 메세지가 올바르게 전달이 되지 않았을 경우 Passive Close측에서 FIN 메세지가 다시 오게 되는데 이런 정상 연결 종료를 위한 대기 시간이다
  5. Passive Close측은 응답을 받고 종료한다
  6. Active Close측은 Time_Wait이 지나 종료한다
Author: Song Hayoung
Link: https://songhayoung.github.io/2020/07/01/Network/TCP_3&4/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.