Notice
Recent Posts
Recent Comments
Link
«   2026/03   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

뭉크테크

TCP 연결 종료와 상태 변화 본문

네트워크

TCP 연결 종료와 상태 변화

뭉크테크 2025. 1. 10. 00:59

TCP 연결 종료 과정(4way handshaking)

 

연결을 했다면 연결을 종료하는 절차도 있을 것이다. TCP 연결 종료과정을 보면 연결할때보다 조금 복잡하다. 이 종료과정을 4-way-handshaking이라고 한다. 여기서 1가지 대 전제가 있는데 특별한 이유가 없다면 클라이언트의 행동은 active하고 서버는 passive하다. 무슨 이야기냐면 연결하고자 하는 것이 클라이언트면 연결을 종료하는 것도 클라이언트여야 한다. 그게 보편적이다. 만약 서버가 연결을 끊겠다고하면 이런 경우는 엄청 특수한 경우이다. 그래서 클라이언트가 연결을 시작하고 연결을 종료하는 것이 일반적인 TCP 통신체계이다.

 

연결을 끊자고 하는 클라이언트는 established상태여야 연결을 끊을 수 있다. 그러면 클라이언트가 established상태에서 연결을 끊을려고 FIN+ACK를 같이 보낸다. 그러면 established 상태의 서버가 OK사인으로 ACK를 보낸다.

이때 FIN+ACK를 보내고 FIN_WAIT1상태의 클라이언트는 FIN이 오기를 기대했지만 ACK만 와서 FIN_WAIT2상태가 되고

서버측에서 FIN+ACK가 오면 그때 TIME_WAIT상태가 된다.

 

여기서 TIME_WAIT가 중요한데 왜냐하면 이 TIME_WAIT상태가 되었다는게 의미하는 바가 뭐냐면 연결을 끊자고 하는 것이다. 만약 서버에서 TIME_WAIT상태가 나면 서버가 끊자고 하는거고 이것은 비정상적인 특수상황이다. 아무튼 TIME_WAIT은 누군가 연결을 끊자고 할 때 발생하고 CLOSED상태 전에 발생한다.

 

서버관점에서 보면 ESTABLISHED상태였다가 FIN+ACK를 수신하면 CLOSE_WAIT상태가 된다. 그리고 클라이언트에 FIN+ACK를 보내고 LAST_ACK상태가 되고 클라이언트측으로부터 ACK가 오면 CLOSED상태가 된다. 그리고 클라이언트는 ACK를 보내고 CLOSED상태가 되면 소켓을 OS가 회수한다. 소켓은 일종의 자원으로 유한적이다. 즉, 클라이언트 입장에서 슬 수 있는 소켓이 개수 제한이 있다. 그래서 소켓회수자체는 쓸 수 있는 소켓이 증가한다는 의미이기도 한다.

 

서버 또한 소켓 갯수에 제한이 있고, 많은 사람들에게 서비스를 제공하기 때문에, 기존 사용자들과의 연결을 끊어야하는데,

서버는 특별한 이유가 없는 한 자기가 연결을 끊는게 아니고 클라이언트측에서 끊을 수 있게 유도한다. 이렇게 끊을 수 있게 서버측에서 Application protocol이 설계되어야 한다. 

 

그래서 만약 본인이 서버 개발을 한다고 하면, 서버 측에서 연결을 끊는게 아닌 클라이언트쪽에서 연결을 끊을 수 있게 유도하도록 Application protocol을 설계해야한다. 그래야 서버쪽에서 time wait가 발생하지 않는다.

 

 

 

출처

https://www.inflearn.com/course/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-%ED%95%B5%EC%8B%AC%EC%9D%B4%EB%A1%A0-%EA%B8%B0%EC%B4%88/dashboard

 

외워서 끝내는 네트워크 핵심이론 - 기초 강의 | 널널한 개발자 - 인프런

널널한 개발자 | TCP/IP에서 HTTP까지! 네트워크에 대한 기본 이론이 부족한 분들이 '외워서'라도 전공 이론을 이해하고자 희망하는 분들을 위해 준비한 강의입니다. 할 수 있습니다!, 네트워크, 외

www.inflearn.com

 

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

TCP에서의 연결이 착각...인가?  (0) 2025.01.10
TCP, UDP 헤더 형식과 게임 서버 특징  (5) 2025.01.10
TCP 연결 과정(3-way handshaking)  (1) 2025.01.10
TCP와 UDP 개요  (0) 2025.01.09
Host란 무엇인가  (0) 2025.01.09