1 ping
ping发送的是ICMP报文,ICMP报文是和tcp报文处在同一层次,嵌套在IP报文内(报文头中的Protocol=1,在IP报文中通过Protocol的值决定接下来应当将数据交给哪个协议层进行进一步处理,tcp协议Protocol=6,ICMP协议Protocol=1)
tcp协议报文必须指定源端口和目的端口
ICMP协议报文不需要指定端口,这也是为什么我们使用ping命令时不需要端口
tcp报文和icmp报文对比如下:
icmp报文
+-----------------------------------------------------+ | IP Header (至少20字节) | +-----------------------------------------------------+ | ICMP Header (8字节) | +-----------------------------------------------------+ | ICMP Data / Payload (根据需要可变长度) | +-----------------------------------------------------+
tcp报文
+-----------------------------------------------------+ | IP Header (至少20字节) | +-----------------------------------------------------+ | TCP Header (至少20字节) | +-----------------------------------------------------+ | TCP Segment Payload (根据需要可变长度) | +-----------------------------------------------------+
我们再看看icmp报文详情
+-----------------------------------------------------+ | IP Header (至少20字节) | +-----------------------------------------------------+ | ICMP Header (8字节) | +-----------------------------------------------------+ | ICMP Data / Payload (根据需要可变长度) | +-----------------------------------------------------+ ICMP Header: 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Code | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identifier | Sequence Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | (various fields based on the type and code) | +---------------------------------------------------------------+ - Type: 8位,标识ICMP报文的类型,如Echo Request(8),Echo Reply(0),Destination Unreachable(3)等。 - Code: 8位,进一步细化ICMP类型中的错误或状态信息。 - Checksum: 16位,用于校验整个ICMP报文的完整性。 - Identifier 和 Sequence Number: 在某些类型的ICMP报文中(如Ping请求与回应)使用,作为识别请求和响应报文的依据。 - ICMP Data / Payload: 根据ICMP类型不同而变化,可能包含额外的信息,例如在Ping请求和回应中,这部分会携带原始发送的数据。
我们所使用的ping命令,发送报文Type=8(Echo Request),响应报文Type=0(Echo Reply)。ping命令检测目的地址的可达性。
ping命令的详细过程
当我们执行ping命令时,ping程序会准备好一个icmp报文,然后发起系统调用socket(ip地址, SOCK_RAW, IPPROTO_ICMP),内核会处理tcpip协议栈报文的封装,比如icmp报文会封装成一个ip报文,ip报文还会继续封装成以太网帧等等
然后到达主机的网络接口卡(NIC)接收到来自数据链路层的以太网帧,将报文发送出去
经过复杂的网络环境比如防火墙、路由器,到达目的主机的网卡,目的主机网卡接收到以太网帧,通过本机的tcpip协议栈,最终还原为icmp报文。
目的主机内核处理过程中,期间会有多个钩子函数,用于调用本机防火墙配置,如果配置不可ping,则目的主机将不响应这个报文。
当目的主机没有相关的限制,将发送响应报文给源主机
源主机收到响应报文,网络通路。
标签:icmp,traceroute,+-----------------------------------------------------+,报文,ping, From: https://www.cnblogs.com/zhenjingcool/p/18126060