网络原理-数据链路层

在这一层中和程序员距离比较遥远,除非是做交换机开发,否则不需要了解数据链路层

由AI可知:

数据链路层(Data Link Layer)是OSI(Open Systems Interconnection)七层网络模型中的第二层,它在物理层之上,网络层之下。数据链路层的主要功能是为网络层提供可靠的数据传输服务,即将网络层传来的数据可靠地传输到相邻的节点,同时为物理层提供服务。

数据链路层的主要职责包括:

  1. 帧定界和同步:确定数据帧的起始和结束,确保数据的准确传输。
  2. 物理寻址:在帧的头部加上硬件地址,即MAC地址,确保数据帧能够正确地发送到相邻节点。
  3. 流量控制:防止快速发送方压倒慢速接收方,确保数据链路的稳定性。
  4. 差错控制:检测和重传损坏或丢失的帧,确保数据的完整性。
  5. 访问控制:在多设备共享同一物理介质的网络中,控制设备对介质的访问。
  6. 帧校验序列FCS:通过循环冗余检查(CRC)等技术检测帧在传输过程中是否出现错误。

数据链路层的协议通常包括:

  1. 以太网(Ethernet):最常用的局域网技术之一,定义了数据链路层和物理层的标准。
  2. 点对点协议(PPP):用于点对点连接的数据链路层协议,支持多种网络层协议。
  3. 无线局域网(WLAN):如Wi-Fi,它在数据链路层定义了无线传输的方法。
  4. 帧中继(Frame Relay):一种用于连接计算机系统的面向分组的通信协议。
  5. HDLC(高级数据链路控制):一种面向比特的同步链路层协议,用于广域网通信。

数据链路层的帧结构通常包括:

  1. 帧同步:用于标识帧的开始和结束。
  2. 地址字段:包含发送方和接收方的MAC地址。
  3. 控制字段:包含用于流量控制和差错控制的信息。
  4. 数据字段:承载上层传递下来的数据。
  5. 校验序列:用于检测帧在传输过程中的错误。
  6. 帧结束标志:标识帧的结束。

数据链路层是网络通信中非常重要的一层,它确保了数据在物理介质上的可靠传输,并且为上层网络层提供了服务。

这一层的协议主要是

以太网协议:以太主要是物理学的概念

以太网,横跨数据链路层和物理层,平时使用的有线网络就属于是以太网,网线,光纤都属于以太网线

其中目的地址和源地址都为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.combaidu.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)

相关推荐
最数据5 分钟前
Linux或者Docker中时区查询和修改(差8小时问题)
linux·运维·服务器·docker·.net
mahuifa11 分钟前
ubuntu设置程序开机自启动
服务器·ubuntu·开机自启动
皓月盈江15 分钟前
Linux宝塔部署wordpress网站更换服务器IP后无法访问管理后台和打开网站页面显示错乱
linux·服务器·wordpress·无法访问wordpess后台·打开网站页面错乱·linux宝塔面板·wordpress更换服务器
网络安全King29 分钟前
[网络安全系列面试题] GET 和 POST 的区别在哪里?
网络·安全·web安全
KeyBordkiller30 分钟前
PVE相关名词通俗表述方式———多处细节实验(方便理解)
linux·服务器·网络
网络安全Ash32 分钟前
企业网络安全之OPENVPN
开发语言·网络·php
Deca~33 分钟前
《网络是怎样连接的》整体的总结
网络
scoone41 分钟前
解决Ubuntu 22.04系统中网络Ping问题的方法
linux·网络
与君共勉121381 小时前
Jenkins-Ansible 插件相关用法
linux·运维·ansible·jenkins
m0_519523101 小时前
Linux——环境变量
linux·运维·服务器