ping数据包中的进程号

网友投稿 259 2022-09-16

ping数据包中的进程号

当同一台机器A上执行相同的两个ping命令, 例如 ping 114.114.114.114, 那么机器A的内核收到对方机器的响应之后,如何把响应结果向上投递给应用层的对应的ping进程呢?

【1】查看网络接口

只有一个对外的网络接口eth0, 接下来执行的ping命令, 会通过eth0接口进行收发数据 【2】开启抓包 sudo tcpdump

监听eth0接口上的icmp数据包

【3】执行ping命令

ping

ping命令的底层会发送icmp数据包

【4】查看ping命令的进程号

执行ping命令的进程号是156

【5】

执行ping命令之后, tcpdump会抓取到icmp网络包

红色框圈中的是IP+ICMP协议的数据包, 其中绿色部分是ICMP协议的包, 共计64字节, 如下图是ICMP协议包格式

在icmp协议中, 对于ping命令来说, Identifier中存储着ping命令的进程号. Identifier偏移起始位置4字节, 占2字节.

如下图, 是通过wireshark抓取到的icmp网络包, 与通过tcpdump抓取的网络包一样

如下图, 根据Identifier偏移起始位置4字节, 占2字节. 于是0800e0369c00…数据包中的9c00就是进程号, 这里又涉及到网络字节序问题, 实际的数值应该是009c, 转成十进制就是156, 即Identifier位置存储着进程号156

通过这样就可以区别出来, 同一台机器执行的两个ping命令进程, 内核收到ping的响应之后, 就可以知道该把接收到的网络包给哪个ping进程了. 这个Identifier类似TCP的端口号.

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:CSS层级小技巧:在滚动时自动添加头部阴影
下一篇:私域流量有多重要?无私域不裂变!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~