一、网络互联模型
- 为了更好地促进互联网络的研究和发展, 国际标准化组织ISO在1985年定制了网络互联模型
- ISO参考模型, 具有7层结构
二、请求过程
- 网络通信, 从应用层向下传递, 每一层都会添加一些标记, 等到信息被接收后, 再一层层解析数据
三、网络分层
- 网络每一层, 都使用了不同的协议
四、物理层
- 物理层定义了接口标准、线缆标准、传输速率、传输方式等
1、数字信号、模拟信号
- 模拟信号
- 连续的信号, 适应长距离传输
- 刚干扰能力差, 收到干扰时波形变形很难纠正
- 数字信号
- 离散的信号, 不适合长距离传输
- 抗干扰能力强, 收到干扰时波形失真可以修复
2、数据通信模型
- 局域网通信模型
- 局域网范围小, 可以使用网线相互连接, 所以可以直接传输数字信号
- 广域网通信模型
- 广域网范围大, 长距离传输信号需要使用模拟信号
3、信道
- 信道: 信息传输的通道, 一条传输介质上(比如网线)上可以由多条信道
- 每一条信道都可以传输数据, 一条网线多条信道, 就可以传输多条信息流
- 单工通信
- 信号只能往一个方向传输, 任何时候都不能改变信号的传输方向
- 比如无线电广播、有线电视广播
- 半双工通信
- 信号可以双向传输, 但必须交替进行, 同一时间只能往一个方向传输
- 比如对讲机
- 全双工通信
- 信号可以同时双向传输
- 比如手机(打电话, 听说同时进行)
五、数据链路层
- 链路: 从1个节点到相邻节点的一段物理线路(有线或无线), 中间没有其他交换节点
- 如下图: 集线器和路由器、路由器和路由器、路由器和交换机、交换机和计算机之间的物理线路
- 但是
计算机0-集线器0-路由器0
, 是一个链路, 因为集线器的功能相当于网线, 不对数据进行处理, 只是用于传播
- 数据链路: 在一条链路上传输数据时, 需要有对应的通信协议来控制数据的传输
- 不同类型的数据链路, 所用的通信协议可能是不同的
- 广播通信: CSMA/CD协议(比如同轴电缆、集线器等组成的网络)
- 点对点信道: PPP协议(比如2个路由器之间的信道)
- 不同类型的数据链路, 所用的通信协议可能是不同的
- 数据链路层的3个基本问题
- 封装成帧
- 透明传输
- 差错检验
1、封装成帧
- 网络层传递下来的IP数据包, 在前后分别添加帧首部和帧尾部, 封装成一个数据帧
- 帧(Frame)的数据部分
- 就是网络层传递下来的数据包(IP数据包、Packet)
- 最大传输单元MTU(Maximum Transfer Unit)
- 每一种数据链路层协议都规定了所能够传送的帧的数据长度上限
- 以太网的MTU为1500个字节
2、透明传输
- 使用SOH(Start Of Header)作为帧开始符
- 使用EOT(End Of Transmission)作为帧结束符
注意: 当数据部分存在EOT时, 检测时可能会提前认为帧结束, 后面得数据会被抛弃, 所以需要对原始数据进行处理
- 数据部分一旦出现了SOH、EOT, 就需要进行转义
- 在原始数据部分, 检查到SOH、EOT时, 在后面添加ESC作为填充字节, 如果原始数据有ESC, 也在后面添加一个ESC
- 在解析数据时, 逐个字节判断, 如果发现相邻的两个字节是SOHESC、EOTESC、ESCESC, 那么就删除一个ESC, 这样就可以回复原始数据了
3、差错检验
- 网络层将数据传到数据里链路层后, 会添加帧首部和帧尾部
- 帧首部由数据链路层首部 + 帧开始符组成
- 帧尾部由FCS + 帧结束符组成
- 其中帧尾部中的FCS是由数据部分+首部计算得出的
- 当帧被接收后, 会通过相同的方式计算FCS, 如果计算出的FCS和帧中的FCS不一致, 就说明在传输过程中数据发生了错误, 就要丢弃这条帧数据
4、CSMA/CD协议
- CSMA/CD
- 载波侦听/多路访问/冲突检测
- 载波侦听: 监听线路上是否有信号传递
- 多路访问: 每一个计算机都可以发出信号
- 冲突检测: 检查收到的信号是不是自己发出后冲突反弹回来的
- 使用了CSMA/CD的网络可以称为是以太网, 它传输的是以太网帧
- 以太网帧的格式有: Ethernet V2标准、IEEE的802.3标准
- 使用最多的是: Ethernet V2标准
- 为了能够检测正在发送的帧是否产生了冲突, 以太网的帧至少要
64
字节 - 用交换机组件的网络, 已经支持全双工通信, 不需要再使用CSMA/CD, 但它传输的帧依然是以太网帧
- 所以, 用交换机组件的网络, 依然可以叫做以太网
5、Ethernet V2帧的格式
- 网络层将IP数据包传递给数据链路层
- 数据链路层会添加帧首部和帧尾部
- 以太网帧:
首部 + 数据 + FCS
- 帧首部添加:
目标MAC地址
,源MAC地址
,网络类型
(例如:Ipv4
、Ipv6
) - 帧尾部添加:
FCS
(使用帧首部计算得出) - 以太网的数据帧的长度最少是
64
字节, 所以IP数据包长度至少是:64 - 6 - 6 - 2 - 6 = 46
字节 - IP数据包的最大长度是
1500
字节, 所以IP数据包的长度范围是46 ~ 1500
字节
- 以太网帧:
- 以太网使用了
曼彻斯特编码
, 接收端接收帧过程只要发现没有信号跳变, 就认为帧结束了, 所以不再需要添加帧开始符
和帧结束符
- 数据链路层将包装包的数据帧传递给物理层, 物理层会在帧首部前面插入8个字节的数据, 分别是7个字节的
前同步码
, 1个字节的帧开始界定符
6、Ethernet V2标准
- 当IP数据包的长度小于
46
字节时- 数据链路层会在数据的后面加入一些字节填充
- 接收端会将添加的字节去掉
- 长度总结
- 以太网帧的数据长度: 46 ~ 1500 字节
- 以太网帧的长度: 64 ~ 1518 字节(目标MAC + 源MAC + 网络类型 + 数据 + FCS)
- 1500 + 6 + 6 + 2 + 4 = 1518
7、网卡
- 网卡接收到一个帧, 首先会进行差错校验, 如果校验通过则接收, 否则丢弃
- Wireshark抓到的帧没有FCS, 因为他抓到的是差错校验通过的帧(帧尾的FCS会被硬件去掉)
- Wireshark抓不到差错校验失败的帧
- 我们可以安装 Wireshark 测试一下
- 打开 Wireshark
- 选择上网的网卡, 我使用
WIFI
连接网络, 所以选择Wi-Fi: en1
- 打开后类似下面这样
- 然后打开终端, ping 一下百度
ping baidu.com
- 可以在 Wireshark 抓到请求信息
- 选择百度发送过来的信息
- 可以看到
Ethernet II
, 点击后如下图所示- 目标MAC地址:
cc:c9:5d:04:e9:f7
(本机的MAC地址) - 源MAC地址:
9c:06:1b:f3:4e:01
(百度网卡的MAC地址) - 使用的网络类型:
IPv4
- 目标MAC地址:
- 在
Ethernet II
中并没有FCS
的信息, 就是因为网卡
已经进行差错校验
, 去掉了FCS
- 选择下面的
Internet Protocol Version 4
, 就可以看到网络层传输的数据- 源IP地址:
200.181.38.251
(百度的IP地址) - 目标IP地址:
10.40.136.116
(本机的IP地址)
- 源IP地址:
8、PPP协议 (Point to Point Protocol)
- 在由交换机链接的局域网内, 传递数据使用
CSMA/CD
协议, 但是在路由器之间传递数据时, 使用的是PPP
协议
- 当数据传递到
路由器
后, 会将网络层的IP数据包
从以太网帧
中取出来, 重新包装成PPP帧
- Address字段: 图中的值是
0xFF
, 形同虚设, 点到点信道不需要源MAC、目标MAC地址 - Control字段: 图中的值是
0x03
, 目前没有任何作用 - Protocol字段: 内部用到的协议类型
- 帧开始符、帧结束符
9、PPP协议-字节填充
- 将
0x7E
替换成0x7D5E
- 将
0x7D
替换成0x7D5D
- 等到数据从路由器再次传递到以太网时, 又会从
PPP帧
变为以太网帧