网络互连模型 (物理层、数据链路层、网络层)

目录

网络互连模型

物理层

数字信号、模拟信号

数据通信模型

信道 (Channel)

数据链路层

数据链路层 - 封装成帧

数据链路层 - 透明传输

数据链路层 - 差错检验

CSMA/CD协议

Ethernet V2 帧的格式

Ethernet V2 标准

Ethernet V2 - 首部尾部分析

PPP协议(Point to Point Protocol)

PPP协议 - 字节填充

网卡

Wireshark抓包分析

网络层

网络层首部

协议

Wireshark抓包分析


网络互连模型

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

请求过程

网络分层


物理层


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

数字信号、模拟信号

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

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

数据通信模型

局域网通信模型

广域网通信模型

信道 (Channel)

信道:  信息传输的通道,  一条传输介质上 (比如网线) 上可以有多条信道

单工通信
  信号只能往一个方向传输, 任何时候都不能改变信号的传输方向
  比如: 无线电广播、有线电视广播

半双工通信
  信号可以双向传输, 但必须是交替进行, 同一时间只能往一个方向传输
  比如: 对讲机

全双工通信
  信号可以同时双向传输
  比如: 手机(打电话, 听说同时进行)


数据链路层


链路: 从1个节点到相邻节点的一段物理线路(有线或无线),中间没有其他交换节点


数据链路: 在一条链路上传输数据时,需要有对应的通信协议来控制数据的传输; 不同类型的数据链路,所用的通信协议可能是不同的
      广播信道: CSMA/CD协议(比如同轴电缆、集线器等组成的网络) 
     点对点信道: PPP协议(比如2个路由器之间的信道) 

数据链路层的3个基本问题:
  ① 封装成帧
  ② 透明传输
  ③ 差错检验

数据链路层 - 封装成帧

帧 (Frame) 的数据部分: 就是网络层传递下来的数据包(IP数据包,Packet) 

最大传输单元MTU (Maximum Transfer Unit) 
      每一种数据链路层协议都规定了所能够传送的帧的数据长度上限
      以太网的MTU为1500个字节

数据链路层 - 透明传输

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

注意:  数据部分一旦出现SOHEOT,就需要进行转

数据链路层 - 差错检验

FCS是根据 数据部分+首部 计算得出的


CSMA/CD协议

CSMA/CD (Carrier Sense Multiple Access with Collision Detectio), 载波侦听多路访问/冲突检测

使用了CSMA/CD的网络可以称为是 以太网(Ethernet), 它传输的是 以太网帧
    以太网帧的格式有:Ethernet V2标准、IEEE的802.3标准
    使用最多的是:Ethernet V2标准

为了能够检测正在发送的帧是否产生了冲突, 以太网的帧至少要64字节

用交换机组建的网络, 已经支持全双工通信, 不需要再使用CSMA/CD, 但它传输的帧依然是以太网帧;  所以, 用交换机组建的网络, 依然可以叫做以太网

Ethernet V2 帧的格式

首部:目标MAC +源MAC + 网络类型
以太网帧: 首部 + 数据 + FCS
数据的长度至少是: 64 – 6 – 6 – 2 – 4 = 46字节

Ethernet V2 标准

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

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

Ethernet V2 - 首部尾部分析

数据链路层首部: 报头, 起始帧    数据链路层尾部: 帧校验序列(FCS)

网卡是如何将包转换成电信号并发送到网线中的? 
        网卡驱动从IP模块获取包之后,会将其复制到网卡内的缓冲区中,然后向MAC模块发送发送包的命令。接下来就轮到MAC模块进行工作了。首先,MAC模块会将包从缓冲区中取出,并在开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列

加上报头、起始帧分界符和FCS之后, 在半双工模式中, 为了避免信号碰撞,首先要判断网线中是否存在其 他设备发送的信号。如果有,则需要等待该信号传输完毕,因为如果在有 信号时再发送一组信号,两组信号就会发生碰撞。当之前的信号传输完毕, 或者本来就没有信号在传输的情况下,我们就可以开始发送信号了。首先, MAC模块从报头开始将数字信息按每个比特转换成电信号,然后由PHY, 或者叫MAU的信号收发模块发送出去。

接下来,PHY(MAU)模块会将信号转换为可在网线上传输的格式, 并通过网线发送出去。概括来说就是, 网卡的 MAC 模块生成通用信号,然后由 PHY(MAU)模块转换 成可在网线中传输的格式,并通过网线发送出去。

PHY(MAU)的职责并不是仅仅是将MAC模块传递过来的信号通过网线发送出去,它还需要监控接收线路中有没有信号进来。在开始发送信号之前,需要先确认没有其他信号进来,这时才能开始发送。如果在信号开始发送到结束发送的这段时间内一直没有其他信号进来,发送操作就成功完成了。

在使用集线器的半双工模式中,一旦出现多台设备同时进行发送操作的情况,两组信号就会相互叠加,无法彼此区分出来,这就是所谓的信号碰撞。这种情况下,继续发送信号是没有意义的,因此发送操作会终止。为了通知其他设备当前线路已发生碰撞,还会发送一段时间的阻塞信号,然后所有的发送操作会全部停止。

