网络分层

网络互连模型

  • 为了更好的促进互联网的研究和发展,国际标准组织 ISO 在1985年制定了网络互连模型
    • OSI (Open System Interconnect Reference Model), 具有7层结构

屏幕快照 2020-10-27 下午5.08.52

  • 应用层
    • 协议 : FTP,HTTP,SMTP,DNS,DHCP
    • 报文,用户数据
  • 传输层
    • 协议:TCP,UDP
    • 段(Segments)
  • 网络层
    • IP,ARP,ICMP
    • 包(Packets)
  • 数据链路层
    • CSMA,CD,PPP
    • 帧(Frames)
  • 物理层
    • 比特流

物理层

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

屏幕快照 2020-10-27 下午5.20.58

数字信号,模拟信号

模拟信号(Analog Signal)

  • 连续的信号,适合长距离传输
  • 抗干扰能力差,受到干扰时波形变形很难纠正

数字信号(Digital Signal)

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

数据通信模型

  • 局域网通信模型
    • PC 通过网线传输数字信号与集线器/交换机通信
    • 另一台PC同样通过这种方式与集线器/交换机通信。 进而实现两台计算机通信
    • 注意网线不能超过100米
  • 广域网通信模型
    • PC 通过网线与调制解调器(猫)通信 (传输数字信号)
    • 调制解调器通过电话线与另外一个调制解调器通信 (传输模拟信号)
    • 再由调制解调器将模拟信号转换问数字信号
    • 注意光纤的使用光电调制解调器

信道(Channel)

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

数据链路层

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

数据链路层 - 封装成帧

屏幕快照 2020-10-27 下午5.37.21

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

数据链路层 - 透明传输

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

会出现如下问题 :

当数据部分出现EOT时,部分数据会被当作无效帧而丢弃

屏幕快照 2020-10-27 下午5.42.17

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

屏幕快照 2020-10-27 下午5.44.06

数据链路层 - 差错校验

  • FCS是根据数据部分 + 首部计算得出的屏幕快照 2020-10-27 下午5.54.26

CSMA/CD协议

  • CSMA/CD (Carrier Sense Multiple Access with Collision Detection)
    • 载波侦听多路访问 / 冲突检测
  • 使用了 CSMA/CD的的网络可以成为以太网(Ethenet), 它传输的是以太网帧
    • 以太网帧的格式有: Ethernet V2标准,以太网的帧至少64字节
    • 用交换机组建呢的网络,现在已经支持全双工通信,不再需要使用CSMA/CD,但它传输的帧依然是以太网帧
      • 所以,用交换机组建的网络,依然可以称为以太网

Ethernet V2帧的格式

屏幕快照 2020-10-27 下午6.19.39

  • 首部 : 目标MAC + 源MAC
  • 以太网帧 : 首部 + 数据 + FCS
  • 数据的长度至少是: 64 -6 -6 -2 - 4 = 46字节
  • 当数据部分的长度小于46字节时
    • 数据链路层会在数据的后面加入一些字节填充
    • 接收端会将添加的字节去掉
  • 长度总结
    • 以太网帧的数据长度 : 46 - 1500字节
    • 以太网帧的长度 : 64 - 1518字节(目标MAC + 源MAC + 网络类型 + 数据 + FCS)

网卡

image-20201027182752857

  • 网卡接收到一个帧,首先会进行差错校验,如果校验通过则接收,否则丢弃
  • Wireshark抓到的帧没有FCS,因为它抓到的是差错校验通过的帧(帧尾的FCS会被硬件去掉)
    • Wireshark抓不到差错校验的帧

PPP协议(Point to Point Protocol)

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

image-20201027184551067

PPP协议 - 字节填充

屏幕快照 2020-10-27 下午6.48.38

网络层

  • 网络层数据包(IP数据包,Packet) 由首部,数据两部分组成

    • 数据 : 很多时候由传输层传递下来的数据段(Segment)

    屏幕快照 2020-11-02 下午4.18.17

