본문 바로가기
네트워크

TCP 연결해제 과정

by ho-bolt 2022. 6. 27.

이미지 출처 : https://dev-jaeho.tistory.com/17

 

TCP연결을 할 때는 전에 살펴보았던 것처럼 3-way handshake과정이 발생했다.

반대로 연결을 해제할 때는 4-way handshake과정이 발생한다

이미지 출처 : https://velog.io/@evelyn82ny/4-way-handshake

 

연결해제 과정

  1. 크라이언트가 연결을 닫으려고 할 때 FIN으로 설정된 세그멘트 보냄 그러면 클라이언트는 FIN_WAIT_1상태로 들어가고 서버 응답 기다림
  2. 서버는 클라이언트로 ACK라는 승인 세그멘트 보냄 CLOSE_WAIT상태에 들어가고 클라이언트가 세그멘트를 받으면 FIN_WAIT_2상태에 들어감
  3. 서버는 ACK보내고 일정 시간 이후 클라이언트에 FIN 세그멘트 보냄
  4. 클라이언트는 TIME_WAIT상태가 되고 다시 서버로 ACK를 보내서 서버는 CLOSED 상태가 됨. 이후 클라이언트는 어느 정도의 시간을 대기한 후 연결이 닫히고 클라이언트와 서버 모두 자원 연결 해제가 됨
🧐 여기서 가장 중요한 것은 TIME_WAIT이다. 그냥 연결을 닫으면 될 거 같은데 왜 일정 시간 뒤에 닫을까???
  • 지연 패킷이 발생할 경우를 대비하기 위해
    • 패킷이 뒤늦게 도달하고 처리하지 못하게 된다면 데이터 무결성 문제가 발생한다.
  • 두 장치가 연결이 닫혔는지 확인하기 위해
    • 만약 LAST_ACK 상태에서 닫히게 되면 다시 새로운 연결을 하려고 할 때 장치는 계속 LAST_ACK로 되어 있기 때문에 접속 오류가 난다.
      => 이러한 이유로 TIME_WAIT라는 잠시 기다릴 시간이 필요한 것

*용어정리 *

TIME_WAIT

: 소켓이 바로 소멸되지 않고 일정시간 유지되는 상태를 말한다. 지연 패킷,등과 같은 문제를 해결하는 데 사용된다. 
CentOS6, 우분투에서는 60초로 설정되어 있고 윈도우는 4분으로 설정되어 있다. 
이말은 OS마다 조금씩 다르다는 말이다. 

데이터 무결성(data integrity)

: 데이터의 정확성과 일관성을 유지하고 보증하는 것

 

 

참고 : 면접을 위한 cs전공지식 노트

728x90

'네트워크' 카테고리의 다른 글

프록시  (0) 2022.06.19
TCP/IP 4계층 모델  (0) 2022.06.18
네트워크 기초  (0) 2022.06.18

댓글