ping 명령 구현을 배우고 있습니다. 이에 대해 질문이 있습니다. 질문은 ~이야
소켓 버퍼는 소켓에서 한 번에 몇 바이트를 전송하는 데 사용된다는 것을 알고 있습니다. 그러나 ping 명령이 소켓 버퍼 크기를 관리하는 방법.
$ ping -S 300 -s 400 google.com
PING google.com (216.58.197.46) 400(428) bytes of data.
72 bytes from maa03s20-in-f14.1e100.net (216.58.197.46): icmp_req=1 ttl=56 (truncated)
72 bytes from maa03s20-in-f14.1e100.net (216.58.197.46): icmp_req=2 ttl=56 (truncated)
72 bytes from maa03s20-in-f14.1e100.net (216.58.197.46): icmp_req=3 ttl=56 (truncated)
^C
--- google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 40.231/41.500/42.408/0.924 ms
위의 ping 명령에서 소켓 버퍼 크기는 300이고 단일 패킷 크기는 400입니다. 소켓 버퍼 크기는 300에 불과합니다. 그러나 ping은 해당 소켓에서 한 번에 400바이트를 전송합니다. 어떻게 그럴 수 있니? 동시에 수신되는 패킷 크기는 72에 불과합니다. 왜 72개 밖에 없나요?
누구든지 이것을 설명하도록 도와줄 수 있나요?
답변1
이러한 세부 사항은 구현에 따라 다릅니다. 패킷 크기는 예상했던 것과 정확히 같습니다. 이론적으로 더 작은 버퍼 크기를 사용하면 패킷 조각화가 발생할 수 있지만 제가 시도한 어떤 시스템에서도 이런 일이 발생하지 않았습니다.
수신된 72바이트만 표시되는 결과는 VPS에 패킷 크기를 64바이트 + 8바이트 ICMP 헤더로 제한하는 엄격한 제한이 있기 때문입니다.