链路层:
数据链路层的作用主要是负责相邻设备之间的数据帧传输
一.以太网协议:
1.以太网的概念:
在数据链路层主要是进行相邻设备之间的数据帧传输,而在这一过程中保证数据在传输的时候没有混乱需要用到的协议就是以太网协议;
以太网协议不是一种具体的网络, 而是一种技术标准;既包含了数据链路层的内容,也包含了一些物理层的内容;例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等;例如以太网中的网线必须使用双绞线;传输速率有10M, 100M, 1000M等;以太网是当前应用广泛的局域网技术;和以太网并列的还有令牌环网, 无线LAN等;
2.以太网的帧格式如下:
其中的源地址和目的地址是指网卡的硬件地址------MAC地址,长度为48位,在网卡出厂时固化到上面的;协议字段有三种值,分别对应IP,ARP,RARP,帧尾是CRC检验码;
以太网帧中的数据长度规定最小46字节,最大1500字节,ARP和RARP数据包的长度不够46字节,要在后面补填充位。最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU,如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation);
MTU这个概念指数据帧中有效载荷的最大长度,不包括帧首部的长度。
3.以太网的工作原理:
以太网采用带冲突检测的载波帧听多路访问( CSMA/CD)机制。以太网中节点都可以看到在网络中发送的所有信息,因此,我们说以太网是一种广播网络;
以太网中的一台设备要传输数据必须经过一系列的步骤:
(1)监听信道上是否有信号在传输。如果有的话,表明信道处于忙状态,就继续监听,直到信道空闲为止。
(2)若没有监听到任何信号,就传输数据。
(3)传输的时候继续监听,如发现冲突则执行 退避算法,随机等待一段时间后,重新执行步骤1(当冲突发生时,涉及冲突的计算机会发送会返回到监听信道状态。注意:每台计算机一次只允许发送一个包,一个拥塞序列,以警告所有的节点)
(4)若未发现冲突则发送成功,所有计算机在试图再一次发送数据之前,必须在最近一次发送后等待9.6微秒(以10Mbps运行)。
二.关于MAC地址:
MAC地址是媒体访问控制,主要用来定义网络中设备的位置;在链路层进行数据帧传输时,主要是为了定位相邻的两个设备;
MAC地址用来识别数据链路层中相连的节点; 长度为48位, 及6个字节;一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19) ;
MAC地址的前24位是组织唯一标志符,后24位为扩展标志服;MAC地址在网卡出厂时就确定了, 不能修改;MAC地址通常是唯一的(虚拟机中的MAC地址不是真实的MAC地址, 可能会冲突; 也有些网卡支持用户配置MAC地址);
关于MAC地址和IP地址之间的区别和联系:
相同点:IP地址和MAC地址都是唯一的;
不同点:
(1)对于网络上的某一设备,其IP地址是基于网络拓扑结构设计出来的,因此改动IP地址很容易;而MAC地址是在出厂之前就固定在网卡上的不能改动;
(2)长度不同:IP地址为32位,MAC地址为48位;
(3)基于分配不同:IP地址的分配是基于网络拓扑,而MAC地址分配是基于生产商;
(4)寻址协议不同:IP地址专注于网络层,将数据包从一个网络转发到另外一个网络;而MAC地址专注于数据链路层,将一个数据帧从一个节点传送到相同链路的另一个节点;
三.关于MTU的认识:
MTU,最大传输单元,是指通信协议的某一层上面所能通过的最大数据报的大小(最大传输单元的大小和接口有关),大部分网络设备的MTU都是1500;当本机的MTU比网关的MTU大,大的数据包就会被拆开来传送,这样会产生很多数据包碎片,增加丢包率,降低网络速度;把本机的MTU设成比网关的MTU小或相同,就可以减少丢包;
1.MTU对TCP协议的影响:
TCP在传输层进行数据传输时(在三次握手的时候)双方协商MSS大小;在传输层自动进行数据分段;而这个MSS也取决于mtu的大小;双方会选择较小的一方最为传输大小;因此TCP数据在网络层不会进行数据分片;
2.MTU对UDP协议的影响:
udp在传输数据的时候数据不大于64K-IPhrlen-UDPhdrlen,都可以进行传输;但是若数据大小小于mtu大小,则会在网络层进行数据分片;
udp数据若被分片,则任意一个分片丢失或出错就会造成分片重组失败导致整个udp数据报丢弃;分片越多,危险越大;因此udp最好在应用层就将数据段大小分配合适;
3.问题: 已知MTU的大小是1500,则数据的最大长度是多少???
分两种情况:
TCP:MTU - IP - TCP=1500-20-20=1460
UDP:MTU - IP -UDP=1500-20-8=1472
四.ARP协议:
在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址,而数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。因此在通讯前必须获得目的主机的硬件地址。ARP协议就起到这个作用。
源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”,并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播),目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中。
每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项有过期时间(一般为20分钟),如 果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址
ARP数据报格式:
源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况 是多余的,但如果链路层是其它类型的网络则有可能是必要的;
硬件类型指链路层网络类型,1为以太网; 协议类型指要转换的地址类型,0x0800为IP地址; 硬件地址长度对于以太网地址为6字节; 协议地址长度对于和IP地址为4字节; op字段为1表示ARP请求,op字段为2表示ARP应答;