目录
一. 基本概念
二. 以太网
1. MAC地址
2. 以太网帧格式
三. 局域网通信原理
媒体访问控制
交换机
MTU
四. ARP协议
ARP数据报格式
编辑
五. 跨网络通信流程
结束语
数据链路层介于物理层和网络层之间,最基本的服务是将源自物理层来的数据可靠地传输到相邻节点的目标主机的网络层,主要通过物理介质(如以太网,Wi-Fi等)将数据分割成帧,并在相邻节点之间进行传输。
链路(Link):一个节点到另一个相邻节点的一段物理线路,中间没有任何其他节点。链路由传输介质和物理设备组成,传输介质主要有双绞线,光纤,微波。在两个节点进行通信的时候,链路只是一条完整通信路径的一部分
数据链路(Data Link):把实际控制数据传输协议的硬件和软件加到链路上就构成了数据链路
补充:报文在传输层叫数据段(Segment),在网络层叫数据包(Packet),在数据链路层叫做数据帧(Frame)
数据链路层的功能包括:
数据链路层的协议有很多种,常见的有以太网(Ethernet),无线局域网(Wi-Fi)和点对点协议(PPP)等。不同协议适用于不同的网络环境和需求
MAC地址和IP地址的区别
1. 范围和层次
2. 分配方式
3. 使用场景
在路由转发的过程中,IP地址描述的是路途总体的起点和终点,MAC地址描述的是路途上的每一个区间的起点和终点
举例:
如果主机A想访问服务器B
所以MAC地址用于局域网内通信,IP地址用于广域网通信,即起点和终点
以太网的帧格式如下所示:
两个问题
1. 报头和有效载荷如何分离?
MAC帧的报头是固定长度,即前14字节为报头,后续为有效载荷
2. 有效载荷如何向上交付?
根据报头的类型字段,0800代表IP协议;0806代表ARP请求/应答;0835代表RARP请求/应答。以此交付对应的上层
假设有如下子网,有若干设备
如果主机A想和主机D通信,那么MAC帧的报头字段的源地址为macA,目的地址为macD。如果有效载荷为ip数据包,那么类型为0800
数据帧发送到网络中,所有该局域网的主机都会收到该数据帧,但其数据链路层解包发现目的地址不是自己的时候,会直接在数据链路层丢弃该报文。如此就只有主机D会解包,提取有效载荷,向上交付ip数据包
补充:网卡可以设置混杂模式,不论是不是发给自己的数据帧,都向上交付,这就做到了抓包
如此,同一时刻,局域网中只允许有一个数据帧传输。如果多个数据帧同时传输,则会产生数据碰撞,导致数据重叠错误。为此需要进行碰撞避免——媒体访问控制
在共享介质的网络中,多个设备可以同时发送数据,但如果两个设备在同一时间发送数据,会导致碰撞,造成数据丢失和网络拥塞。
为了避免碰撞,数据链路层采用了一些技术和协议。最常见的就是CSMA/CD和CSMA/CA
CSMA/CD(载波监听多点接入/碰撞检测)
CSMA/CA(载波监听多点接入/碰撞避免)
交换机左侧的主机也可以和右侧的通信,交换机负责数据转发,如果左侧出现数据碰撞,交换机可以防止数据碰撞影响右侧的网络
如果数据帧太长,那么在碰撞域中存在的时间就相对更长,那么碰撞的概率就更大。但数据帧太小,发送效率又低,所以数据帧的长度需要综合考虑
所以以太网帧中的数据长度规定最小46字节,最大1500字节。所以数据帧最短为60字节,最长为1514字节。如果ARP数据包的长度不够46字节,要在后面填补
最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU大小
MTU对IP协议的影响
由于数据链路层MTU的限制,对于较大的IP数据包要进行分片
详细分片参看【计算机网络】网络层——IP协议的分片和组装部分
查看硬件地址和MTU大小
Linux下使用ifconfig命令
ARP协议并不是数据链路层的协议,而是介于数据链路层和网络层之间的协议
ARP协议建立了主机 IP地址 和 MAC地址 的映射关系
ARP协议过程
有如下局域网
如果主机A想和主机B通信,但第一次通信主机A不知道主机B的MAC地址,因此需要广播ARP请求来获取主机B的MAC地址。ARP请求如下:
因为不知道主机B的MAC地址,所以使用广播,广播的ARP请求,目的MAC地址为全F(FF:FF:FF:FF:FF:FF)
局域网内的所有主机都会收到这个ARP请求,网卡识别目的MAC地址为全F,广播数据,需要向上交付,再根据帧类型识别是ARP请求/响应。所以向上交付给ARP协议。
ARP协议先看op字段,为ARP请求,再看目的IP地址,除主机B外,其他主机发现不是给自己的,就在ARP层丢弃报文,只有主机B会返回ARP响应,报文如下:
主机A收到ARP响应后,还会将主机B的IP地址和MAC地址的映射关系缓存在ARP缓存表中,下次访问主机B时会根据IP地址查表,有则使用,没有则先发送ARP请求获取MAC地址。
1. 应用层:应用程序向操作系统发出请求,例如在浏览器中输入网址——域名解析DNS,获取目标服务器的IP地址。
2. 传输层:操作系统将应用程序的请求封装成传输层数据段(Segment),使用默认的端口号来建立与服务器的连接(三次握手),例如,HTTP为80,HTTPS为443。通常使用TCP协议来提供可靠的数据传输
3. 网络层:操作系统将传输层的数据段封装成IP数据包(Packet),并加上源IP地址和目标IP地址。计算机A需要先判断目标主机是否在同一局域网:
两个方法二选一即可
如果是同一局域网,那么可以直接通信,不需要路由器
如果目标IP是公网服务器,则操作系统会将数据包发送到默认网关,也就是路由器
4. 数据链路层:操作系统将IP数据包封装成数据链路层数据帧(Frame),并加上MAC地址和目标MAC地址。
如果是同一局域网主机,那么首先查找ARP缓存表看是否有IP地址和MAC地址的映射关系,有则直接使用,没有还需要先发送ARP请求获取目的主机的MAC地址,收到ARP响应后将映射关系保存在ARP缓存表中,然后开始网络通信
如果是外网主机,那么需要进行路由转发和NAT路由器替换,需要先将数据发送给路由器,目的MAC地址是路由器的MAC地址
5. 物理层:数据链路层数据帧通过物理介质(例如以太网)被发送到路由器。路由器会解析数据帧,根据目标IP地址选择下一跳路由器,并重新封装数据帧。这就是路由转发。其中源MAC地址和目标MAC地址一直改变,源IP也一直改变(被替换成出口路由器的IP地址),目的IP地址不变。源IP(私有IP)最终会被转化为NAT路由器的公网IP,数据也就被发送到了公网。
每一次IP地址的替换,路由器都会维护转换记录,保存在NAPT表中
6. 重复路由转发和IP地址替换,最后数据到达公网的目的主机,服务器解包,分析需求,返回响应,重复上述操作。在数据返回的时候,根据NAPT表中的转换记录,将目的IP逐步替换,从最开始的NAT路由器的IP地址,换成内网的路由器的IP地址,最后到达内网主机所在子网的出口路由器。出口路由器根据NAPT表,将目的IP地址填写为私有IP,数据成功返回——浏览器显示网页内容
需要注意的是,这只是简单的情况,实际上还有很多因素会影响内网主机访问公网服务器的过程,例如网络拓扑结构,路由策略,防火墙等。不同的应用场景和网络环境可能会有不同的细节和差异
本篇博客到此结束,感谢看到此处。
欢迎大家纠错和补充
如果觉得本篇文章对你有所帮助的话,不妨点个赞支持一下博主,拜托啦,这对我真的很重要。