您的位置:首页 > 理论基础 > 计算机网络

计算机网络协议第二章,链路层协议

2014-10-18 11:37 295 查看

以太网协议

协议介绍

以太网通常是指数字设备公司、英特尔和施乐联合发布的一个标准。它采用一种CSMA/CD的媒体接入技术,速率10Mb/s,地址48比特。
RFC 894 (A Standard for the Transmission of IP Datagrams over Ethernet Networks)定义IP数据报基于以太网协议封装标准。如下图。



目的地址,源地址是硬件地址,6字节即48 bit。网卡的MAC地址。使用ifconfig之类的命令可以查看。
类型,2字节。表示子协议的类型。0x0800表示IP协议,0x0806为ARP协议,0x8035为RARP协议,后续都会一一阐述。
数据,可变长度,一般为[46-1500],1500是以太网常用最大传输单元MTU,46为最小传输的数据大小,如果数据长度不足46字节需要尾部补(PAD)字节。因此以太网协议长度最小为60字节,14字节的头部和最小数据字节46之和。
CRC,校验和,用于检验帧内数据内容差错。

MTU和路径MTU

MTU是链路层的一个特性,不同类型的网络大多会有一个最大传输数据上限,要么是物理上限制,要么上逻辑上的限制,目的是为了提高传输效率。而不同类型网络都MTU值不一定相同。比如以太网MTU通常是1500字节。基于链路层之上的IP协议如果要传输大于MTU的数据内容就必须使用分片,单个分片的最大长度不超过MTU以满足链路层的要求。

两台不同网络的主机进行通讯时会经过多个的路由器,而每个路由器的MTU不一定相同,因此此时路径上的最小MTU比较重要,称为路径MTU或PMTU。两台主机路径MTU不一定是固定值,原因在于路由不一定对称(即A到B到路径和B到A到路径不一定一致)。

RFC 1191描述了路径MTU的发现机制,traceroute程序就是基于此发现路径MTU的。

举例

输入ping -s 1473 192.168.1.104 并tcpdump抓包
16:02:35.211773 IP 192.168.1.105 > 192.168.1.104: ICMP echo request, id 3598, seq 3, length 1480

16:02:35.211791 IP 192.168.1.105 > 192.168.1.104: ip-proto-1

16:02:35.333957 IP 192.168.1.104 > 192.168.1.105: ICMP echo reply, id 3598, seq 3, length 1480

16:02:35.337711 IP 192.168.1.104 > 192.168.1.105: ip-proto-1

输入ping -s 1472 192.168.1.104 并tcpdump抓包
15:57:04.738376 IP 192.168.1.105 > 192.168.1.104: ICMP echo request, id 61453, seq 4, length 1480

15:57:04.738394 IP 192.168.1.105 > 192.168.1.104: ip-proto-1

两次命令唯一不同在于 -s 选项上,一次是1472,另一次是1473。 -s选项表示一次发送的数据,第一次要发送1473个字节,而第二需要发送1472字节。第一次就是需要IP分片的情况,因为相同的seq号发送了两次,第二次就没有IP分片,因为就一次发送,一次应答。以太网MTU最大字节是1500,为什么IP分片的临界值是1472。因为IP首部占用20字节,ping的ICMP首部占用8个字节,因此只有1472(即1500-20-8)个字节可供传输数据。

使用ping这个常用命令可用于分析IP分片功能,详细IP层面的协议在后续阐述,这里只是印证IP层是否是遵从MTU的大小进行分片。

ARP协议

协议介绍

ARP协议称为地址解析协议。ARP协议是基于链路层协议的,其目的又是服务于网络层协议。因此学术界对其到底属于哪一层协议颇有争论,可惜没有2.5层协议,不然再恰当不过了。我们这个系列中将其划归到链路层协议。
言归正传,ARP协议设计的目的是在网络通信中根据目的IP地址获取目的主机的物理地址,以便提供给链路层。因此ARP协议服务于IP协议,是IP路由的基础。
将ARP协议用白话文来描述是这样的,分别处在不同村子的张三想和李四打电话,张三不知道李四的电话号码,张三就拿起扩音器在村子里喊话,“我是张三,我的电话号码是a.a.a.a.a.a,谁知道李四的电话号码,知道就打电话通知我”,结果村支部收到张三的喊话,立刻打电话给张三,告诉张三李四的电话是b.b.b.b.b.b。
可能这个比喻不是很精准,但依然能够可以帮助理解ARP协议。张三、李四这类人名表示主机的IP地址,都是一个人(主机)的唯一标识。电话号码表示物理地址,是通信不可或缺的因素。村子比喻为一个计算机网络,不同村子表示不同的网络。村支部表示每个村庄联络的中转站,比喻为路由器。扩音器喊话比喻为一个网络内广播行为。
通过上述比喻我们了解到,ARP请求是向一个网络内进行广播,让网络内的主机包括路由器帮他查找某个IP主机对应的物理地址,查到立刻进行ARP回复请求方。假设查找的IP主机属于同一网络,那么由主机进行ARP应答,如果属于不同的网络,则由路由器进行应答,这个功能就是所谓的ARP代理,即(Proxy ARP)。
如果张三和李四属于同一村子,应该如何描述ARP协议呢?
下图是ARP协议的封装格式。



