网络协议基础学习(五): 物理层、数据链路层

259 阅读7分钟

一、网络互联模型

  • 为了更好地促进互联网络的研究和发展, 国际标准化组织ISO在1985年定制了网络互联模型
    • ISO参考模型, 具有7层结构

image.png

二、请求过程

  • 网络通信, 从应用层向下传递, 每一层都会添加一些标记, 等到信息被接收后, 再一层层解析数据

image.png

三、网络分层

  • 网络每一层, 都使用了不同的协议

image.png

四、物理层

  • 物理层定义了接口标准、线缆标准、传输速率、传输方式等

image.png

1、数字信号、模拟信号

  • 模拟信号
    • 连续的信号, 适应长距离传输
    • 刚干扰能力差, 收到干扰时波形变形很难纠正

image.png

  • 数字信号
    • 离散的信号, 不适合长距离传输
    • 抗干扰能力强, 收到干扰时波形失真可以修复

image.png

2、数据通信模型

  • 局域网通信模型
    • 局域网范围小, 可以使用网线相互连接, 所以可以直接传输数字信号

image.png

  • 广域网通信模型
    • 广域网范围大, 长距离传输信号需要使用模拟信号

image.png

3、信道

  • 信道: 信息传输的通道, 一条传输介质上(比如网线)上可以由多条信道
    • 每一条信道都可以传输数据, 一条网线多条信道, 就可以传输多条信息流
  • 单工通信
    • 信号只能往一个方向传输, 任何时候都不能改变信号的传输方向
    • 比如无线电广播、有线电视广播
  • 半双工通信
    • 信号可以双向传输, 但必须交替进行, 同一时间只能往一个方向传输
    • 比如对讲机
  • 全双工通信
    • 信号可以同时双向传输
    • 比如手机(打电话, 听说同时进行)

五、数据链路层

  • 链路: 从1个节点到相邻节点的一段物理线路(有线或无线), 中间没有其他交换节点
    • 如下图: 集线器和路由器、路由器和路由器、路由器和交换机、交换机和计算机之间的物理线路
    • 但是计算机0-集线器0-路由器0, 是一个链路, 因为集线器的功能相当于网线, 不对数据进行处理, 只是用于传播

image.png

  • 数据链路: 在一条链路上传输数据时, 需要有对应的通信协议来控制数据的传输
    • 不同类型的数据链路, 所用的通信协议可能是不同的
      • 广播通信: CSMA/CD协议(比如同轴电缆、集线器等组成的网络)
      • 点对点信道: PPP协议(比如2个路由器之间的信道)
  • 数据链路层的3个基本问题
    • 封装成帧
    • 透明传输
    • 差错检验

1、封装成帧

  • 网络层传递下来的IP数据包, 在前后分别添加帧首部和帧尾部, 封装成一个数据帧

image.png

  • 帧(Frame)的数据部分
    • 就是网络层传递下来的数据包(IP数据包、Packet)
  • 最大传输单元MTU(Maximum Transfer Unit)
    • 每一种数据链路层协议都规定了所能够传送的帧的数据长度上限
    • 以太网的MTU为1500个字节

2、透明传输

image.png

  • 使用SOH(Start Of Header)作为帧开始符
  • 使用EOT(End Of Transmission)作为帧结束符

注意: 当数据部分存在EOT时, 检测时可能会提前认为帧结束, 后面得数据会被抛弃, 所以需要对原始数据进行处理

  • 数据部分一旦出现了SOH、EOT, 就需要进行转义

image.png

  • 在原始数据部分, 检查到SOH、EOT时, 在后面添加ESC作为填充字节, 如果原始数据有ESC, 也在后面添加一个ESC
  • 在解析数据时, 逐个字节判断, 如果发现相邻的两个字节是SOHESC、EOTESC、ESCESC, 那么就删除一个ESC, 这样就可以回复原始数据了

3、差错检验

  • 网络层将数据传到数据里链路层后, 会添加帧首部和帧尾部
    • 帧首部由数据链路层首部 + 帧开始符组成
    • 帧尾部由FCS + 帧结束符组成

image.png

  • 其中帧尾部中的FCS是由数据部分+首部计算得出的
  • 当帧被接收后, 会通过相同的方式计算FCS, 如果计算出的FCS和帧中的FCS不一致, 就说明在传输过程中数据发生了错误, 就要丢弃这条帧数据