网络层首部 - 版本,首部长度,区分服务

  • 版本(Version)
    • 占4位
      • 0b0100 : IPv4
      • 0b0110 : IPv6
  • 首部长度(Header Length)
    • 占4位,二进制乘以4才是最终长度
    • 0b0101 : 20(最大值)
    • 0b1111 : 60(最大值)
  • 区分服务(Differentiated Services Field)
    • 占8位
    • 可用于提高网络的服务质量(QoS, Quality of Service)
  • 总长度
    • 占16位
    • 首部 + 数据的长度之和,最大值是65535
    • 由于帧的数据不能超过1500字节,所以过大的IP数据包,需要分成片(fragments) 传输给数据链路层
      • 每一篇都有自己的网络层首部(IP首部)
  • 标识(Identification)
    • 占16位
    • 数据包的ID,当你数据包过大进行拆分时,同一个数据包的所有片的标识都是一样的
    • 有一个计数器专门管理数据包的ID,每发出一个数据包,ID就加1
  • 标识(Flags)
    • 占3位
    • 第一位 : 保留
    • 第二位 :1代表不允许分片,0代表允许分片
    • 第三位 : 1代表不是最后一片,0代表是最后一片

ping - 几个用法

  • ping /?
    • 查看 ping 的用法
  • ping ip地址 -l 数据包大小
    • 发送指定大小的数据包
  • ping ip地址 -f
    • 不允许网络层分页
  • pinng ip地址 -i TTL
    • 设置TTL的值
  • 通过tracert, pathping 命令,可以跟踪数据包经过了那些路由器

网络层首部 - 片偏移

  • 片偏移 (Fragment Offset)
    • 占13位
    • 片偏移乘以8 : 字节偏移
    • 每一片的长度一定是8的整数倍

屏幕快照 2020-11-02 下午4.28.13

  • 生存时间

    • 占8位

    • 每个路由器在转发之前会将TTL减1,一旦发现TTL减为0,路由器会返回错误报告

    • 观察使用ping命令后的TTL,能够推测出对方的操作系统,中间经过了多少个路由器

      屏幕快照 2020-11-02 下午4.29.44

  • 协议(Protocol)

    • 占8位

    • 表明所封装的数据是使用了什么协议

    • 首部校验和(Header Checksum)

      • 用于检查首部是否有错误

      屏幕快照 2020-11-02 下午4.31.40

传输层(Transport)

  • 传输层有2个协议

    • TCP(Transmission Control Protocol), 传输控制协议

    • UDP(User Datagram Protocol), 用户数据报协议

      TCP UDP
      连接性 面向连接 无连接
      可靠性 可靠传输,不丢包 不可靠传输,尽最大努力交付,可能丢包
      首部占用空间
      传输速率
      资源消耗
      应用场景 浏览器,文件传输,邮件发送 音视频通话,直播
      应用层协议 HTTP,HTTPS,FTP,SSMTP,DNS DNS

UDP - 数据格式

  • UDP 是无连接的,减少了建立和释放连接的开销
  • UDP尽最大努力交付,不保证可靠交付
    • 因此不需要维护一些复杂的参数,首部只有8个字节(TCP的首部至少20个字节)
  • UDP长度(Length)
    • 占16位,首部的长度 + 数据的长度

UDP - 检验和(Checksum)

  • 检验和的计算内容 : 伪首部 + 首部 + 数据

    • 伪首部 : 仅在计算检验和时起作用,并不会传递给网络层

    屏幕快照 2020-11-02 下午4.38.37

端口(Port)

  • UDP首部中端口是占用2字节
    • 可以推测出端口号的取值范围是 0-65535
  • 客户端的源端口号是临时开启的随机端口
  • 防火墙可以设置开启/关闭某些端口来提高安全性
  • 常用命令行
    • netstat -an : 查看被占用的端口
    • netstat -anb : 查看被占用的端口,占用端口的应用程序
    • telnet 主机 端口: 查看是否可以访问某些主机的某个端口

TCP - 数据格式