网络层其他协议简介
IP协议是网络层最核心的协议,但除此以外,网络层还有众多协议保证了IP协议的正常运行。下面介绍几个其中最重要的。
一、ARP协议与RARP协议
当路由选择算法确定了下一跳路由器后,要做的事情就是把数据包通过链路层发送到下一跳路由器。可是通过链路层的发送还需要MAC地址。所以,ARP协议的作用就是通过网络设备IP地址求其对应的MAC地址。
图1 ARP协议的工作过程
ARP协议通过广播的形式在其所在局域网中发送ARP请求报文,以找到IP对应的设备(网卡);随后该设备的网卡再通过ARP响应报文的形式将自己的MAC地址回传给请求方。这样请求方就得到了目标MAC地址。
当然,每次都在局域网内发送广播报文也很占用带宽资源。这时还是会用到万能的缓存机制来帮忙。当主机通过ARP请求获得一个设备的MAC地址后会缓存在本地的ARP表项中,下次直接查表找MAC地址就好了!
而RARP完全是ARP的逆向过程!一个刚登陆互联网的网络设备,只知道自己MAC地址,需要通过RARP协议向内网广播以请求IP地址。就是由自己的MAC获得自己IP地址的过程。
二、DHCP协议
DHCP协议是我们上网十分常用的网络层协议。负责为每个刚连上网络的设备分配一个IP地址。不用我们手动配置了。(当然你要是想手动配置一下设备的IP也可以。。ifconfig命令就能做到)
可以看到,DHCP协议做的事情好像和RARP协议非常像,都是连上网络时获取自己的IP地址。区别是DHCP是一种更精巧的协议,是RARP的升级版,它的工作过程比RARP要复杂很多,也是我们现在经常使用的主流协议。
DHCP协议通过外网的DHCP服务器或内网的DHCP中继代理服务器提供。使用**“DHCP四次握手”**机制实现,大概的步骤如下:
-
DHCP发现(DHCP DISCOVER):
客户端刚连上网时,还没有IP呢。需要用广播的形式在内网中找到DHCP服务器或中继代理,并向其请求IP地址。
-
DHCP提供(DHCP OFFER):
DHCP服务器或中继代理收到了客户端的请求后,仍会使用本地广播的形式向客户端分配地址。响应报文应包含:准备分配的IP地址、子网掩码、默认网关IP、本地DNS服务器IP、IP有效期。
-
DHCP请求(DHCP REQUEST):
客户端收到DHCP提供报文后,会向服务器发送DHCP请求报文,回显提供报文的内容。
-
DHCP确认:(DHCP ACK):
DHCP服务器或中继代理收到REQUEST并确认无误后,发送ACK给对方,分配IP任务完成。
三、NAT协议
1. NAT协议简介
前篇介绍过,NAT协议的出现缓解了IPv4地址快速耗尽的局面。通过NAT协议,IP地址可以被复用,意味着一个IP地址可以对应多个端设备。乍一想这个事情怎么可能呢?这就是NAT协议的工作内容了:
图2 NAT协议工作过程
由上图可见NAT协议的作用:
-
将私网地址转换成公网地址:
私网的默认网关路由器维护一张NAT表,当私网设备需要和外网通信时,网关通过NAT查找源设备的私网地址,将其改写成NAT表中对应的公网地址。之后,IP头部的源IP字段都被替换成公网IP。
-
利用路由器端口号复用公网IP:
观察上图的NAT表可以发现,这张NAT表维护的两个公网IP都是
120.229.175.121
,只有端口号不一样;而私网地址是两个不一样的地址。就这样,NAT协议通过给一个公网IP设置不同的端口号来区分私网IP,从而达到了复用IP的效果。
2. NAT内网穿透技术
上面描述的NAT机制有2个问题:
- 把维护NAT表项的工作全部交给默认网关路由器,路由器表示亚历山大。。
- 万一路由器中的NAT服务器崩了,NAT服务将不能使用。。
解决的方法之一还是采用“分而治之”的思想,将NAT服务器的工作内容分配给各端设备,这也是NAT内网穿透的核心:
客户端主动从默认网关中的NAT服务器获取公网IP(port),然后自己给自己建立映射条目,当需要向外网通信时,自己就可以做地址转换了!
四、ICMP协议与ping命令
ICMP协议(Internet Control Message Protocol,互联网控制报文协议),顾名思义,就是指负责发送互联网控制报文的协议。。
1. ICMP报文格式
什么叫控制报文呢?就是说当网络环境出现故障、网络环境发生变化等等一些表征发出去报文的状态的信息报文。这种控制报文分为两大类,“查询报文”、“差错报文”。以下是常用的ICMP报文类型:
图3 ICMP报文类型
图4 ICMP报文格式
由图4可见,ICMP报文是内嵌于IP数据包中的。ICMP报文整体作为IP数据包的数据部分存在。
ICMP报文也有首部字段:**类型、代码、校验和。**类型和代码字段确定了该ICMP报文属于那种类型的控制报文。
2. ICMP协议的应用举例
-
**ping程序:**ping是我们检测某个IP(域名)是否可以进行网络通信的利器,它并没有用任何传输层协议来通信, 而是使用了ICMP协议。ping通过“回送应答”和“回送请求”类型的ICMP报文来探测某个IP是否具备网络条件。
LAPTOP-OHBI7I8S% ping www.baidu.com PING www.a.shifen.com (182.61.200.7) 56(84) bytes of data. 64 bytes from 182.61.200.7 (182.61.200.7): icmp_seq=1 ttl=50 time=23.0 ms 64 bytes from 182.61.200.7 (182.61.200.7): icmp_seq=2 ttl=50 time=23.4 ms 64 bytes from 182.61.200.7 (182.61.200.7): icmp_seq=3 ttl=50 time=25.5 ms
以前看ping输出的时候只知道下面弹出一堆东西就是好使,也不知道啥意思。现在学习了ICMP协议后,这些输出字段是不是觉得很好理解了呢?
icmp_seq:ICMP报文序号
ttl:time to live,最大跳数(50跳)
time:这里指的是往返时间,RTT(24ms左右)
-
**traceroute程序:**利用差错控制报文来探测当前主机到目标IP的路由器IP地址。
LAPTOP-OHBI7I8S% traceroute www.baidu.com traceroute to www.a.shifen.com (182.61.200.7), 64 hops max 1 172.22.128.1 0.458ms 0.453ms 0.313ms 2 192.168.3.1 2.688ms 1.161ms 0.985ms 3 10.17.172.1 3.590ms 2.901ms 12.542ms 4 10.6.1.34 4.226ms 8.978ms 9.034ms 5 175.190.120.129 4.831ms 9.552ms 4.150ms 6 * * * 7 14.197.232.58 25.306ms 5.240ms 11.935ms 8 * * * 9 14.197.249.134 24.960ms 23.208ms 24.843ms 10 * * * 11 182.61.255.45 25.870ms 32.488ms 27.820ms
结果显示的就是我的主机到目标IP(域名)所经历的各跳路由器IP。
这是咋做到的呢?
正是利用了ICMP的差错报文——超时。traceroute程序向目标主机逐次发送
TTL
递增的探测报文(初始TTL为1)。这样,本机发送的探测报文过了指定跳数就会被路由器丢弃;那么,就会收到若干个路由器发来的ICMP超时差错报文,而这些路由器正是探测报文从源端经过递增跳数到达的路由器,直到对端主机。