链路层以太网详解
Posted 两片空白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链路层以太网详解相关的知识,希望对你有一定的参考价值。
目录
前言
虽然网络层IP协议提供了数据传输的能力。点对点(同一局域网主机之间通信),端对端(跨网络主机通信)。但是网络层并不是真正发送数据的,真正发送数据的是链路层。
一.认识以太网
- 以太网不是一种具体的网络,而是一种技术标准,即包含了链路层的内容,还包含了物理层的内容。例如:规定了网络的拓扑结构(节点以什么形式组织(树/图...)),访问控制方式,传输速率等。
- 以太网现在是当前应用最广泛的局域网技术。和以太网并列的还有令牌环网,无限LAN等。
总结:以太网是一种标准,是局域网中通信的一种标准。
二.以太网帧格式
2.1 格式介绍
- 源地址和目的地址指的是网卡的硬件地址(MAC地址),长度48位,咋网卡出厂时固化的。
- 帧协议类型字段有三种值(0800,0806,8035),分别对应IP,ARP,RARP。
- 帧末尾是CRC校验码。
特殊MAC地址:如果将目的MAC地址设为全1,是广播。每一个局域网内的主机,都能收到数据,并且向上解析。
如何向上实现报头和数据分离:以太网协议报头长度是定长的。
向上交付给那个协议:类型0800说明是IP协议。
2.2 认识MAC地址
- MAC地址长度48位,6字节,一般用16进制加上冒号形式来表示(例如:08:00:27:03:fb:19)。
- 在网卡出厂时就确定了,不能修改,是唯一的。
- 用来唯一标识一台主机的网卡。
2.3 对比IP地址和MAC地址
有人说,有了IP地址来标识主机,为什么还需要mac地址呢?
源IP地址和目的在IP地址是标识了最开始发送数据的主机和最终接收数据的主机。相当于你要取某个地方的起点和终点。
源MAC地址和目的IP是当前局域网中发送数据的主机和接收数据的主机。相当于你要去某个地方,每次经过一个区间的起点和终点。
如果跨网络传输,这个发送数据的主机不一定是最开始发送数据的主机,接收数据的主机不一定是最终接收数据的主机。
所以跨网络通信时,MAC地址每经过一个局域网都会发生变化。IP地址不会变化,但是由于NAT技术,源IP地址也是被不断替换的。
为什么以太网协议封装的数据只能局限在局域网中通信?
因为,一台网协议会在数据中添加源MAC地址和目的MAC地址。如果要跨网络,必须经过路由器。路由器连接不同的局域网,用的网卡不同,就需要将收过来的数据,解包,再封包,将数据的MAC地址修改了。
2.4 数据碰撞问题
2.4.1 数据碰撞概念
一个局域网是多台主机共享的,当多台主机往局域网中发送数据时,数据在局域网中会发生干扰,俗称数据碰撞。数据碰撞之后,由于不知道数据的准确性,数据无法再继续发送。
此时这个局域网就是一个碰撞域,每台主机都会进行冲突检测,检测是否有数据发生碰撞,主机也有冲突避免的算法。
为了避免碰撞,局域网通信,在一个碰撞域中,任何时刻都只允许只有一台主机向另外一台主机通信。
2.4.2 交换机
交换机工作在链路层,具有划分碰撞域和转化数据帧的功能。提高通信效率。
2.4.3 总结一下如何通信
在一个局域网中通信,主机A只负责将数据发送到局域网中,局域网中的所有主机都能收到该数据,包括路由器,路由器也是局域网中的一台主机。但是以太网协议会在数据中加入源MAC地址和目的MAC地址,主机收到数据后,会将目MAC地址和自己的MAC地址作比较,不匹配丢弃,匹配的话,就向上会解析。
三.认识MTU
- 以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据报小于46字节时,要在后面补充位数。
- 最大值1500字节称为以太网的最大传输单元(MTU),不同网络类型有不同的MTU。
- 如果一个数据包的长度超过了MTU,则需要对数据进行分片,分片是网络层IP做的。
- 不同的数据链路层标准的MTU是不同的,在数据传输过程中,数据可能会被路由器继续分片。
3.1 MTU对IP协议的影响
发送时,网络层IP协议的数据需要发送到链路层,由于MTU的影响,对于超过MTU的数据,IP要对其进行分片处理。
- 同一组数据的每一个分片IP协议的16位标识id是相同的。
- 每一个分片IP协议报头的3位标志段,第二位为0,表示允许分片,第三位为1,表示后面还有分片,第三位为0,表示后面没有分片。
- 每一个分片IP协议报头的13为偏移量,表示的是当前分片距离起始位置的偏移量,用于接收端组装的。
- 一旦一些分片丢失,数据重组失败,但是IP层不负责重传数据。
- 负责数据重传的是传输层,准确来说是TCP协议,UDP协议不可靠。
3.2 MTU对传输层的影响
3.2.1 MTU对UDP协议的影响
UDP协议的特点是:无连接,不可靠和面向数据报的。
- 当一个UDP携带的数据超过1472(1500 - 8(UDP报头) - 20(IP报头))时,在IP层就一定会进行分片
- 分片之后,一个数据被分成了多份,说明,数据丢包的概率增加了。
- 并且,UDP没有可靠性保证,数据不会重传
3.2.2 MTU对TCP的影响
- TCP协议的一个数据报也不能是无限大的,不仅受之于流量控制,拥塞控制的影响,还受MTU的影响。TCP的有效载荷的最大消息长度,称为MSS。
- TCP在建立连接,三次握手时,通信双方会进行MSS协商。
- 双方SYN时会在TCP报头写入自己能支持的MSS值。
- 双方知道知道对方的MSS后,选择最小值作为最终MSS。
- MSS值在TCP报头填入位置在选项。
虽然TCP会协商MSS,但是,仍然可能会被分片。接收端就收在组装时,如果发现一个分片丢失,接收端TCP收不到数据,就认为整个数据丢失,会让发送方,重发整个数据。
MSS和MTU的关系:
3.2.3 查看硬件地址和MTU的命令
四.ARP协议
首先强调ARP协议并不是一个单纯的链路层的协议,而是介于数据链路层和网络层之间的协议。
4.1 ARP协议作用
我们通过上面知道以太网标准的格式,需要在数据中加入源MAC地址和目的MAC地址,那我们时怎么知道对方的MAC地址的呢?
我们是通过APR协议来获取对方的MAC地址。
通过对方的IP地址来获得对方的mac地址。
4.2 ARP数据报格式
- 以太网首部和上面相同。但是ARP协议,类型设为0806
- 硬件类型:指链路层网络类型,1为以太网。
- 协议类型:指要转换的地址类型,0800为IP地址,意思是通过IP地址找MAC地址。
- 硬件地址长度:对于以太网地址为6字节。
- 协议地址长度:对于IP地址为4字节
- op字段:为1表示ARP请求,为2表示ARP应答。
4.3 ARP协议的工作流程
- ARP协议先广播数据到居于网中,目的MAC地址为全1。
- 每台主机收到数据后,解开以太网报头和IP报头,拿到目的IP地址。
- 拿目的IP地址和字节主机的IP地址向比较,匹配就返回ARP响应。
- 发送端收到响应就获得了对方的MAC地址。
如果局域网中的主机没有目标主机,怎么知道对方的IP地址呢?(ARP字段要填写)
我们知道最终要接收数据主机的IP地址(应用层会数据URL中)。在IP成先查路由表,发现不在当前局域网中,会发送给路由表中默认的网段,也就是路由器。主机知道路由器的IP地址,一般是当前局域网的网络号,主机号为1。会在ARP协议的目标IP地址填入路由器的IP地址。路由器收到后会ARP响应。
如果查看路由表,最终要接收数据主机的IP地址在当前局域网中,会在ARP目的IP地址填入最终要接收数据主机的IP地址。最终要接收的主机收到会响应ARP。
局域网中的主机收到ARP请求,向判断op字段是否是请求,因为当前主机可能还收到了别的主机的响应。再解开报头,获得目的IP地址,是否与自己的IP地址匹配,匹配响应,不匹配丢弃。(广播的,局域网中的主机都会解开报头,匹配目的IP地址)
局域网中发送请求的主机收到ARP响应,向判断op字段是否是响应,因为当前主机可能还收到了别的主机的请求。再解开报头,MAC地址与自己的匹配,不匹配的丢弃。发送请求的主机就获得了对方的MAC地址。(不是广播的,请求知道了发送主机的MAC地址)
以上是关于链路层以太网详解的主要内容,如果未能解决你的问题,请参考以下文章