网卡如何发送以太网包

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

报头是一串像 10101010…这样 1 和 0 交替出现的比特序列,长度为56比特,它的作用是确定包的读取时机。当这些 1010 的比特序列被转换成电信号后,会形成如下图这样的波形。接收方在收到信号时,遇到这样的波形就可以判断读取数据的时机。关于这一块内容,我们得先讲讲如何通过电信号来读取数据。

如何通过电信号来读取数据

用电信号来表达数字信息时,我们需要让 0 和 1 两种比特分别对应特定的电压和电流,例如图 (a)这样的电信号就可以表达数字信息。通过电信号来读取数据的过程就是将这种对应关系颠倒过来。也就是说,通过测量信号中的电压和电流变化,还原出 0 和 1 两种比特的值。然而,实际的信号并不像图所示的那样有分隔每个比特的辅助线,因此在测量电压和电流时必须先判断出每个比特的界限在哪里。但是,像图 (a)右边这种 1 和 0 连续出现的信号,由于电压和电流没有变化,我们就没办法判断出其中每个比特到底应该从哪里去切分。

要解决这个问题,最简单的方法就是在数据信号之外再发送一组用来区分比特间隔的时钟信号。如图(b)所示,当时钟信号从下往上变化时 A 读取电压和电流的值,然后和 0 或 1 进行对应就可以了。但是这种方法存在问题。当距离较远,网线较长时,两条线路的长度会发生差异,数据信号和时钟信号的传输会产生时间差,时钟就会发生偏移。要解决这个问题,可以采用将数据信号和时钟信号叠加在一起的方法。这样的信号如图 (c)所示,发送方将这样的信号发给接收方。由于时钟信号是像图 (b)这样按固定频率进行变化的,只要能够找到这个变化的周期,就可以从接收到的信号(c)中提取出时钟信号(b),进而通过接收信号(c)和时钟信号(b)计算出数据信号(a),这和发送方将数据信号和时钟信号进行叠加的过程正好相反。然后,只要根据时钟信号(b)的变化周期,我们就可以从数据信号(a)中读取相应的电压和电流值,并将其还原为 0 或 1 的比特了。这里的重点在于如何判断时钟信号的变化周期。

时钟信号是以 10 Mbit/s或者 100 Mbit/s 这种固定频率进行变化的,就像我们乘坐自动扶梯一样,只要对信号进行一段时间的观察,就可以找到其变化的周期。因此,我们不能一开始就发送包的数据,而是要在前面加上一段用来测量时钟信号的特殊信号,这就是报头的作用 。以太网根据速率和网线类型的不同分为多种派生方式,每种方式的信号形态也有差异,并不都是像本例中讲的这样,单纯通过电压和电流来表达 0 和 1 的。因此,101010…这样的报头数字信息在转换成电信号后,其波形也不一定都是图 中的那个样子,而是根据方式的不同而不同。但是,报头的作用和基本思路是一致的。报头后面的起始帧分界符在图中也已经画出来了,它的末尾比特排列有少许变化。接收方以这一变化作为标记,从这里开始提取网络包数据。也就是说,起始帧分界符是一个用来表示包起始位置的标记。末尾的 FCS(帧校验序列)用来检查包传输过程中因噪声导致的波形紊乱、数据错误,它是一串 32 比特的序列,是通过一个公式对包中从头到尾的所有内容进行计算而得出来的。具体的计算公式在此省略,它和磁盘等设备中使用的 CRCA 错误校验码是同一种东西,当原始数据中某一个比特发生变化时,计算出来的结果就会发生变化。在包传输过程中,如果受到噪声的干扰而导致其中的数据发生了变化,那么接收方计算出的 FCS 和发送方计算出的 FCS 就会不同,这样我们就可以判断出数据有没有错误。

向路由器(或集线器)发送网络包

       加上报头、起始帧分界符和 FCS 之后,我们就可以将包通过网线发送出去了。
       发送信号的操作分为两种,一种是使用集线器的半双工模式,另一种是使用交换机的全双工模式。
1.半双工模式
        在半双工模式中,为了避免信号碰撞,首先要判断网线中是否存在其他设备发送的信号。如果有,则需要等待该信号传输完毕,因为如果在有信号时再发送一组信号,两组信号就会发生碰撞。当之前的信号传输完毕, 或者本来就没有信号在传输的情况下,我们就可以开始发送信号了。
      首先,MAC 模块从报头开始将数字信息按每个比特转换成电信号,然后由 PHY, 或者叫 MAU 的信号收发模块发送出去 。在这里,将数字信息转换为电信号的速率就是网络的传输速率,例如每秒将 10 Mbit 的数字信息转换为电信号发送出去,则速率就是 10 Mbit/s。 接下来,PHY(MAU)模块会将信号转换为可在网线上传输的格式, 并通过网线发送出去。以太网规格中对不同的网线类型和速率以及其对应的信号格式进行了规定,但 MAC 模块并不关心这些区别,而是将可转换为任意格式的通用信号发送给 PHY(MAU)模块,然后 PHY(MAU)模块再将其转换为可在网线上传输的格式。大家可以认为 PHY(MAU)模块的功能就是对 MAC 模块产生的信号进行格式转换。当然,以太网还有很多不同的派生方式,网线传输的信号格式也有各种变化。此外,实际在网线中传输的信号很复杂,我们无法一一介绍,但是如果一点都不讲,大家可能对此难以形成一个概念,所以就举一个例子,大家感受一下就好 。 图中就是这样一个例子,我们这里就不详细解释了,总之,网线中实际传输的信号就是这个样子的。
                 
       PHY(MAU)的职责并不是仅仅是将 MAC 模块传递过来的信号通过网线发送出去,它还需要监控接收线路中有没有信号进来。在开始发送信号之前,需要先确认没有其他信号进来,这时才能开始发送。如果在信号开始发送到结束发送的这段时间内一直没有其他信号进来,发送操作就成功完成了。
