地址解析协议ARP
由于在实际网络的链路上传送数据帧时,最终必须使用MAC地址 ARP协议:完成主机或路由器IP地址到MAC地址的映射。解决下一跳走哪的问题
ARP协议使用过程: 检查ARP高速缓存,有对应表项则写入MAC帧,没有则用目的MAC地址为FF-FF-FF-FF-FF-FF的帧封装并广播ARP请求分组,同一局域网中所有主机都能收到该请求。目的主机收到请求后就会向源主机单播一个ARP响应分组,源主机收到后将此映射写入ARP缓存(10-20min更新一次)。
ARP高速缓存:每台主机都有一个ARP高速缓存,用来存放本局域网上各主机/路由器的IP地址到MAC地址的映射表,称为ARP表
这时1想要向3发一个数据报据,1先在ARP高速缓存中查看有无主机3的IP地址,如果有,就可以得到3的MAC地址,直接写入MAC帧,然后发送即可;如果没有,那么就通过使用目的MAC地址为FF-FF-FF-FF-FF-FF的帧来封装并广播ARP请求分组,使同一个局域网的所有主机收到ARP请求,但因为上面带有3的IP地址,因此2会丢弃,3会返回一个响应ARP分组,分组中包含主机3的IP与MAC地址的映射关系(单播的),主机1在收到后将此映射写入ARP缓存,然后按查询到的硬件地址发送MAC帧
在网络层封装IP地址,在链路层封装MAC地址
ARP请求分组的含义:我的IP地址是xxx,MAC地址是xxx,我要找IP地址为xxx的MAC地址
ARP用于解决同一个局城网上的主机或路由器的IP地址和硬件地址的映射问题,如果所要找的主机和源主机不在同一个局城网上,那么就要通过ARP找到一个位于本局城网上的某个路由器的硬件地址,然后把分组发送给这个路由器,让这个路由器把分组转发给下一个网络。剩下的工作就由下一个网络来做
1向5发送一个数据报,显然1的ARP表中没有5的信息(1会将IP地址与本网络的子网掩码进行与的操作,发现5和自己不再同一个网段),因此1会去查找默认网关的MAC地址(网关就是该网络连入外部网络的一个关口,只要通过默认网关才能把数据发到外面的网络,每个主机都清楚自己的默认网关是谁),如果没有默认网关的MAC地址,方法同上
然后把默认网关的MAC地址写到MAC帧中,并发送分组
交换机检查数据帧的MAC地址然后转发
ARP协议4种典型情况:
- 主机A发给本网络上的主机B:用ARP找到主机B的硬件地址
- 主机A发给另一网络上的主机B:用ARP找到本网络上一个路由器(网关)的硬件地址
- 路由器发给本网络的主机A:用ARP找到主机A的硬件地址
- 路由器发给另一网络的主机B:用ARP找到本网络上的一个路由器(网关)的硬件地址
动态主机配置协议DHCP
动态主机配置协议DHCP是应用层协议,使用客户/服务器方式(即客户端和服务端交互),客户端和服务端通过广播方式进行交互,基于UDP
DHCP提供即插即用联网机制(只要设备进入DHCP服务器管辖范围内),主机可以从服务器动态获取IP地址、子网掩码、默认网关、DNS服务器名称与IP地址,允许地址重用(每一个DHCP服务器有自己的IP地址池,当一个设备进入服务器范围内,就给一个IP,做了以后就收回来,可以给其他设备用),支持移动用户加入网络,支持在用地址续租
DHCP服务器聚合DHCP客户端的交换过程如下
- 主机广播DHCP发现报文。一个主机连入局域网,广播给这个网络里所有设备,试图找到网络中的服务器
- DHCP服务器广播DHCP提供报文。如果网络内有DHCP服务器,且存在有空余IP地址的DHCP服务器,此时这些DHCP服务器就会拟分配给主机一个IP地址及相关配置,这个拟分配的信息主机会收到,但是还不能用。可能有多个DHCP服务器发来提供报文,但是主机只选择最先到的
- 主机广播DHCP请求报文。主机向第一个发来提供报文DHCP服务器请求提供IP地址(这里还是用广播,告诉其他DHCP服务器已经有选中的服务器了)
- DHCP服务器广播DHCP确认报文。服务器正式将IP地址分配给主机
国际控制报文协议ICMP
为了提高IP数据报交付成功的机会,在网络层使用国际控制报文协议
首部有首部检验和,这里的检验和是数据部分的检验和
ICMP报文的类型:ICMP差错报文,ICMP询问报文
ICMP差错报文
ICMP差错报告报文,是IP数据报(网络层传输单位)的数据部分
- 终点不可达:当路由器或主机不能交付数据报时就向源点发送终点不可达报文(无法交付)
- 源点抑制(现在基本用不到了):当路由器或主机由于拥塞而丢弃数据报时,就向源点抑制报文,使源点知道应当把数据报的发送速率放慢(拥塞丢数据)
- 时间超过:当路由器收到生存时间TTL=0的数据报时,除丢弃该数据报外,还要向源点发送时间超过报文。当终点在预先规定的时间内不能收得到一个数据报的全部数据报片时,就把已收到的数据报片都丢弃,并向源点发送时间超过报文(TTL=0)
- 参数问题:当路由器或目的主机收到的数据报首部中有的字段的值不正确时,就丢弃该数据报,并向源点发送参数问题报文(首部字段有问题)
- 改变路由(重定向):路由器把改变路由报文发送给主机,让主机知道下次应将数据报发送给另外的路由器(可通过更好的路由)
不应发送ICMP差错报文
- 对ICMP差错报告报文不再发送ICMP差错报告报文
- 对第一个分片的数据报片的后续数据包片都不发送ICMP差错报告报文(只对第一个分片的数据报片发送ICMP差错报告报文)
- 对具有组播(一点到多点,相比于广播,有选择性)地址的数据报都不发送ICMP差错报告报文
- 对具有特殊地址(如127.0.0.0或0.0.0.0)的数据报不发送ICMP差错报告报文
ICMP询问报文
- 回送请求和回答报文:主机或路由器向特定目的的主机发出的询问,收到此报文的主机必须给源主机或路由器发送ICMP回送回答报文。测试目的站是否可达以及了解其相关状态,例如PING
- 时间戳请求和回答报文:请某个主机或路由器回答当前的日期和时间。用来进行时钟同步和测量时间
- 掩码地址请求和回答报文(不再使用了)
- 路由器询问和通报报文(不再使用了)
ICMP的应用
PING:测试两个主机之间的连通性,使用了ICMP回送请求和回答报文 Traceroute:跟踪一个分组从源点到终点的路径,使用了ICMP时间超过差错报告报文