数据链路层主要是交换机的开发,涉及到的核心协议--以太网协议
数据链路层--以太网
以太网是数据链路层+物理层的协议,但凡是通过网线这样的方式上网,走的协议就是以太网
wifi 802.11
5G这里底层的网络协议栈是另一套,和TCP/IP不是同一个体系
以太网数据帧格式

这里的地址不是IP地址,而是mac地址(物理地址)
什么是mac地址
MAC地址,即Media Access Controller Address 用于标识网络设备的硬件物理地址
主机具有一个或多个网卡,路由器具有两个或两个以上网卡,其中每个网卡都有唯一一个的MAC地址
网络通信,即网络数据传输,本质上是网络硬件设备,将数据发送到网卡上,或者从网卡接受数据
硬件层面,只能基于MAC地址识别网络设备的网络物理地址
ps:1.MAC地址用来识别数据链路层中相连的结点
2.长度为48位,即6个字节,一般用16进制数加上冒号的形式来表示
3.在网卡出厂时就确定了,不能修改.虚拟机种的MAC地址并不是真实的MAC地址,可能会冲突,也有些网卡支持用户配置MAC地址
我们可以在cmd上通过ipconfig /all 的命令来查看MAC地址
MAC比IP地址多了6w倍,mac地址每个网卡都会有唯一的mac地址(MAC可以作为一个电脑的身份标识)
IP地址和MAC地址的区别?
其实理论上来说,有一组地址就够用了,但由于最初构建网络协议和构建数据链路层协议的人不是一帮人,IP专门给网络层使用,MAC专门给数据链路层使用
IP在网络层使用,关注于整个网络路径的转发传输过程
MAC是在数据链路层使用,关注转发的细节,两个相邻设备之间的转发(具体转发过程中两个路由器/交换机)
类型字段有三种值,类型不同,载荷的数据格式就不同(分别是IP,ARP,PRRP)
载荷部分:最大长度是1500个字节,IP数据报,报头16位长度,最多为64KB
网络传输过程中,网络这一层,转发是要根据MAC
ARP不是传输业务数据的,而是打辅助的协议 功能是根据IP地址得到相应的MAC地址
帧末尾是CRC校验码
认识MTU
MTU相在数据链路层这里要求更高,1KB多一点,存不下了IP数据当于发快递时对包裹尺寸的限制,这个限制是不同数据链路对应的物理层,产生的限制
在数据链路层这里要求更高,1KB多一点,存不下了IP数据
这里载荷部分的最大值称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU
MTU对IP协议的影响
由于数据链路层MTU限制,对于较大的IP数据报要进行分包
一旦分包后的小包中任意一个小包丢失,接收端的重组就会失败,但是IP层不会负责重新传输数据

MTU对UDP协议的影响
一旦UDP携带的数据超过1472(1500-20(IP首部)-8(UDP首部)),那么就会在网络层分成多个IP数据报.这多个IP数据报有任意一个丢失,都会引起接收端网络层重组失败,那么这就意味着,如果UDP数据报在网络层被分片,整个数据被丢失的概率就大大增加了
MTU对TCP协议的影响
TCP的一个数据报也不能无限大,还是受限于MTU,TCP单个数据报的最大消息长度,称为MSS(Max Segment Size)
TCP在建立连接的过程,通信双方会进行MSS协商
最理想的情况下,MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然受限于数据链路层的MTU)
双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值,然后双方得知对方的MSS值以后,选择较小的作为最终的MSS
MSS的值就是在TCP首部的40字节变成选项中(kind=2)

ARP协议
ARP不是一个单纯的数据链路层的协议,而是一个介于数据链路层和网络层之间的协议
ARP协议的作用
ARP协议建立了主机IP地址和MAC地址的映射关系
在网路通讯时.源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址
数据报首先是被网卡接受到再去处理上层协议的,如果接收到的数据包的硬件地址和本机不符,则直接丢弃
因此,通讯之前必须要获得目的主机的硬件地址
ARP协议的工作流程

1.源主机发送ARP请求,询问"IP地址为...的主机的硬件地址是多少",并将这个请求广播到本地网段(以太网首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播)
2.目的主机接受到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中
3.每个主机都维护一个ARP缓存表,可以通过arp-a命令来查看,缓存表中的表项一般有过期时间(一般为20min),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址
应用层重点协议-DNS
DNS 即Domain Name System ,域名系统,DNS是一整套从域名映射到IP的系统
域名解析系统 网络上的服务器,都是有IP地址的
域名:一串单词,计算机会自动把这串单词,翻译成IP地址
最初的时候DNS是通过hosts文件来实现映射的,现在已经不用,hosts文件维护太复杂了,现在把hosts文件中的内容提取出来,单独放到一个服务器上就是DNS
用户的电脑访问某个位置的时候,就会先查询DNS服务器,把域名对应的IP拿到,再真正访问服务器
如果每次发起请求,都要先访问DNS,很复杂,服务器承担的压力很大,如何解决呢?
1.缓存机制
2,DNS服务器不止有一个,存储原始数据的DNS服务器称之为"DNS根服务器",各种网络运营商,可以搭建"DNS镜像服务器"
全世界只有11个DNS根服务器,大部分都在美国人手里,这也是我国大力发展IPv6的很重要的原因