以太网首部是以太网协议规定的,参见以太网部分。
以太网目的地址为全1是一个特殊的广播地址。
以太网源地址是本机的物理地址。
帧类型,APR固定为0x0806
OP,表示操作类型,1为ARP请求,2为ARP应答。
发送端以太网地址和源地址一样。
发送端IP地址是自己的IP地址
目的以太网地址,如果是ARP请求,因为不知道目的以太网地址,可以填全0。
目的IP地址,如果是ARP请求,就是你说需要查询的IP地址。

举例

输入 telnet 192.168.1.104 命令并且tcpdump抓包.
15:13:38.414910 ARP, Request who-has 192.168.1.104 tell 192.168.1.105, length 28

15:13:38.529437 ARP, Reply 192.168.1.104 is-at 09:64:c2:3b:de:70, length 28

1、请求方的主机地址为192.168.1.105,想知道192.168.1.104,发送ARP请求。
2、主机 192.168.1.104回复请求方,告知其物理地址。

输入arp -a命令后,多出一条192.168.1.104记录。arp -a命令可以查看已经缓存的IP地址和物理地址的对应关系。

应用

ARP协议的IP路由的基础,因为IP路由需要知道下一跳的物理地址。
ARP协议还可以用来检测IP冲突。

RARP协议

协议介绍

RARP协议是逆地址解析协议,跟ARP正好相反,ARP协议是通过IP查找物理地址,而RARP协议是使用物理地址来查找IP地址。
RARP协议的封装格式和ARP协议类似。有几处不同。
a) 以太网首部的帧类型是0x8035。
b) OP操作类型,3表示RARP请求,4表示RARP应答。
c) 如果是RARP请求,目的的IP地址为全0,而目的以太网地址是必填。

RARP协议一般是用于无盘机用于查找自身IP地址的协议,因为无盘机没有本地文件无法保存自身的IP地址,因此需要向服务器查找自身的IP地址。无盘的机的工作原理是向远程服务器获取完IP地址后,加载远程服务器的操作系统进行工作。因为内核一般不会进行磁盘文件读取等工作,因此RARP服务由用户进程实现,而RARP是以太网帧类型是0x8035,与IP,ARP的帧类型都不同,而操作系统内核本应无需关心,但是实际上又有用户进程提供RARP服务,因此使得RARP用户进程和内核高度耦合。RARP服务另一个问题是为了使一台RARP服务关机的情况也能正常工作,会使用多台RARP服务器进行备份,多台RARP服务同时提供服务会带来网络流量增加,由于每台RARP服务都去应答RARP请求,因此会提高以太网发生冲突的概率。

小结

本章主要阐述了以太网协议和ARP/RARP协议,其中以太网协议和ARP重点阐述。以太网协议里有MTU和PMTU的重要概念,基于链路层协议的IP协议必须遵从链路层协议的特性,一、IP数据大于MTU时应该分片。二、IP在进行路由时必须获得物理地址,因此必须使用ARP协议。
我们在ARP举例过程中看到,telnet基于TCP,TCP基于IP,当使用telnet连接时,抓到其先发送ARP协议获取对方IP的物理地址,证明了IP协议遵从链路层协议的一个特性。
我在以太网举例过程中看到,ping基于ICMP, ICMP基于IP,当ping命令传输超过1472字节数据时发送了两次报文,证明了IP协议遵从链路层协议MTU的特性。但是IP层协议有没有遵从路径MTU即PMTU进行分片呢?该话题留个读者深思,先埋下一个伏笔,后续有机会继续探讨这个话题。

参考

《TCP/IP详解-协议》卷一 W.Richard Stevens

修订

初稿 2014-10-18 Simon

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: