在这一层中和程序员距离比较遥远,除非是做交换机开发,否则不需要了解数据链路层
由AI可知:
数据链路层(Data Link Layer)是OSI(Open Systems Interconnection)七层网络模型中的第二层,它在物理层之上,网络层之下。数据链路层的主要功能是为网络层提供可靠的数据传输服务,即将网络层传来的数据可靠地传输到相邻的节点,同时为物理层提供服务。
数据链路层的主要职责包括:
- 帧定界和同步:确定数据帧的起始和结束,确保数据的准确传输。
- 物理寻址:在帧的头部加上硬件地址,即MAC地址,确保数据帧能够正确地发送到相邻节点。
- 流量控制:防止快速发送方压倒慢速接收方,确保数据链路的稳定性。
- 差错控制:检测和重传损坏或丢失的帧,确保数据的完整性。
- 访问控制:在多设备共享同一物理介质的网络中,控制设备对介质的访问。
- 帧校验序列FCS:通过循环冗余检查(CRC)等技术检测帧在传输过程中是否出现错误。
数据链路层的协议通常包括:
- 以太网(Ethernet):最常用的局域网技术之一,定义了数据链路层和物理层的标准。
- 点对点协议(PPP):用于点对点连接的数据链路层协议,支持多种网络层协议。
- 无线局域网(WLAN):如Wi-Fi,它在数据链路层定义了无线传输的方法。
- 帧中继(Frame Relay):一种用于连接计算机系统的面向分组的通信协议。
- HDLC(高级数据链路控制):一种面向比特的同步链路层协议,用于广域网通信。
数据链路层的帧结构通常包括:
- 帧同步:用于标识帧的开始和结束。
- 地址字段:包含发送方和接收方的MAC地址。
- 控制字段:包含用于流量控制和差错控制的信息。
- 数据字段:承载上层传递下来的数据。
- 校验序列:用于检测帧在传输过程中的错误。
- 帧结束标志:标识帧的结束。
数据链路层是网络通信中非常重要的一层,它确保了数据在物理介质上的可靠传输,并且为上层网络层提供了服务。
这一层的协议主要是
以太网协议:以太主要是物理学的概念
以太网,横跨数据链路层和物理层,平时使用的有线网络就属于是以太网,网线,光纤都属于以太网线
其中目的地址和源地址都为6个字节,也就是mac地址和物理地址,mac地址和ip地址,目的都是为了区分网络上的不同设备,最开始的时候,mac地址和IP地址是两伙人,独立各自提出的,mac地址有6个字节,目前来说还是够的,因此每个设备上可以认为是有唯一的mac地址,就像牛顿-莱布尼兹公式,后来这两个地址都保留下来了,但是给这两种地址,分配了不同的角色
物理地址,是在网卡出厂的时候就设置好的,原则上说,每个网卡的物理地址都是不相同的,因此物理地址也可以作为你主机的一种身份标识(绑定主机)
IP地址作用是支持整个传输过程转发,MAC的作用支持两个相邻节点之间的转发
举一个栗子:我在内蒙古我要回河北老家
从IP层面上,要进行路线规划
- 内蒙古->北京->河北
- 内蒙古->天津->河北
- 内蒙古->辽宁->北京->河北
具体执行的时候,需要从一个点到达另一个点,假如我走第一条路 内蒙古->北京->河北
内蒙古->北京:
- 源IP:内蒙古
- 目的IP:河北
- 源MAC:内蒙古
- 目的MAC:北京
北京->河北
- 源IP:内蒙古
- 目的IP:河北
- 源MAC:北京
- 目的MAC:河北
总结:IP就是长期目标,mac地址就是短期目标
报文格式
PAD:这里的ARP和RARP都不会携带业务上的载荷数据,只是针对转发数据的过程起到辅助效果
IP数据报:分用的时候,发现类型是0x0800的时候,此时就需要把这个数据交给网络层的IP协议了
1500(46-1500):此处的1500也称为MTU(和硬件结构相关联的),MTU这个东西对于不同的数据链路层协议是不同的,以太网是1500,还存在一些其他的网络,MTU不一定一样的,一个以太网数据帧,最大长度其实就是1500字节,IP协议的拆包组包,其实当IP数据包长度达到了1500字节,就会触发拆包组包了
ARP协议:是为了给每个路由器/交换机,建立一个"转发表"(不是路由表),这个表里就记载了IP地址->mac地址映射,表项只是包含,路由器/交换机周围的邻居设备
刚才所说到的转发数据过程中,先根据目的IP,确定接下来往哪里走,知道下一跳的IP(查路由表),根据下一跳的IP,查转发表,知道IP对应的MAC/端口是哪个,然后再发
这个东西的生成比较简单,该设备在局域网中,通过广播地址,发送ARP数据包,收到的设备,都会返回ARP响应,响应中就会包含每个设备,IP和MAC,设备的转发表就可以保存上述信息了,听起来好像是一个hash表之类的东西,但是实际上,这个表很可能是硬件实现的(不是hash这种在内存中的通件构成的表,而是直接通过硬件设备(转发芯片),通过这样的芯片里的一系列寄存器维护上述数据信息,这样的操作比软件实现要快很多)
DNS(域名解析系统)
IP地址,整数->点分十进制,域名就是一串单词,我们可以使用这一串单词来表示某个/某组IP地址了,sogou.com,baidu.com
上古时期,有一个专门的文件,能维护域名和IP的映射关系,hosts文件,这个文件至今存在,而且还有效,计算机访问各种域名,就会在这里进行查询,曾经很有用,现在不再使用了,之前每个人的电脑上,都会有一个这样的很大的文件,所有网站的域名对应的情况,这里的数据不方便更新,每天都有新的网站出现,也有旧的网站消亡,导致文件需要频繁更新
取而代之的是搭建了DNS服务器,把这样的映射关系,使用DNS服务器来保存,咱们的计算机上就不需要保存hosts了,如果要访问域名,就可以通过访问DNS服务器的方式,查询到对应的IP地址了,越来越多的设备都要上网,都要使用DNS服务器,DNS服务器能撑住吗?
客户端缓存
你的电脑尝试访问某个域名,得到了ip(记住了),下次再访问同一个域名的时候,就不会重新查询DNS服务器。,你每天上的就这么寥寥几个网站,但是这些网站访问此时都是很多的
分布式的方式
全世界各个地方,建设了很多DNS镜像服务器,世界上有很多的电信运营商(国内的联通,电信,移动),他们也会搭建DNS镜像服务器,此时你请求DNS服务器,只需要就近访问你这附近的镜像服务器即可,所有镜像服务器中存储的域名和ip的映射关系都是一样的,全世界一共有11个(13个)根域名服务器,其中大部分都是在美国,如果把某个国家所有的网站的域名从这里给删除,就可能导致整个国家网络瘫痪,IPv的DNS服务器系统和IPv4是相互独立的
引入DNS镜像解决了上述问题,但是引入了新的麻烦:如果某个区域的DNS服务器挂了,可能会对你这一片区域造成影响(网页打不开了)
可以制定特定的DNS服务器,也可以由机器自动配置
当前域名体系是'分级"的体系,例如www.baidu.com分为三级,www为三级域名,baidu为二级域名,com为一级域名,DNS服务器分组的方式,存储不同的域名服务器的,查询过程,先查询一级域名,然后二级三级(不是简单的hash表,而是多级hash)