Home [성공과 실패를 결정하는 1%의 네트워크 원리] Ch2 / Story 04 - 서버에서 연결을 끊어 소켓을 말소한다
Post
Cancel

[성공과 실패를 결정하는 1%의 네트워크 원리] Ch2 / Story 04 - 서버에서 연결을 끊어 소켓을 말소한다

1. Data 송신을 완료하면 연결을 끊는다

Alt text

데이터 송수신 동작이 끝나면 client와 server 둘 중 하나가 connection termination 단계로 들어간다.

Web browser의 경우 보통 server측이 연결 끊기 동작을 실행한다 - TCP 4-way handshake

  1. [Server] Server 측(hostA)이 socket library의 close를 호출한다. 그러면 server의 protocol stack이 FIN 비트를 1로 세팅한 TCP header을 만들고 client에 송신한다. 이와 동시에 server측의 socket에는 연결 끊기 동작에 들어갔다는 정보를 기록한다.
  2. [Client] Server에서 FIN=1가 포함된 TCP header이 도착하면, client의 protocol stack은 자신의 socket에 server측이 연결 끊기 동작에 들어갔다는 것을 기록한다. 그리고 ACK를 server에게 반송한다.
  3. [Client] Client측도 close를 호출하고 FIN 비트를 1로 세팅한 TCP header을 만들고 server에 송신한다.
  4. [Server] ACK를 client에게 보낸다.

2. Socket을 말소한다

Server와의 대화가 끝나면 client는 바로 socket을 말소하지 않고 잠시 기다린 후 말소한다. 바로 말소해버리면 다음과 같은 오동작이 일어날 수 있다.

앞의 설명과 반대로 이번에는 client측에서 먼저 연결 끊기 동작이 시작된다고 해보자. 연결 끊기 동작은 다음과 같이 진행된다.

  1. Client가 FIN 송신
  2. Server가 ACK 송신
  3. Server가 FIN 송신
  4. Client가 ACK 송신
  • 이때, server의 FIN이 담긴 패킷이 통신 동작 중간에 사라져 버리면 다시 한번 FIN을 보낼 수도 있다.
  • 만약 client가 socket을 즉시 말소해버리면 기록되어있던 제어 정보가 사라지므로, socket에 할당되어 있던 port number도 날아간다.
  • 이 시점에서 만약 다른 application이 새로운 socket을 만들고 그 port number을 할당해버리면 FIN이 엉뚱한 socket에 갈수도 있다.

3. 데이터 송수신 동작을 정리한다

이제 TCP protocol으로 data를 송수신하는 동작 전체를 정리해보겠다.

Alt text

Client는 browser을 나타내고 server은 web server을 나타낸다.

  1. Socket 작성
    • Server측에서 application이 동작하기 시작할때 socket을 만든 뒤, 접속대기 상태로 만든다.
    • Client역시 socket을 작성한다.
  2. Socket 연결 (접속 동작)
    • Client에서 server로 접속 동작 (TCP 3-way handshake)을 실행한다.
    • Client -> Server으로 SYN=1 비트, ISN(Initial Sequence #), Window size 등으로 만든 TCP header을 보낸다.
    • Server -> ClientSYN=1비트, ISN, Window size, 그리고 ACK 등으로 만든 TCP header을 보낸다.
    • Client -> Server으로 ACK를 담은 TCP header을 보낸다.
  3. 데이터 송수신
    • Web의 경우 client가 server으로 request message를 보내는것부터 시작한다.
    • Client -> Server: TCP는 데이터를 적당한 크기의 조각으로 분할하고 sequence number을 담은 TCP header를 맨 앞에 부가하여 server에 보낸다
    • Server -> Client: ACK번호를 client에게 반송한다. 이때, server측의 receiver buffer에 빈 공간이 생기면 window값도 기록하여 함께 보낸다.
    • Client의 request message를 받은 server이 적절한 response를 보내주는 동작은 위의 2개 동작에서 client와 server이 반대로 일어난다.
  4. 연결 끊기 동작
    • 데이터를 다 보냈으면 TCP 4-way handshake을 통해 TCP connection termination이 일어난다.
    • Server -> Client: FIN=1
    • Client -> Server: ACK
    • Client -> Server: FIN=1
    • Server -> Client: ACK
This post is licensed under CC BY 4.0 by the author.

[Fluent Python] Ch7. Functions as First-Class Objects

[Database System Concepts / Ch3] Introduction to SQL

Trending Tags