等待一段时间之后,网络中的设备会尝试重新发送信号。但如果所有设备的等待时间都相同,那肯定还会发生碰撞,因此必须让等待的时间 相互错开。具体来说,等待时间是根据MAC地址生成一个随机数计算出来的。

当网络拥塞时,发生碰撞的可能性就会提高,重试发送的时候可能又 会和另外一台设备的发送操作冲突,这时会将等待时间延长一倍,然后再 次重试。以此类推,每次发生碰撞就将等待时间延长一倍,最多重试10 次,如果还是不行就报告通信错误。

用电信号来表达数字信息时,发送方需要让0和1两种比特分别对应特 定的电压和电流; 接收方通过测量信号中的电压和电流变化,还原出0和1两种比特的值;

然而,实际的信号并不像上图所示的那样有分隔每个比特的辅助线,因此在测量电压和电流时必须先判断出每个比特的界限在哪里。但是,像下图右边这种1和0连续出现的信号,由于电压和电流没有变化,就没办法判断出其中每个比特到底应该从哪里去切分

要解决这个问题,最简单的方法就是在数据信号之外再发送一组用来 区分比特间隔的时钟信号。如图所示,当时钟信号从下往上变化 时读取电压和电流的值,然后和0或1进行对应就可以了。但是这种方法存在问题。当距离较远,网线较长时,两条线路的长度会发生差异,数据信号和时钟信号的传输会产生时间差,时钟就会发生偏移

要解决这个问题,可以采用将数据信号和时钟信号叠加在一起的方法。 这样的信号如图(c)所示,发送方将这样的信号发给接收方。由于时 钟信号是像图(b)这样按固定频率进行变化的,只要能够找到这个变 化的周期,就可以从接收到的信号(c)中提取出时钟信号(b),进而通过 接收信号(c)和时钟信号(b)计算出数据信号(a),这和发送方将数据信号 和时钟信号进行叠加的过程正好相反。然后,只要根据时钟信号(b)的变 化周期,我们就可以从数据信号(a)中读取相应的电压和电流值,并将其还原为0或1的比特了。

这里的重点在于如何判断时钟信号的变化周期。时钟信号是以10 Mbit/s 或者100 Mbit/s这种固定频率进行变化的, 只要对信号进行一段时间的观察,就可以找到其变化的周期。因此,不能一开始就发送包的数据,而是要在前面加上一段用来测量时钟信号的特殊信号,这就是报头的作用

报头后面的起始帧分界符的末尾比特排列有少许变化。接收方以这一变化作为标记,从这里开始提取网络包数据。也就是说,起始帧分界符是一个用来表示包起始位置的标记

末尾的FCS(帧校验序列)用来检查包传输过程中因噪声导致的波形紊乱、数据错误,是一串32比特的序列,是通过一个公式对包中从头到尾 的所有内容进行计算而得出来的。当原始数据中某一个比特 发生变化时,计算出来的结果就会发生变化。在包传输过程中,如果受到噪声的干扰而导致其中的数据发生了变化,那么接收方计算出的FCS和发 送方计算出的FCS就会不同,这样我们就可以判断出数据有没有错误。


PPP协议(Point to Point Protocol)

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

PPP协议 - 字节填充

① 将 0x7E 替换成 0x7D5E
② 将 0x7D 替换成 0x7D5D

网卡

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

Wireshark抓包分析


网络层


网络层数据包 (IP数据包,Packet) 由首部、数据 两部分组成
数据: 很多时候是由传输层传递下来的数据段 (Segment)

网络层首部

版本 (Version)

  • 占4位
  • 0b0100: IPv4
  • 0b0110: IPv6

首部长度 (Header Length)

  • 占4位,二进制乘以4才是最终长度
  • 0b0101: 20 (最小值)
  • 0b1111: 60 (最大值)

区分服务 (Differentiated Services Field)

  • 占8位
  • 可以用于提高网络的服务质量 (QoS,Quality of Service)

总长度 (Total Length)

  • 占16位
  • 首部 + 数据的长度之和, 最大值是65535

由于帧的数据不能超过1500字节,所以过大的IP数据包,需要分成 片 (fragments) 传输给数据链路每一片都有自己的网络层首部(IP首部)

标识 (Identification)

  • 占16位
  • 数据包的ID,  当数据包过大进行分片时, 同一个数据包的所有片的标识都是一样的
  • 有一个计数器专门管理数据包的ID, 每发出一个数据包, ID就加1

标志 (Flags)

  • 占3位
  • 第1位 (Reserved Bit): 保留
  • 第2位 (Don't Fragment): 1代表不允许分片,0代表允许分片
  • 第3位 (More Fragments): 1代表不是最后一片,0代表是最后一片

片偏移 (Fragment Offset)

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

生存时间 (Time To Live,TTL)

  • 占8位
  • 每个路由器在转发之前会将TTL减1,一旦发现TTL减为0,路由器会返回错误报告
  • 观察使用ping命令后的TTL,能够推测出对方的操作系统、中间经过了多少个路由器

协议 (Protocol)

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

首部校验和 (Header Checksum)

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

协议

ICMP协议: 用于告知网络包传送过程中产生的错误以及各种控制消息
ARP协议: 用于根据IP地址查询相应的以太网MAC地址

 

Wireshark抓包分析

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值