网络互联模型
为了更好的促进互联网络的研究和发展,国际标准化阻止ISO在1985年制定了网络互联模型
- OSI参考模型是官方给出的模型,其具有七层结构,但只停留在理论上
- TCP/IP协议是现在各大厂商都在用的模型,实战性很强,具有4层结构
- 但由于网络接口层对应的东西比较重要,所以我们在学习研究的时候会对其进行拆分——物理层和数据链路层,总共具有5层结构
请求过程
客户端发送数据时,数据一定会经过5层,每一层都会对其进行独特的打包封装,少了一层都不可以。服务器接收到改数据时,也是一层层的将数据进行拆包和解析,这样才能拿到真实的数据。也就是说我们数据包传输的过程中会经过层层封装和层层解封
例如:如果少了数据链路层,那么在数据包中就没有了原MAC地址和目标MAC地址,转发的设备就不知道把该数据包传递给谁了
网络分层
在每一层中使用的协议不同,所传递的数据名称也不相同。比如在应用层中,可能会使用功能FTP、HTTP等协议,当前数据被称作报文。而在数据链路层,其可能用的协议就是CSMA/CD、PPP协议,在该层的数据被称为数据帧
物理层
物理层定义了接口标准、线缆标准、传输速率、传输方式等
数字信号和模拟信号
模拟信号
- 信号是连续的,适合长距离传输
- 抗干扰能力差,受到干扰时波形变形很难纠正
数字信号
- 离散的信号,不适合长距离传输
- 抗干扰能力强,受到干扰时波形失真可以修复
数据通信模型
局域网通信模型
- 通常局域网下的设备都是用集线器或者是交换机进行连接
- 网线传递的是数字信号,而且其长度不能超过100米,如果局域网范围想要设置的很大,那么就需要不断的用网线和交换机进行连接
广域网通信模型
广域网的范围很大,由于数字信号是不适合长距离传输的,所以需要使用调制解调器(我们常说的猫、光猫等等,用于帮助我们将数字信号、光信号、模拟信号相互转化)
信道
信道
信息传输的通道,一条传输介质上(比如网线)上可以有多条信道
单工通信
- 信号只能往一个方向传输,任何时候都不能改变信号的传输方向
- 比如无线电广播、有线广播电视
半双工通信(同轴电缆、集线器组建的网络)
- 信号可以双向传递,但必须是交替进行,同一时间只能往一个方向传输
- 比如对讲机
全双工通信(交换机组成的网络)
- 信号可以同时双向传输
- 比如手机(打电话,听说同时进行)
数据链路层
链路
从一个结点到相邻结点的一段物理线路(有线或无线),中间没有其它交换结点
- 与集线器相连的设备算是在同一个链路中的,因为集线器是没有智商的,可以把它看成是一根网线
数据链路
在一条链路上传输时,需要有对应的通信协议来控制数据的传输
-
不同类型的数据链路,所用的通信协议可能是不同的
- 广播信道:CSMD/CD协议(比如同轴电缆、集线器等组成的网络)
- 点对点信道:PPP协议(比如2个路由器之间的信道)
数据链路层的三个基本问题
- 封装成帧
其会在网络层传递下来的数据包的基础上加上首部和尾部,这样数据包就变成了数据帧
- 帧的数据部分就是网络层传递下来的数据包(IP数据包,因为网络层会将原IP地址和目标IP地址添加进去)
- 最大传输单元MTU
-
- 每一种数据链路层呢个协议都规定了所能够传送的帧的数据长度上限
- 以太网的MTU为1500字节,暂时可以理解为刚刚提到的CSMD/CD协议
注意:数据链路层使用不同的协议,给IP数据包封装的方式——给数据包添加的帧首部是不一样的,所以说在一整个数据传输的过程中,不同链路中的封装方法可能有差异,但是他们里面的数据也就是数据包是一样的
- 透明传输
虽然数据帧中有帧开始符和帧结束符,但他们也只不过是一个字节或者一个标识而已,所以可能在数据部分存在与他们一直的数据,这样就可能会导致扫描数据的时候出错
- SOH是帧开始符
- EOT是帧结束符
数据部分一旦出现了SOH、EOT、ESC,就需要在他们的前面加上个ESC转义字符,这样就可以识别对应的标识符到底有没有帧开始或结束的意思,不过下一个结点接受数据的时候肯定要按照原来的规则去除转义字符
- 差错检验
数据帧的首部包括了数据链路层首部和帧开始符,尾部包括了FCS和帧结束符
- FCS是根据数据部分 + 首部计算得出的
我们的数据在信道上进行传输的时候如果受到一些干扰信号,有可能会失真,比如说原先数字信号中某个数字为1的,变成了0,那接受方怎么知道数据有没有问题呢?
数据发送方会拿到帧的数据部分和数据链路层的首部计算出一个值,这个值就是图中的FCS。接收方拿到值之后,对方会根据同样的方式计算一遍,然后拿这个计算出的值和数据帧中的FCS进行比较
- 如果发现数值是一样的,那么说明数据在传输过程中是没有问题的,网卡会将这个数据传递给上一层
- 如果计算值和FCS不一样,那就说明数据在传输过程中出现了问题,网卡就会把这个包丢弃
CSMA/CD协议
CSMA/CD协议称为载波侦听多路访问/冲突检测,其主要用在集线器和同轴电缆中
- 载波侦听就是去监听当前的线路上有没有数据在发送
- 冲突检测意思就是如果两台通过集线器相连的设备一起向对方发送请求,由于集线器是半双工通信的,所以两个数据包就会相撞,然后弹回来,CSMA/CD协议可以知道回来的数据是正常响应的还是由于冲突弹回的
- 使用了CSMA/CD协议的网络可以称为是以太网,它传输的是以太网帧,其遵循Ethernet V2格式
- 为了检测正在发送的帧是否产生了冲突,以太网的帧至少要64字节
- 用交换机组建的网络已经支持全双工通信,不需要再使用CSMA/CD协议,但它传输的帧依然是以太网帧,所以用交换机组建的网络,依然可以叫做以太网
Ethernet V2帧的格式
首部内容包括目标MAC地址、源MAC地址和类型(IPv4或IPv6),尾部是FCS。但我们会发现下面的图中怎么没有帧开始符和帧结束符呢?
因为以太网中使用的编码可以使其用其他的方式判断这个帧有没有结束
在物理层的时候会对数据帧插入8个字节,包括前同步码和帧开始定界符
- 首部:目标MAC + 源MAC + 网络类型
- 以太网帧:首部 + 数据 + FCS
- 因为之前说过以太网帧的长度至少是64字节,除去头部的6个字节的目标MAC地址、6个字节的源MAC的地址、2个字节的网络类型和4个字节的FCS外,数据的长度至少是 64 - 6 - 6 - 2 - 4 = 46 字节
当数据部分小于46字节时
- 数据链路层会在数据的后面加入一些字节填充
- 接收端会将添加的字节去掉
以太网帧长度总结:
- 以太网帧的数据长度:46~1500字节(1500字节是数据包对应的最大传输单元MTU)
- 以太网帧的长度:64~1518字节(因为以太网帧的长度是数据的长度加上头部和尾部的18个字节)
PPP协议
- Address字段:图中的值是0xFF,形同虚设,因为点到点通信不需要源MAC、目标MAC地址
- Control字段:图中的值是0x03,目前没有什么作用
- Protocol字段:内部用到的协议类型
- 帧开始符,帧结束符:0x7E
如果IP数据包中的数据和帧开始符和帧结束符冲突了,那么其内部会做个替换
网卡
网卡是工作在物理层和数据链路层的,其主要工作有
- 物理层:物理连接和数据信号同步、数据的编码与解码
- 数据链路层:帧的封装与拆封、帧的差错校验、介质访问控制
-
网卡接收到一个帧,首先会进行差错校验
- 差错校验不通过,直接丢弃
- 如果校验通过,则接收并取出掉尾部的FCS后传递给上一层
- Wireshark(一个抓包工具)抓到的帧没有FCS,因为它抓到的是差错校验通过的帧(帧尾的FCS会被硬件去掉)