ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Network] TCP 연결과 해제
    CS/Network 2021. 9. 28. 20:07

    이 포스팅은 세미나를 위해 https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Network를 참고하여 작성하였습니다.

     

    연결 성립 (Connection Establishment)

     

    출처: https://brunch.co.kr/@dreaminz/5

    1. SYN(Synchronize): 클라이언트는 서버에 접속을 요청하는 SYN 플래그 비트가 설정된 세그먼트를 보낸다. 해당 세그먼트는 통신의 시작을 알리며, 세그먼트 내 순서 동기화를 위한 Sequence number인 M(임의명)를 담아 보낸다. 이때 클라이언트는 SYN을 보내고 SYN/ACK 응답을 기다리는 SYS_SENT 상태가 된다.
    2. SYN + ACK(Acknowledgement): 서버는 클라이언트의 요청인 SYN(M)을 받고 클라이언트에게 요청을 수락한다는 ACK(M+1)과 SYN(N) 플래그 비트가 설정된 세그먼트을 전송한다. 이때 서버는 SYN_RECVED 상태가 된다.
    3. ACK: 클라이언트는 서버의 수락 응답인 ACK(M+1)와 SYN(N) 플래그 비트가 설정된 세그먼트를 받고 서버의 응답을 받았다는 의미로, ACK(N+1) 플래그 비트가 설정된 세그먼트를 서버로 보내면 연결이 성립된다. 이후 실제 데이터를 전송할 수 있는 상태인 ESTABLISHED 상태가 된다. 서버 역시 클라이언트로부터 ACK을 받고 ESTABLISHED 상태로 변한다.

    연결 해제 (Connection Termination)

    출처: https://mindnet.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-22%ED%8E%B8-TCP-3-WayHandshake-4-WayHandshake

    1. FIN: 클라이언트가 연결을 종료하겠다는 FIN 세그먼트를 전송한다. 이때, Sequence number인 N을 포함하여 전달한다. 클라이언트는 서버의 종료 요청 확인을 기다리는 FIN_WAIT1 상태가 된다. 서버는 클라이언트와의 소켓 종료 세그먼트를 전달 받고, 자신의 소켓 프로세스에게 종료를 요청하며 기다리는 CLOSE_WAIT 상태가 된다.
    2. ACK: 서버는 FIN 세그먼트를 받아 내부적으로 소켓을 종료하겠다는 의미로 FIN에 대한 ACK를 클라이언트한테 보낸다.
    3. FIN: 서버에서 내부적으로 소켓이 정상적으로 close() 되었으면, 이를 클라이언트 측에 알려주고자 Sequence number인 M을 포함하여 FIN 세그먼트를 보낸다.
      이때, 서버는 마지막 응답 ACK만 받으면 Closed 될 수 있기 때문에 LAST_ACK 상태가 된다.
      클라이언트는 FIN 세그먼트를 받고 확인했다는 의미로 ACK를 보낸다. 이때 ACK가 유실되어 요청 수신 측(클라이언트)에서 소켓이 제거되지 않는 문제점이 발생할 수 있다. 그래서 일정 시간 동안의 시간을 대기하는 TIME_WAIT 상태로 접어들고, 일정 시간이 경과되면 소켓을 종료하게 된다.
    4. ACK: 클라이언트는 FIN 세그먼트를 받고 이에 응답하는 ACK를 M+1을 포함하여 서버에게 전송한다. 이후 서버는 ACK을 받고 소켓을 종료한다.

    TCP Header Code Bit (Flag Bit)

     

    출처: http://www.ktword.co.kr/test/view/view.php?m_temp1=2437

    TCP Header에는 Code Bit(Flag Bit)가 존재한다. 이 부분은 총 6 Bit로 이루어져 있으며, Urg-Ack-Psh-Rst-Syn-Fin 순서로 나타난다. 예를 들어, 010000일 경우 Ack 세그먼트이다.


    Reference

    https://brunch.co.kr/@dreaminz/5

    https://mindnet.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%EC%89%BD%EA%B2%8C-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-22%ED%8E%B8-TCP-3-WayHandshake-4-WayHandshake

    'CS > Network' 카테고리의 다른 글

    [Network] DNS 동작 원리  (0) 2021.09.29
    [Network] HTTP vs HTTPS  (0) 2021.09.29
    [Network] TCP vs UDP  (0) 2021.09.28
    [Network] HTTP Methods - GET, POST, PUT, PATCH, DELETE  (0) 2021.09.27
    [Network] Cookie와 Session  (0) 2021.09.15

    댓글

Designed by Tistory.