4、CSMA/CD协议

  • CSMA/CD
    • 载波侦听/多路访问/冲突检测
    • 载波侦听: 监听线路上是否有信号传递
    • 多路访问: 每一个计算机都可以发出信号
    • 冲突检测: 检查收到的信号是不是自己发出后冲突反弹回来的

image.png

  • 使用了CSMA/CD的网络可以称为是以太网, 它传输的是以太网帧
    • 以太网帧的格式有: Ethernet V2标准、IEEE的802.3标准
    • 使用最多的是: Ethernet V2标准
  • 为了能够检测正在发送的帧是否产生了冲突, 以太网的帧至少要64字节
  • 用交换机组件的网络, 已经支持全双工通信, 不需要再使用CSMA/CD, 但它传输的帧依然是以太网帧
    • 所以, 用交换机组件的网络, 依然可以叫做以太网

5、Ethernet V2帧的格式

image.png

  • 网络层将IP数据包传递给数据链路层
  • 数据链路层会添加帧首部和帧尾部
    • 以太网帧: 首部 + 数据 + FCS
    • 帧首部添加: 目标MAC地址, 源MAC地址, 网络类型(例如: Ipv4Ipv6)
    • 帧尾部添加: FCS (使用帧首部计算得出)
    • 以太网的数据帧的长度最少是64字节, 所以IP数据包长度至少是: 64 - 6 - 6 - 2 - 6 = 46字节
    • IP数据包的最大长度是1500字节, 所以IP数据包的长度范围是 46 ~ 1500 字节
  • 以太网使用了曼彻斯特编码, 接收端接收帧过程只要发现没有信号跳变, 就认为帧结束了, 所以不再需要添加帧开始符帧结束符
  • 数据链路层将包装包的数据帧传递给物理层, 物理层会在帧首部前面插入8个字节的数据, 分别是7个字节的前同步码, 1个字节的帧开始界定符

6、Ethernet V2标准

  • 当IP数据包的长度小于46字节时
    • 数据链路层会在数据的后面加入一些字节填充
    • 接收端会将添加的字节去掉

image.png

  • 长度总结
    • 以太网帧的数据长度: 46 ~ 1500 字节
    • 以太网帧的长度: 64 ~ 1518 字节(目标MAC + 源MAC + 网络类型 + 数据 + FCS)
      • 1500 + 6 + 6 + 2 + 4 = 1518

7、网卡

image.png

  • 网卡接收到一个帧, 首先会进行差错校验, 如果校验通过则接收, 否则丢弃
  • Wireshark抓到的帧没有FCS, 因为他抓到的是差错校验通过的帧(帧尾的FCS会被硬件去掉)
    • Wireshark抓不到差错校验失败的帧
  • 我们可以安装 Wireshark 测试一下

image.png

  • 打开 Wireshark
  • 选择上网的网卡, 我使用WIFI连接网络, 所以选择 Wi-Fi: en1

image.png

  • 打开后类似下面这样

image.png

  • 然后打开终端, ping 一下百度
ping baidu.com

image.png

  • 可以在 Wireshark 抓到请求信息

image.png

  • 选择百度发送过来的信息

image.png

  • 可以看到 Ethernet II, 点击后如下图所示
    • 目标MAC地址: cc:c9:5d:04:e9:f7 (本机的MAC地址)
    • 源MAC地址: 9c:06:1b:f3:4e:01 (百度网卡的MAC地址)
    • 使用的网络类型: IPv4

image.png

  • Ethernet II中并没有FCS的信息, 就是因为网卡已经进行差错校验, 去掉了FCS
  • 选择下面的Internet Protocol Version 4, 就可以看到网络层传输的数据
    • 源IP地址: 200.181.38.251 (百度的IP地址)
    • 目标IP地址: 10.40.136.116 (本机的IP地址)

image.png

8、PPP协议 (Point to Point Protocol)

  • 在由交换机链接的局域网内, 传递数据使用CSMA/CD协议, 但是在路由器之间传递数据时, 使用的是PPP协议

image.png

  • 当数据传递到路由器后, 会将网络层的IP数据包以太网帧中取出来, 重新包装成PPP帧

  • Address字段: 图中的值是0xFF, 形同虚设, 点到点信道不需要源MAC、目标MAC地址
  • Control字段: 图中的值是0x03, 目前没有任何作用
  • Protocol字段: 内部用到的协议类型
  • 帧开始符、帧结束符

9、PPP协议-字节填充

image.png

  • 0x7E替换成0x7D5E
  • 0x7D替换成0x7D5D
  • 等到数据从路由器再次传递到以太网时, 又会从PPP帧变为以太网帧