半双工模式下的信号碰撞
     以太网不会确认发送的信号对方有没有收到。根据以太网的规格,两台设备之间的网线不能超过 100 米 ,在这个距离内极少会发生错误, 万一发生错误,协议栈的 TCP 也会负责搞定,因此在发送信号时没有必要检查错误。 在发送信号的过程中,接收线路不应该有信号进来,但情况并不总是尽如人意,有很小的可能性出现多台设备同时进行发送操作的情况。如果有其他设备同时发送信号,这些信号就会通过接收线路传进来。
    在使用集线器的半双工模式中,一旦发生这种情况,两组信号就会相互叠加,无法彼此区分出来,这就是所谓的信号碰撞。这种情况下,继续发送信号是没有意义的,因此发送操作会终止。为了通知其他设备当前线路已发生碰撞,还会发送一段时间的阻塞信号,然后所有的发送操作会全部停止。 等待一段时间之后,网络中的设备会尝试重新发送信号。但如果所有设备的等待时间都相同,那肯定还会发生碰撞,因此必须让等待的时间相互错开。具体来说,等待时间是根据 MAC 地址生成一个随机数计算出来的。 当网络拥塞时,发生碰撞的可能性就会提高,重试发送的时候可能又会和另外一台设备的发送操作冲突,这时会将等待时间延长一倍,然后再次重试。以此类推,每次发生碰撞就将等待时间延长一倍,最多重试 10次,如果还是不行就报告通信错误
    在全双工模式中,发送和接收可以同时进行,不会发生碰撞。因此,全双工模式中不需要像半双工模式这样考虑这么多复杂的问题,即便接收线路中有信号进来,也可以直接发送信号。
2.全双工模式
      全双工模式是交换机特有的工作模式,它可以同时进行发送和接收操作,集线器不具备这样的特性。使用集线器时,如果多台计算机同时发送信号,信号就会在集线器内部混杂在一起,进而无法使用,这种现象称为碰撞,是以太网的一个重要

特征。

不过,只要不用集线器,就不会发生碰撞。而使用双绞线时,发送和接收的信号线是各自独立的,因此在双绞线中信号不会发生碰撞。网线连接的另一端,即交换机端口和网卡的 PHY (MAU)模块以及 MAC 模块,其内部发送和接收电路也是各自独立的,信号也不会发生碰撞。因此,只要不用集线器,就可以避免信号碰撞了。 如果不存在碰撞,也就不需要半双工模式中的碰撞处理机制了。然而,以太网规范中规定了在网络中有信号时要等该信号结束后再发送信号,因此发送和接收还是无法同时进行。 于是,人们对以太网规范进行了修订,增加了一个无论网络中有没有信号 都可以发送信号的工作模式,同时规定在这一工作模式下停用碰撞检测 。这种工作模式就是全双工模式。在全双工模式下,无需等待其 他信号结束就可以发送信号,因此它比半双工模式速度要快 。由于双方可以同时发送数据,所以可同时传输的数据量也更大,性能也就更高。

全双工模式的工作方式:在MUA的发送和接收电路之间有一个检测信号碰撞的模块

在以太网中,当没有数据在传输时,网络中会填充一种被称为连接脉冲的脉冲信号。在没有数据信号时就填充连接脉冲,这使得网络中一直都 有一定的信号流过,从而能够检测对方是否在正常工作,或者说网线有没 有正常连接。以太网设备的网线接口周围有一个绿色的 LED 指示灯,它表示是否检测到正常的脉冲信号。如果绿灯亮,说明 PHY(MAU)模块以及网线连接正常。 在双绞线以太网规范最初制定的时候,只规定了按一定间隔发送脉冲信号,这种信号只能用来确认网络是否正常。后来,人们又设计出了如下图这样的具有特定排列的脉冲信号,通过这种信号可以将自身的状态告知对方。自动协商功能就利用了这样的脉冲信号,即通过这种信号将自己能够支持的工作模式和传输速率相互告知对方,并从中选择一个最优的组合。

       

