关于网络通信:网络协议三链路层和网络层

9次阅读

共计 1729 个字符,预计需要花费 5 分钟才能阅读完成。

六、ICMP 与 ping

ICMP 协定的格局

ping 是基于 ICMP 协定工作的。ICMP 全称 Internet Control Message Protocol,就是互联网管制报文协定。
ICMP 报文是封装在 IP 包外面的。因为传输指令的时候,必定须要源地址和指标地址。它自身非常简单。

ICMP 报文有很多的类型,不同的类型有不同的代码。最罕用的类型是被动申请为 8,被动申请的应答为 0。

查问报文类型

罕用的 ping 就是查问报文,是一种被动申请,并且取得被动应答的 ICMP 协定。所以,ping 发的包也是合乎 ICMP 协定格局的,只不过它在前面减少了本人的格局。
对 ping 的被动申请,进行网络抓包,称为 ICMP ECHO REQUEST。同理被动申请的回复,称为 ICMP ECHO REPLY。比起原生的 ICMP,这外面多了两个字段,一个是标识符(标识是申请还是回复),另一个是序号(每个收回的报文都有序号)。

在选项数据中,ping 还会寄存发送申请的工夫值,来计算往返工夫,阐明途程的长短。

过错报文类型

起点不可达为 3,源克制为 4,超时为 11,重定向为 5。
过错报文的构造绝对简单一些。除了后面还是 IP,ICMP 的前 8 字节不变,前面则跟上出错的那个 IP 包的 IP 头和 IP 注释的前 8 个字节。

ping:查问报文类型的应用


ping 命令执行的时候,源主机首先会构建一个 ICMP 申请数据包,ICMP 数据包内蕴含多个字段。最重要的是两个,第一个是 类型字段 ,对于申请数据包而言该字段为 8;另外一个是 顺序号,次要用于辨别间断 ping 的时候收回的多个数据包。每收回一个申请数据包,顺序号会主动加 1。为了可能计算往返工夫 RTT,它会在报文的数据局部插入发送工夫。

主机 B 会构建一个 ICMP 应答包,应答数据包的类型字段为 0,顺序号为接管到的申请数据包中的顺序号,而后再发送进来给主机 A。

在规定的时候间内,源主机如果没有接到 ICMP 的应答包,则阐明指标主机不可达;如果接管到了 ICMP 应答包,则阐明指标主机可达。此时,源主机会查看,用以后时刻减去该数据包最后从源主机上收回的时刻,就是 ICMP 数据包的时间延迟。

常常会遇到一个问题,如果不在咱们的管制范畴内,很多中间设备都是禁止 ping 的,然而 ping 不通不代表网络不通。这个时候就要应用 telnet,通过其余协定来测试网络是否通。

ping 这个程序是应用了 ICMP 外面的 ECHO REQUEST 和 ECHO REPLY 类型。

Traceroute:过错报文类型的应用

有一个程序 Traceroute,它会应用 ICMP 的规定,成心制作一些可能产生谬误的场景。所以,Traceroute 的第一个作用就是成心设置非凡的 TTL,来追踪去往目的地时沿途通过的路由器。

Traceroute 的参数指向某个目标 IP 地址,它会发送一个 UDP 的数据包。将 TTL 设置成 1,也就是说一旦遇到一个路由器或者一个关卡,就示意它“就义”了。如果两头的路由器不止一个,当然碰到第一个就“就义”。于是,返回一个 ICMP 包,也就是网络过错包,类型是工夫超时。

接下来,将 TTL 设置为 2。第一关过了,第二关就“就义”了,那我就晓得第二关有多远。如此重复,直到达到目标主机。这样,Traceroute 就拿到了所有的路由器 IP。当然,有的路由器压根不会回这个 ICMP。这也是 Traceroute 一个公网的地址,看不到两头路由的起因。

怎么晓得 UDP 有没有达到目标主机呢?Traceroute 程序会发送一份 UDP 数据报给目标主机,但它会抉择一个不可能的值作为 UDP 端口号(大于 30000)。当该数据报达到时,将使目标主机的 UDP 模块产生一份“端口不可达”谬误 ICMP 报文。如果数据报没有达到,则可能是超时。

Traceroute 还有一个作用是成心设置不分片,从而确定门路的 MTU。要做的工作首先是发送分组,并设置“不分片”标记。发送的第一个分组的长度正好与进口 MTU 相等。如果两头遇到窄的关口会被卡住,会发送 ICMP 网络过错包,类型为“须要进行分片但设置了不分片位”。其实,这是人家成心的好吧,每次收到 ICMP“不能分片”过错时就减小分组的长度,直到达到指标主机。

ping 应用查问报文,Traceroute 应用过错报文

七、网关

八、路由协定

正文完
 0