결론 : send() ⇒ recv() 는 1:1 로 매핑되지 않음.
send() ⇒ recv() 는 1:1 로 매핑되지 않음을 확인 (Wireshark)
[1]
Echo 클라이언트 예제에서
⇒ 다음과 같이 한 번에 서버로 전송하지 않고, 한 번에 버퍼의 한 글자씩 패킷에 담아서 전송하는 코드로 수정하고 실행
클라이언트에서 hello 를 입력하여 버퍼에 저장 후 버퍼를 소켓에 담아 send()
[Client]
[Server]
⇒ 위 통신 과정에서 이루어진 패킷 전송 과정을 Wireshark 확인
tcp.dstport == 25000 으로 “목적지” 포트가 25000 인 패킷만 캡쳐하는 filter
⇒ 한 글자씩 보내진 패킷들을 확인할 수 있음
[2]
이번엔 클라이언트를 다시 켜고 AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 를 입력 한 다음 아직 Echo 받지 못한 데이터가 있을 경우 Enter 를 계속 눌러준다.
이 때, 클라이언트에서 서버로 ‘A’ 한 글자씩 패킷을 보냈을까? 를 Wireshark 로 확인한다.
⇒ 그렇지 않다!
⇒ Nagle 알고리즘에 따라 클라이언트가 한 글자씩 패킷을 보냈더라도, TCP 는 이를 모아서 하나 또는 몇 개의 패킷으로 서버에 보낼 수 있음