赞
踩
目录
在学习完ip协议后知道,网络层解决的问题是提供跨网络发送数据的能力,链路层解决的则是两台相连主机之间的通信问题。
"以太网" 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的 内容.
例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等; 例如以太网中的网线必须使用双绞线; 传输速率有10M, 100M, 1000M等;
以太网是当前应用最广泛的局域网技术, 和以太网并列的还有令牌环网, 无线LAN等。
虽然网络中各个局域网采用的通信技术可能并不相同,但是IP屏蔽了底层网络的差异,对于网络通信双方的IP层及其往上的协议来说,它们并不需要关心底层具体使用的是哪种局域网技术。
- 数据在发送之前会先进行数据封装,此时链路层会给数据封装上对应的局域网的报头。
- 如果数据要进行跨网络传输,那么就需要经过路由器转发。
- 当数据在路由器进行向上交付时,会将该数据对应的局域网报头去掉。
- 而当路由器该数据转发给下一跳之前,又会给该数据封装上下一跳网络所对应的局域网报头。
但以太网中所有的主机都是共享一个通信信道的,当局域网中的一台主机发送数据后,该局域网中所有的主机都是可以接受到该数据的(可以选择丢弃,当识别到数据不是发送给自己时,不会进行向上交付)。
由于以太网中所有主机共享一个通信信道,所以主机不能同时发送数据,否则数据之间会产生干扰。这里有碰撞避免算法解决这个问题。(碰撞避免算法就是主机等待一段时间后重新发送数据,因此以太网底层也有重传机制,只不过以太网的重传机制只是为了保证将数据从局域网中的一台主机发送到另一台主机。)
MAC帧如何决定将有效载荷交付给上层的哪一个协议?
由于MAC帧是定长的,当底层收到一个MAC帧后,直接提取出MAC帧当中固定长度的帧头和帧尾,此时剩下的就是有效载荷了。当局域网中的一个主机收到该MAC帧后,会提取它的目的MAC地址与自己的MAC地址进行比对。成功后就会将有效载荷交付给上层IP层进行进一步处理。而其它主机则会丢弃这个数据。
MAC地址用来识别数据链路层中相连的节点。
长度为48位,及6个字节,一般用16进制数字加上冒号的形式来表示,例如:08:01:27:03:fb:19。
在网卡出厂时就确定了,不能修改,MAC地址通常是唯一的(虚拟机中的MAC地址不是真实的MAC地址,可能会冲突;也有些网卡支持用户配置MAC地址)。
可以通过ifconfig
命令来查看我们的MAC地址
MTU(Maximum Transmission Unit,最大传输单元)描述的是底层数据帧一次最多可以发送的数据量,这个限制是不同的数据链路层对应的物理层产生的。不同的网络环境,MTU是不一样的,以太网规定MAC帧中数据的最小长度为46字节,如果发送数据量小于46字节,则需要在数据后面补填充位。
例如:TCP作为传输控制协议,它需要控制一次向下交付数据不能超过某一阈值,这个阈值就叫做MSS(Maximum Segment Size,最大报文段长度)。MAC帧的有效载荷最大为MTU,TCP的有效载荷最大为MSS,而TCP和IP一般情况下报头的长度是20字节,因此一般情况下 MSS = MTU - 20 - 20,而MTU的值一般是1500字节,因此MSS的值一般就是1460字节。
例如:有两台主机分别为A B,且两台主机位于不同的局域网内。当主机A发送数据给主机B时(这里只介绍网络与数据链路层):
1.主机A需要将封装好的MAC帧发送到自己所属局域网当中,此时此时MAC帧当中的源MAC地址和目的MAC地址,对应就是主机A的MAC地址和路由器A的MAC地址。
2.此时主机A所属局域网当中的所有主机都是可以收到这个MAC帧,但路由器发现该MAC帧当中的目的MAC地址与自己的MAC地址相同,再对该MAC帧进行解包,并将解包后的IP数据报交付给IP层。
3.路由器A的IP层拿到解包后的IP数据报后,会提取出IP报头当中的目的IP地址,然后通过路由表计算,确定再把数据交给路由器C,于是路由器A再将数据向下进行交付,重新封装MAC帧的帧头和帧尾,但此时封装后的MAC帧当中的源MAC地址和目的MAC地址,就变成了路由器A的MAC地址和路由器B的MAC地址。(后面也是继续这个过程,知道把数据给主机B)(但这里存在一个问题,一开始主机A是不知道主机B的MAC地址,只知道它的IP)
实际数据在路由过程中会存在两套地址,一套是源IP地址和目的IP地址,还有一套是源MAC地址和目的MAC地址。(MAC地址都是在改变的,而IP没有改变)(实际数据在路由过程中,源IP地址和目的IP地址也可能会发生变化。(NAT技术))
地址解析协议(Address Resolution Protocol,ARP)协议,是根据IP地址获取MAC地址的一个TCP/IP协议。
在上面数据跨网络传输的过程的介绍中,ARP协议可以解决其中存在的问题,ARP协议来根据IP地址来获取目标主机的MAC地址。
补充:APR协议也是属于数据链路层的,不过它在MAC协议上面。
各个字段解释:
- 硬件类型指链路层的网络类型,1为以太网。
- 协议类型指要转换的地址类型,0x0800为IP地址。
- 硬件地址长度对于以太网地址为6字节,因为MAC地址是48位的。
- 协议地址长度对于IP地址为4字节,因为IP地址是32位的。
- op字段为1表示ARP请求,op字段为2表示ARP应答。
ARP是MAC帧协议的上层协议,ARP数据格式中的前3个字段和最后一个字段对应的就是以太网首部,但由于ARP数据包的长度不足46字节,所以ARP数据包在封装成为MAC帧时还要补上18字节的填充字段。
以上面(数据跨网络传输)主机A与主机B通信为例:(这里也只介绍网络与数据链路层)
路由器D要将数据转发给同一局域网当中的主机B,但此时路由器D只知道主机B的ip地址,并不知道它的MAC地址。因此路由器D现在需要向主机B发起ARP请求,然后等待主机B发送ARP应答得知主机B的MAC地址。
路由器D需要先构建ARP请求。过程如下:
路由器D构建的是ARP请求,因此ARP请求当中的op字段设置为1。
是以太网通信,所以ARP请求当中的硬件类型字段设置为1。
ARP请求当中的协议类型设置为0800,因为路由器是要根据主机B的IP地址来获取主机B的MAC地址。
ARP请求当中的硬件地址长度和协议地址长度分别设置为6和4,因为MAC地址的长度是48位,IP地址的长度是32位。
ARP请求当中的发送端以太网地址和发送端IP地址,对应就是路由器D的MAC地址和IP地址。
ARP请求当中的目的以太网地址和目的IP地址,对应就是主机B的MAC地址和IP地址,但由于路由器D不知道主机B的MAC地址,会将目的以太网地址的二进制序列设置为全1,表示在局域网中进行广播。
此时还要进行向下交付,将数据封装成MAC帧。
主机B所属的局域网内的主机都可以收到这条数据,且这个MAC帧是以广播的方式发出的,所以该局域网内的主机都会对该数据解包。当这些主机识别到MAC帧当中的帧类型字段为0806后,便知道这是一个ARP的请求或应答的数据包,于是会将MAC帧的有效载荷向上交付给ARP层。最后只有主机B发现ARP数据包当中的目的IP地址与自己相同,因此只有主机B会对该ARP请求进行应答,而局域网当中的其他主机在识别到ARP数据包当中的目的IP地址与自己不匹配后,就会直接将这个ARP请求报文丢弃。(这里是在ARP层丢弃的)
过程也类似,到主机B收到该消息后,便知道了路由器D的ip地址与MAC地址。
过程:
因为主机B构建的是ARP应答,因此ARP应答当中的op字段设置为2。
ARP应答当中的硬件类型、协议类型、硬件地址长度、协议地址长度的值与ARP请求当中设置的值相同。
ARP应答当中的发送端以太网地址和发送端IP地址,对应就是主机B的MAC地址和IP地址。
ARP应答当中的目的以太网地址和目的IP地址,对应就是路由器D的MAC地址和IP地址,因为路由器D发来的ARP请求当中告知了主机B它的MAC地址和IP地址,因此主机B是知道的。
同样也要向下交付,封装为MAC帧
注意:此时MAC帧中的目的MAC地址不是全1,意味着在该局域网内的主机收到该数据后,该MAC帧对应的以太网目的地址与自己不同后,就会将该MAC帧丢弃,不会向上交付给ARP层了。
不是每次要获取对方的MAC地址时都需要发起ARP请求,每次发起ARP请求后都会建立对应主机IP地址和MAC地址的映射关系,每台主机都维护了一个ARP缓存表,我们可以用arp -a
命令进行查看。但缓存表中的表项有过期时间。可用arp -a查看。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。