[CS] TCP 연결 성립 및 연결 해지

최지나·2023년 11월 1일
2

CS

목록 보기
16/55
post-thumbnail

TCP의 연결 성립: 3-웨이 핸드쉐이크

3단계의 과정을 거쳐 연결 성립
SYN : synchronization의 약자. 연결 요청 플래그
ACK: acknowledgement의 약자. 응답 플래그

1. SYN (씬) 단계 (요청)

  • 클라이언트는 서버에 클라이언트의 ISN(고유번호)을 담아 SYN을 보냄

2. SYN + ACK 단계 (응답)

  • 서버는 클라이언트의 SYN을 수신하고, 서버의 ISN을 보내며 승인 번호(ACK)로 클라이언트의 ISN + 1을 보냄
  • 서버는 listen 상태이어야지만 씬을 받을 수 있다

3. ACK 단계 (확인)

  • 클라이언트는 서버의 ISN + 1한 값인 승인번호(ACK)를 서버에 보냄

ISN

  • TCP 기반 데이터 통신에서 각각의 새 연결에 할당된 고유한 32 비트 시퀀스 번호
  • TCP 연결을 통해 전송되는 다른 데이터 바이트와 충돌하지 않는 시퀀스 번호를 할당하는데 도움이 된다

이러한 서버와 클라이언트 간의 연결 설정 과정이 있기 때문에 TCP는 신뢰성이 있다. 이러한 연결 과정이 없는 UDP는 신뢰성이 없다

LISTEN

  • 서버가 클라이언트의 연락을 기다리는 상태. 이를 기반으로 서버 메서드의 이름이 결정됨.

TCP의 연결 해제: 4-웨이 핸드셰이크와 TIME_WAIT

과정

  1. 먼저 클라이언트가 연결을 닫으려고 할 때 FIN으로 설정된 세그먼트를 보냄
    그리고 클라이언트는 FIN_WAIT_1 상태로 들어가고 서버의 응답을 기다림

  2. 서버는 클라이언트로 ACK라는 승인 세그먼트를 보내고 CLOSE_WAIT 상태에 들어감.
    클라이언트가 세그먼트를 받으면 FIN_WAIT_2 상태에 들어감

  3. 서버는 LAST_ACK 상태가 되며 일정 시간 이후에 클라이언트에 FIN이라는 세그먼트를 보냄

  4. 클라이언트는 TIME_WAIT 상태가 되고 다시 서버로 ACK를 보내서 서버는 CLOSED 상태가 되며, 이후 클라이언트는 어느 정도의 시간 (TIME_WAIT으로 설정된 시간)을 대기한 뒤 연결이 닫힘

TIME_WAIT의 필요성

  • 지연 패킷을 받기 위해 필요(3단계에서 서버가 보내는 FIN이 늦게 도착할 수도 있음)

    • 데이터의 무결성 (일관성, 정확성) 보장. 데이터를 전부 수신할 수 있게 함
  • 연결을 올바르게 닫기 위함 (클라이언트와 서버의 연결을 모두 닫기 위함)

    • cf) 만약 CLOSED가 아닌 LAST_ACK 상태로 서버가 남아 있다면 그 다음 연결 때 오류가 발생
  • 2배의 최대 세그먼트 수명(MSL, maximum segment lifetime)을 기다린다. 기본적인 MSL은 2분. => 4분 기다림 (윈도우 기준, 우분투는 60초로 설정되어 있음)


REF

profile
의견 나누는 것을 좋아합니다 ლ(・ヮ・ლ)

0개의 댓글