1.最大传输单元(MTU)/路径MTU
- 以太网和IEEE802.3对数据帧的长度都有限制,其最大值分别是1500和1492字节,将这个限制称作最大传输单元(MTU,Maximum Transmission Unit)。
- 如果IP层有一个数据报要传递,而数据的长度比链路层的MTU还大,那么IP层就要进行分片(Fragmentation)(应该尽可能避免分片),把数据报分成若干篇,这样每一篇都小于MTU。
- 当网络上的两台主机相互进行通信时,两台主机之间要经过多个网络,每个网络的链路层可能有不同的MTU,其中两台通信主机路径中的最小MTU称作路径MTU。
1.1 以太网帧格式
以太网的数据封装格式如下图所示,该图片来自于百度。
1.2 地址解析
IP地址只是逻辑地址,并不知道对应主机的位置,需要将其转换成物理地址进行进一步操作。从IP地址到Mac地址的转换过程被称为地址解析(ARP),相对应的从Mac地址转换成IP地址的协议被称为反向地址解析协议(RARP)。
例如在帧的头部,目的地址的获取就需要用到ARP协议。帧的传输格式主要有三种,一种是IP数据报,一种是ARP数据报,一种是RARP数据报。
2. ICMP协议
数据报再传输至链路地址时需要知道源MAC地址与目的MAC地址,有时候IP对应的MAC地址并不存在,这个时候就需要向源主机报告错误信息,这个时候就会用到ICMP协议。
ICMP协议用于传递差错信息,时间、回显、网络信息等控制数据。当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动发送ICMP消息。ICMP报文在IP帧结构的首部协议类型字段(Protocol 8bit)的值=1。
此外在IP默认部分片的情况下,数据报长度超过MTU时会出错,该错误也是通过ICMP协议反馈给源主机。判断对等方是否可达的ping程序就是通过将数据分装成ICMP协议来实现的。
注意:ICMP协议属于IP(运输层)。
具体的协议报文会在后面的讲解中进一步说明。
3. ARP协议
IP地址转化成Mac地址的协议叫做ARP协议。假设A要发送数据给B,报文中已经填充了B的IP地址,在封装至TCP层时,主机A会发送一个广播给所有主机,IP地址为A所需要地址的主机会响应该请求,其他主机会丢弃。
地址解析完成之后,IP与MAC的对应关系会存放在ARP高速缓冲中。
ARP地址解析过程如下图所示:
4.RARP协议
RARP协议主要用在无盘工作站上,因为没有硬盘所以无法存储IP地址,为了获取无盘工作站的IP地址,就只能通过使用RARP协议。无盘工作站再工作的时候会向RARP服务器发送RARP请求并传输自己的MAC地址已获取IP地址。
5.数据在网络中的传输过程
在广域网中有A,B两个主机,他们之间的ping过程如下图所示。
- 应用程序ping会判断发送的是主机名还是IP地址,调用gethostbyname()解析主机B,将主机名转换成一个32位的IP地址。这个过程叫做DNS域名解析
- ping程序向目的IP地址发送一个ICMP的ECHO包
- 将目标主机的IP地址转换成48位硬件地址,再局域网内发送ARP请求广播,查找主机B的硬件地址。
- 主机B的ARP协议层接受到主机A的ARP请求后,将本机的硬件地址填充到应答包,发送ARP应答到主机A
- 发送ICMP数据包到主机B
- 主机B接受到主机A的ICMP包,发送响应包
- 主机A接收到主机B的ICMP包响应包