TCP 연결성립 및 연결해제

이태곤·2023년 8월 8일
0

Network

목록 보기
12/23
post-thumbnail

1. 3-웨이 핸드셰이크

  • TCP 프로토콜을 사용하여 연결을 설정할 때 사용되는 절차로 세 단계로 이루어진다.

    1. 클라이언트는 ISN과 함께 SYN 플래그를 설정하여 서버에 연결 요청
      • ISN : 32비트 시퀀스의 고유번호이며, 이를 통해 TCP 연결을 구분하여 통신 충돌 방지
      • SYN = Synchronization, 연결 요청 플래그
      • ACK = Acknowledment, 응답 플래그
    2. 서버가 연결 요청을 수신하면, SYN 플래그를 확인하고 서버의 ISN 값을 SYN/ACK 플래그와 함께 클라이언트에게 전송
    3. 클라이언트는 이를 받아서 1이 증가한 ISN을 SYN 플래그와 함께 서버의 ISN에 1을 더한 값을 ACK 플래그로 담아 다시 서버에게 전송

    • 상태변화: 클라이언트, 서버 모두 CLOSED 된 상태에서 연결 시작
    1. 클라이언트 SYN → 클라이언트 상태는 SYN-SENT로 변경
      → 이 때, 서버는 LISTEN 상태여야 함
    2. 서버 상태는 SYN-RECEIVED로 변경 → 서버는 SYN/ACK 전송
    3. 클라이언트 ESTABLISHED → 클라이언트 ACK → 서버 ESTABLISHED
  • 3-way handshaking 과정을 거치면서 클라이언트-서버 간의 연결과정이 성립되기 때문에 TCP는 신뢰성이 있다고 말할 수 있다.


2. 4-웨이 핸드셰이크

  • 4-way handshaking: 데이터 전송이 완료되었으며 양쪽 호스트가 연결을 종료하려고 할 때 사용하는 TCP 연결 종료 과정
    → 클라이언트, 서버 모두 ESTABLESHED 되어있는 상태에서 연결 해제 시작
    1. 클라이언트가 연결 종료를 요청하기 위해 FIN 세그먼트를 전송하면, 클라이언트는 FIN_WAIT 1 상태로 전환
    2. 서버는 FIN 요청을 받으면 CLOSED_WAIT 상태로 이동하고, ACK 세그먼트를 클라이언트에게 전송하면 클라이언트는 FIN_WAIT 2 상태로 전환
    3. 일정 시간 후, 서버는 CLOSED_WAIT 상태에서 LAST_ACK 상태로 변경하고 FIN 세그먼트를 전송
    4. 클라이언트는 TIME_WAIT 상태로 변경하고 ACK를 전송한 후, 서버는 CLOSED 상태로 전환
      → 클라이언트는 설정한 TIME_WAIT 시간이 지나면 CLOSED 상태로 전환
      • TIME_WAIT 상태: 연결 종료 프로세스가 완료되고 모든 리소스가 확실히 해제될 때까지 대기하는 상태
        → MSL * 2 시간으로 보통 설정
        → MSL(Maximum Segment Lifetime): 최대 패킷 수명으로 OS마다 차이가 있음 (Ubuntu : 60초, Window : 4분)
      • TIME_WAIT 설정 이유
      1. 지연 패킷을 수신: 클라이언트는 연결 종료 후 일정 시간 동안 지연 패킷을 기다릴 수 있다.
        → 데이터 무결성을 보장
      2. 연결이 올바르게 닫힌 상태로 만들기 위해: 더 이상 해당 연결에 관련된 리소스나 포트가 사용되지 않도록 TCP 연결이 완전히 종료되도록 일정시간 기다린다.
        → 이후 새로운 TCP 연결이 올바르게 설정될 수 있도록 한다.

0개의 댓글