间 。
然后,由 ICMP 协议将这个数据包连同地址 192.168.1.2 一起交给 IP 层 。IP 层将以 192.168.1.2 作为目的地址,本机 IP 地址作为源地址,协议字段设置为 1 表示是 ICMP 协议,再加上?些其他控制信息,构建?个 IP 数据包 。
接下来,需要加入 MAC 头 。如果在本地 ARP 映射表中查找出 IP 地址 192.168.1.2 所对应的 MAC 地址,则可
以直接使用;如果没有,则需要发送 ARP 协议查询 MAC 地址,获得 MAC 地址后,由数据链路层构建?个数据帧,目的地址是 IP 层传过来的 MAC 地址,源地址则是本机的 MAC 地址;还要附加上?些控制信息,依据以太网的介质访问规则,将它们传送出去 。
主机 B 收到这个数据帧后,先检查它的目的 MAC 地址,并和本机的 MAC 地址对比,如符合,则接收,否则就丢弃 。
接收后检查该数据帧,将 IP 数据包从帧中提取出来,交给本机的 IP 层 。同样,IP 层检查后,将有用的信息提取后交给 ICMP 协议 。
主机 B 会构建?个 ICMP 回送响应消息数据包,回送响应数据包的类型字段为 0,序号为接收到的请求数据包
中的序号,然后再发送出去给主机 A 。
在规定的时候间内,源主机如果没有接到 ICMP 的应答包,则说明目标主机不可达;如果接收到了 ICMP 回送响应消息,则说明目标主机可达 。
此时,源主机会检查,用当前时刻减去该数据包最初从源主机上发出的时刻,就是 ICMP 数据包的时间延迟 。
针对上面发送的事情,总结成了如下图:
当然这只是最简单的,同?个局域网里面的情况 。如果跨网段的话,还会涉及网关的转发、路由器的转发等等 。
但是对于 ICMP 的头来讲,是没什么影响的 。会影响的是根据目标 IP 地址,选择路由的下一跳,还有每经过?个路由器到达?个新的局域网,需要换 MAC 头里面的 MAC 地址 。
说了这么多,可以看出 ping 这个程序是使用了 ICMP 里面的 ECHO (类型为 8 ) 和 ECHO REPLY(类型为 0) 。
—— 差错报文类型的使用
有?款充分利用ICMP 差错报文类型的应用叫做(在UNIX、MacOS中是这个命令,而中对等的命令叫做) 。
作用一
的第?个作用就是故意设置特殊的 TTL,来追踪去往目的地时沿途经过的路由器 。
的参数指向某个目的 IP 地址:
192.168.1.100
这个作用是如何工作的呢?
它的原理就是利用IP 包的生存期限 从 1 开始按照顺序递增的同时发送 UDP 包,强制接收 ICMP 超时消息的?种方法 。
比如,将 TTL 设置 为 1,则遇到第?个路由器,就牺牲了,接着返回 ICMP 差错报文网络包,类型是时间超时 。
接下来将 TTL 设置为 2,第?个路由器过了,遇到第?个路由器也牺牲了,也同时返回了 ICMP 差错报文数据包,如此往复,直到到达目的主机 。
这样的过程,就可以拿到了所有的路由器 IP 。
当然有的路由器根本就不会返回这个 ICMP,所以对于有的公网地址,是看不到中间经过的路由的 。
发送方如何知道发出的 UDP 包是否到达了目的主机呢?
在发送 UDP 包时,会填入一个不可能的端口号值作为 UDP 目标端口号(大于 3000 ) 。当目的主
机,收到 UDP 包后,会返回 ICMP 差错报文消息,但这个差错报文消息的类型是端口不可达 。
所以,当差错报文类型是端口不可达时,说明发送方发出的 UDP 包到达了目的主机 。
作用二
还有?个作用是故意设置不分片,从而确定路径的 MTU 。
这么做是为了什么?
这样做的目的是为了路径MTU发现 。
因为有的时候我们并不知道路由器的 MTU 大小,以太网的数据链路上的 MTU 通常是 1500 字节,但是非以外网的 MTU 值就不?样了,所以我们要知道 MTU 的大小,从而控制发送的包大小 。
- 两台电脑联机共同处理,怎么使两台电脑联机 共享打印机
- 两岁男宝宝吃什么长高快,二岁半的小孩吃什么长高?
- 香菜种植方法
- 鲜花插花技巧
- 金银花种植技术与栽培管理
- 一帆风顺怎么养
- 热带雨林的植物
- 【IP技术】IP地址详细解释
- 【整理】HLS视频协议第二弹--裁剪部分视频及m3u8文件
- 深入浅出ip地址!