【问题标题】:Why is the ICMP ECHO data length compared to the size of timeval in the original ping source code?为什么 ICMP ECHO 数据长度与原始 ping 源代码中的 timeval 大小相比?
【发布时间】:2011-11-23 06:03:29
【问题描述】:

出于兴趣,我一直在阅读原始 ping 程序代码 (http://www.ping127001.com/pingpage/ping.text),只是想看看它是如何完成的。

大部分我都懂,但有一个条件我不明白:

if (datalen >= sizeof(struct timeval)) /* can we time 'em? */
    timing = 1;

其中datalen 是回显负载的长度。

我在其他 C ping 实现中看到过类似的谓词。为什么小于 timeval 结构体大小的数据长度会禁止计时?

编辑:不可避免的深夜放屁时刻。

【问题讨论】:

    标签: c unix ping


    【解决方案1】:

    这是因为如果您想在其中实际存储计时数据,您需要确保数据包足够大以存储计时数据。换句话说,计时是通过将timeval 结构放入有效负载区域来实现的。

    例如,如果您在 timeval 结构的大小为 20 时为 ICMP 有效负载区域指定长度为 3,那么尝试插入它不是一个好主意 :-)

    【讨论】:

    • 我明白了,我一定错过了,非常感谢。有时我很难记住数据报的格式,出于某种原因,我认为计时部分是 ICMP 的一部分——但是,如果它已经有了,那么 ping 程序本身就是多余的 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    • 2022-01-08
    相关资源
    最近更新 更多