本篇文章接着介绍四层协议中的物理层和数据链路层。出发……
物理层(或称物理层,Physical Layer)是计算机网络OSI模型中最低的一层。物理层规定:为传输数据所需要的物理链路创建、维持、拆除,而提供具有机械的,电子的,功能的和规范的特性。简单的说,物理层确保原始的数据可在各种物理媒体上传输。它定义了接口标准、线缆标准、传输速率、传输方式等。
数字信号
(Digital Signal):1、它是离散的信号,不适合长距离传输。2、它的抗干扰能力强,受到干扰后,波形失真是可以修复的。
模拟信号
(Analog Signal):1、它是连续的信号,适合长距离传输;2、它的抗干扰能力差,受到干扰时波形变形后很难修复。
数据通信的类型分为两种:局域网和广域网的情况。
局域网通信模型。运用在小型网络中,比如教室、办公室等。
补充:网线(双绞线)的长度不能超过100米,超过之后信号会有所衰减。
广域网通信模型。在很久以前,家里上网时,牵的网线是搭在电话线上的,现在搭在电话线上的应该很少见了,这种情况用的猫也叫调制解调器。这种猫之间传输的是模拟信号; 而随着科技的进步,现在基本上都是光纤入户了,光纤牵到家里就要使用到光猫(光电转换器),光猫之间传输的是光信号。
信道:信息传输的通道,一条传输介质上可以有很多条信道。比如网线。
链路:指的是从1个节点到相邻节点的一段物理线路(有线或无线),中间没有其他交换节点。如下图:
数据链路:指的是在一条链路上传输数据时,需要有对应的通信协议来控制数据的传输。而不同类型的数据链路,所用的通信协议可能也是不同的。比如:1、广播信道:CSMA/CD协议。运用在同轴电缆、集线器等组成的网络。2、点对点信道:PPP协议。运用在路由器与路由器之间的信道。
如上图,一个数据帧的大致结构就是这样。
IP数据包
,而这个数据包在帧这一层,是有一定的大小的,即上图中的MTU
(Maximum Transfer Unit),也称为最大传输单元。 而在每一种数据链路层协议中,规定的这个MTU的上限可能是不同的。比如以太网帧规定的MTU上限是1500字节。而使用上述两个开始符和结束符,可能会存在一定的问题。就如上图所示,假设由网络层传递下来的数据部分里面就含有EOT,则接收端在接收数据的时候,可能就会出现上图所示的情况,导致误认为有一部分无效帧,从而被丢弃。
这种情况,在日常开发中也很常见,比如Windows环境下的路径,即可以用"/“,也可以用”\",后者就容易使其变成转义字符,所以就需要写两个\的。
在这里也是一样的,在数据部分的EOT,使其转义即可。
FCS:是帧尾的一部分,它是根据帧的数据部分+数据链路层首部计算出来的。数据链路层首部是帧头的一部分。
接收端在接收到数据后会计算出FCS,并进行比较,如果发现不一致,网卡就会把这条信息丢弃,这种情况下,抓包工具是抓不到的。
在数据经过不同的数据链路层时,对应的层会把之前的帧开始和帧结束符替换为自己的协议帧。
CSMA/CD(Carrier Sense Multiple Access with Collision Detectio):载波侦听多路访问/冲突检测。运用在同轴电缆、集线器等网络上,上文提及过。
而使用了CSMA/CS 的网络称为以太网,它传输的是以太网帧。以太网帧的格式有两种:
当然,使用最多的就是Ethernet V2标准。用交换机组建的网络,已经是支持全双工通信,不需要再使用CSMA/CD,但它传输的帧依然是以太网帧。
为了能够检测到正在发送的帧是否产生了冲突,所以以太网的帧至少是需要64
字节的。
如上图:
首部:由目标MAC地址+源MAC地址+网络类型(IPv4、IPv6)。总共是14个字节。
以太网帧是由首部+数据部分+FCS组成,至少是64字节。而FCS需要占用4个字节,所以数据部分最少就需要46字节(64 - 14 - 4)。
综上,以太网帧的数据部分长度是46 — 1500字节;整个以太网帧的长度是64 — 1518字节。
当数据部分不足46字节时,也就是说整个以太网帧的长度不足64字节时。数据链路层会在数据的后面补充一些字节进行填充,接收端拿到数据后,会自动去除多余的部分。
PPP协议:运用在路由器与路由器之间的信道上。
Frame(F): PPP协议是有帧开始和结束符的,值是0x7E。
Address(A): 图中的值是0xFF,形同虚设,点到点信道不需要源MAC、目标MAC地址
Control©:图中的值是0x03,目前没有什么作用
Protocol(协议): 内部用到的协议类型(PPP协议的子分支协议)
虽然PPP帧和以太网帧的协议不一样,但是网络层的数据是一样的,仅仅是帧的首部和尾部发生了变化。
切记:路由器和路由器直连时是PPP帧,如果在两个路由器之间加一个交换机,就不是PPP帧了,而是以太网帧。
因为路由器之间是点对点,不需要知道对方的MAC地址,但是以太网帧是广播信道,每一台设备必须确认自己是否是接收方。
PPP帧的字节填充:
0x7E -> 0x7D5E。 0x7D -> 0x7D5D。