1.ping命令全链路分析(2)
2.ping命令的网页网页七种用法
3.如何查看一个网站的域名是什么?
4.怎样查看一个网站的域名?
ping命令全链路分析(2)
本文使用 Zhihu On VSCode 创作并发布
上篇文章对开源网络协议栈实现 tapip 触发进行了分析,探讨了执行 ping 命令时,源码源码数据包是屏蔽如何到达网络协议栈的。本文将继续探讨 ping 命令与网络协议栈的指定联系。目前广泛使用的段落网络协议栈是五层协议划分:应用层、传输层、网页网页wechathookpro源码网络层、源码源码链路层和物理层。屏蔽ping 命令采用的指定 ICMP 协议位于网络层,但特别之处在于 ICMP 报文是段落封装在 IP 报文之内的。下文将从 ICMP 协议开始分析。网页网页
ICMP 协议
ping 命令的源码源码执行过程实际上包含了源端向目的端发送 ICMP 请求报文和目的端向源端发送 ICMP 回复报文的过程。ICMP 报文头包含了 ICMP type、屏蔽code、指定id、段落seq 等字段,dw里的源码报文头部为 字节,payload 部分数据长度为可变长度。
ICMP 报文头部包含 8bit 类型码 type、8bit 代码 code 和 bit 校验和 checksum,其余部分内容和类型码 type 相关。ICMP 报文中定义 type 字段包含以下几种,type 字段与 code 的详细对应关系见附录 1:
其中,ping 命令使用的报文类型为响应请求和响应应答,其报文格式如图:
ICMP 响应请求
在 tapip 中,ICMP 响应请求报文构造是在 ping.c:send_packet() 函数中完成的。ICMP 报文填充构建代码如下:
根据上一篇文章的分析,tapip 采用一个 tap 设备作为虚拟网卡,ICMP 数据报文最终通过 wirte() 接口写入 tap 设备文件中,最终被 Linux 内核中的网络协议栈处理。这里还是清债宝源码先从 tapip 出发,研究下网络协议栈中如何处理 ICMP 响应请求报文。在 tapip 源码中,处理 ICMP 响应请求报文在函数 icmp_echo_request() 中,其函数调用栈如下:
在 Linux 系统中,数据包到达网络设备后会触发中断,网卡驱动程序将对应数据包传递到内核网络协议栈处理,处理结果通过系统调用接口返回给应用程序(ping 应用)。
tapip 作为一种用户态实现,网络设备 net device 是通过 tap 设备模拟的,tap 设备文件描述符中被写入数据包就相当于网卡设备接收到网络数据包;
网卡驱动程序的工作对应 tapip 中 netdev_interrupt() 到 veth_rx() 之间的过程:首先在中断处理函数中调用 veth_poll() 函数采用轮询的方式检查 tap 设备的文件描述符是否有写入事件;当发生写入事件时,veth_rx() 函数被调用,从文件描述符中读取数据包,并传递到网络协议栈中处理,此时,网络协议栈处理的app红包赚钱源码入口 net_in() 被调用。
网络协议栈按照网络分层模型进行处理:
ICMP 响应回复
ICMP 响应回复的处理过程与接收侧处理 ICMP 响应请求的流程基本一致,不同点在于最后 icmp 报文响应的处理,其 type 为 0,对应的处理函数为 icmp_echo_reply(),具体函数调用栈如下:
总结
本文主要分析了用户态网络协议栈 tapip 处理 ping 命令对应的 ICMP 报文的过程,后续将结合 Linux 内核分析这个过程在内核中是如何处理的,另外还会分析下 ARP 协议的实现。
学海无涯,感觉 tapip 的实现逻辑清晰,读起来非常舒服,非常推荐对网络感兴趣的同学学习参考。
(最近特别水逆,希望能早日走出困境,迎来光明吧。)
附录 1: ICMP 报文类型表
markdown
| 类型 Type | 代码 Code | 描述 |
| :------: | :------: | :--------------------------: |
| 0 | 0 | 回显应答(ping 应答) |
| 3 | 0 | 网络不可达 |
| 3 | 1 | 主机不可达 |
| 3 | 2 | 协议不可达 |
| 3 | 3 | 端口不可达 |
| ... | ... | ... |
TODO:
ping命令的苹果阅读app源码七种用法
ping命令是一个强大的TCP/IP工具,本文将详细介绍其七种实用用法,包括基本检测、网络速度分析、解析计算机名、自定义数据包发送、数据包大小控制、路由跟踪和批量网段检测。
一、ping基础操作
ping命令主要用于检测网络连通性,分析网络速度,获取服务器IP,通过TTL值判断操作系统类型和路由数量。例如ping一个IP地址,数据包的bytes值表示发送的数据包大小,time值反映响应时间,TTL值则暗示目标系统类型。
二、ping的进阶用法
1. ping -t: 连续ping指定计算机,直到用户干预。用于测试网络稳定性。
2. ping -a: 解析计算机名和NetBios名,获取主机名信息。
3. ping -n count: 自定义发送数据包数量,便于精确评估网络速度。
4. ping -l size: 发送指定大小的数据包,注意潜在的攻击风险。
5. ping -r count: 记录路由信息,追踪数据包路径。
6. 批量ping网段:对大量IP地址进行快速检测,便于故障排查。
三、批量ping命令示例
使用for循环,如`for /L %D in (1,1,) do ping ..1.%D`,可以一次检测整个网段的连通性。
了解更多关于ping命令的详细教程和实践资源,可以点击获取完整的教程包,包括教程、源码、学习资料等,还有专家在线答疑,助力您的学习之旅。
如何查看一个网站的域名是什么?
要查看一个网站的域名,有几种方法可以尝试:
1. 在浏览器地址栏中查看:打开该网站,并查看浏览器的地址栏,里面显示的就是该网站的域名。例如打开网址:,那么example.com就是网站的域名。
2. 使用"ping"命令:在命令提示符或终端窗口中,输入"ping 网站地址"(例如:ping www.example.com),然后按下回车键。会显示出一个IP地址,这就是该网站的域名。
3. 使用"nslookup"命令:同样在命令提示符或终端窗口中,输入"nslookup 网站地址"(例如:nslookup www.example.com),然后按下回车键。会显示出该网站的域名。
4. 使用在线工具:有许多在线工具可以帮助你查找一个网站的域名。你可以通过搜索引擎搜索“域名查询”或者类似的关键词,然后选择一个可靠的在线工具进行查询。
怎样查看一个网站的域名?
要查看一个网站的域名,您可以采取以下几种方法:
1. 通过浏览器地址栏:
打开目标网站,浏览器地址栏中显示的文本即为网站的域名。例如,如果您访问的是 ,那么 "example.com" 就是该网站的域名。
2. 使用"ping"命令:
打开命令提示符或终端,输入命令 "ping 网站地址"(例如:ping www.example.com),按下回车键后,显示的IP地址前通常会包含域名。需要注意的是,这个命令不一定总能直接显示域名,因为它主要用来检测网络连接。
3. 使用"nslookup"命令:
同样在命令提示符或终端中,输入 "nslookup 网站地址"(例如:nslookup www.example.com),回车后,该命令会显示网站的域名服务器信息,从而间接得到域名。
4. 使用在线域名查询工具:
网络上有许多免费或付费的工具可以帮助查询网站的域名。您可以通过搜索引擎查找“域名查询”或类似关键词,然后选择一个可信的在线服务进行查询。
以上方法可以帮助您找到网站的域名。请注意,某些方法可能需要一定的计算机操作知识。