• ping数据包中的进程号



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

    【1】查看网络接口


    在这里插入图片描述

    只有一个对外的网络接口eth0, 接下来执行的ping命令, 会通过eth0接口进行收发数据


    【2】开启抓包
    sudo tcpdump -i eth0 -c 1 -X icmp

    在这里插入图片描述

    监听eth0接口上的icmp数据包


    【3】执行ping命令

    ping 114.114.114.114

    在这里插入图片描述

    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的端口号.


  • 相关阅读:
    Java多线程案例
    selenium(练习)提取dou yu网站上的数据
    WebSocketClient objects are not reuseable
    R语言学习:RFM分析,rfm包
    数据结构-单链表的代码实现
    软件开发架构与网络编程
    【autodl/linux配环境心得:conda/本地配cuda,cudnn及pytorch心得】
    spark调优案例分享
    20个Python 正则表达式应用与技巧
    躲避雪糕刺客?通过爬虫爬取雪糕价格
  • 原文地址:https://blog.csdn.net/qq_45859054/article/details/126067079