본문 바로가기

네트워크

통신종료

반응형

서버와 클라이언트는 OS 의 프로토콜 스택을 통해 통신을 하고 있습니다.

오늘은 소켓을 말소하는 과정에 대해서 설명드리겠습니다.

 

프로토콜에 따른 종료 요청

HTTP1.0 프로토콜을 사용하는 경우

서버측에서 응답 데이터를 보내고 나면 데이터 보내기가 완료된 상태이기 때문에 서버측이 연결 끊기 단계에 들어갑니다.

HTTP1.1 프로토콜을 사용하는 경우

클라이언트가 계속 다음 리퀘스트 메시지를 보내도 좋게 되어 있기 때문에 클라이언트측에서 연결 끊기 단계에 들어갈 수 있습니다.

 

Server와 Client의 연결 끊기

서버측이 먼저 연결 끊기 단계에 들어간다고 생각하고 설명 드립니다.

서버측의 어플리케이션이 먼저 Socket 라이브러리의 close를 호출합니다.

서버측 프로토콜 스택이 TCP 헤더를 만들고 컨트롤 비트의 FIN 비트를 1로 설정하고 송신을 진행합니다.

서버측 소켓에 연결끊기와 관련된 정보를 기록합니다.

클라이언트측에선 서버에서 보낸 TCP 헤더가 도착하면 프로토콜 스택은 자신의 소켓에 서버의 연결끊기 동작을 기록합니다.

그리고 FIN이 1인 패킷을 받았단 사실을 서버에 알리기 위해 ACK번호를 반송합니다.

어플리케이션이 read를 호출하면 서버에서 보낸 데이터가 모두 수신됐다는 것을 브라우저에게 알립니다.

그런 뒤 close를 호출하여 TCP헤더에 컨트롤 비트의 FIN 비트에 1을 설정하고 서버로 송신하고 서버로 부터 ACK를 수신하면 서버와 통신은 종료됩니다.

 

소켓 말소

오동작이 있을 수 있으므로 연결이 끊긴 즉시 말소하지 않고 몇분정도 있다가 말소합니다.

패킷이 다시 보내는 동작들이 완전히 끝날때쯤 말소하게 됩니다.

 

반응형

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

L2 네트워크  (0) 2022.11.04
[통신] Http 프로그래밍, socket 프로그래밍  (0) 2021.07.27
TLS/SSL  (0) 2019.12.26
OAuth  (0) 2019.12.01
LDAP  (0) 2019.11.24