网络知识入门,数字信号如何转换为电信号(七)相关推荐

  1. 网络知识入门,什么是以太网包,TCP/IP包,MAC头部,IP头部以及TCP头部(六)

    目录 一.以太网包 二.协议栈中IP模块的工作方式 1.TCP委托IP模块 2.IP模块的工作方式 三.mac头部 四.何为以太网 1.以太网的定义 2.如何收发以太网包 3.以太网接收网络包详细 4 ...

  2. 网络知识入门:路由器基础知识全接触

    网络知识入门:路由器基础知识全接触 发布时间:2008.05.29 07:01     来源:赛迪网    作者:月伴雨 路由器综述 路由器是互联网的主要节点设备.路由器通过路由决定数据的转发.转发策 ...

  3. 网络知识入门,深入了解ACK控制位,网络传输缓慢的毒瘤:ACK等待时间  (五)

    上一篇文章讲了协议栈内部的组成,以及客户端与服务器建立连接时协议栈是如何工作的,本章将具体讲一下TCP控制信息里的控制位--ACK. [网络知识入门,探索一次网页请求的旅程(一)] https://b ...

  4. 网络知识入门,探讨DNS服务器在网页请求中的作用(二)

    上一篇文章讲到网络请求是基于http协议传输的,消息请求包含了"对什么"和"做什么操作",于是一个网页请求就这么发送出去了.但是在发送消息之前,我们还需要对域名 ...

  5. 网络知识入门,用户如何连接互联网,ADSL调制解调器的妙用,PPP上网的三种方式(十二)

    互联网与家庭网络的区别      互联网是一个遍布世界的巨大而复杂的系统,但其基本工作方式却出奇地简单.和家庭.公司网络一样,互联网也是通过路由器来转发包的, 而且路由器的基本结构和工作方式也并没有什 ...

  6. 网络知识入门,网络协议体系架构(一)

    1.常用网络知识目录 1)子网掩码.ip分段 .tcp三次握手四次切断.ip地址库,纯真库,自建ip库,ip寻址算法,ip寻址工具,dhcp,pppoe,udp协议 2)dns原理,相关网络命令,dn ...

  7. 网络知识入门,路由器工作原理(十)

    路由器工作原理       路由器的转发的工作原理和交换机类似,也是通过查表判断包转发的目标.不过在具体的操作过程上,路由器和交换机是有区别的.因为路由器是基于 IP 设计的,而交换机是基于以太网设计 ...

  8. 网络知识入门,Web服务器的CGI程序,浏览器如何判断响应内容:文本,图片还是音频文件?(十九)

    目录 将请求的uri转换为实际的文件名 运行CGI程序 web服务器的访问控制 浏览器接受响应并返回内容 浏览器接受响应消息后如何显示内容 浏览器显示网页内容:访问完成 将请求的uri转换为实际的文件 ...

  9. 网络知识入门,探索网络运营商的内部:NOC和POP,电话公司的通信线路租借服务(十三)

    POP和NOC POP:Point of Presense,中文一般叫作"接入点"      网络到达了网络运营商的路由器,将是如何工作的呢?.     路由器是互联网的入口.互联 ...

最新文章

  1. 数据结构与算法笔记(十二)—— 查找算法(顺序查找、二分法查找)
  2. 【安全漏洞】CVE-2021-1732 win32k漏洞分析
  3. java中类加载机制、类加载过程和类加载器层次
  4. Apache Flink 零基础入门(六)Flink核心概念
  5. Oracle中如何插入特殊字符: 和 ' (多种解决方案)
  6. [spring boot] 01 环境搭建 - 配置java和mvn环境
  7. teleport 组件的作用_对于组件的可重用性,大佬给出来6个级别的见解,一起过目一下
  8. SVN增加文件后,文件无法自动包括在项目中的原因
  9. java 反射 接口_Java 怎么通过反射获取并实现这个类里面的接口,并且实现接口中的方法...
  10. Axure 9母版引发事件
  11. C#访问大华网络摄像头
  12. ffmpeg 有声视频合成背景音乐(合成多声音/合成多音轨)
  13. C语言预定义的标识符的作用,C语言标识符的分类
  14. 网站的seo以及它和站长工具之间的秘密
  15. 讨论,您如何阅读论文?
  16. source insight4.0配色方案模板免费下载
  17. Qt 绝对要收藏的网站QTCN Qt绘图工具
  18. python编程实现屏幕记录功能
  19. matlab中的delaunay,python – Matlab delaunayn和Scipy Delaunay之间的区别
  20. sql 分组查询 数据 大于2条的数据

热门文章

  1. 彻底删除mysql数据库
  2. python-docx 设置表格边框
  3. 快速理解为什么1byte的数据范围是-128~127
  4. word 制表位之mythtype公式编号右对齐
  5. 算法的“有毒泡泡”,当真可以戒掉吗?
  6. dayjs 中文文档
  7. java求1000以内的完数(方法)
  8. cad面积累计lisp怎么用_求一个cad的lisp:一次计算多个封闭线框的面积,并显示每个面积和总面积...
  9. 升职加薪必看!阿里、腾讯大厂Android面试必问知识点系统梳理,深度好文
  10. 矩阵动力-基于web控制的灌溉小车