网卡如何发送以太网包
好了,下面来看一看网卡是如何将包转换成电信号并发送到网线中的。网卡驱动从 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 就会不同,这样我们就可以判断出数据有没有错误。
向路由器(或集线器)发送网络包
特征。
不过,只要不用集线器,就不会发生碰撞。而使用双绞线时,发送和接收的信号线是各自独立的,因此在双绞线中信号不会发生碰撞。网线连接的另一端,即交换机端口和网卡的 PHY (MAU)模块以及 MAC 模块,其内部发送和接收电路也是各自独立的,信号也不会发生碰撞。因此,只要不用集线器,就可以避免信号碰撞了。 如果不存在碰撞,也就不需要半双工模式中的碰撞处理机制了。然而,以太网规范中规定了在网络中有信号时要等该信号结束后再发送信号,因此发送和接收还是无法同时进行。 于是,人们对以太网规范进行了修订,增加了一个无论网络中有没有信号 都可以发送信号的工作模式,同时规定在这一工作模式下停用碰撞检测 。这种工作模式就是全双工模式。在全双工模式下,无需等待其 他信号结束就可以发送信号,因此它比半双工模式速度要快 。由于双方可以同时发送数据,所以可同时传输的数据量也更大,性能也就更高。
全双工模式的工作方式:在MUA的发送和接收电路之间有一个检测信号碰撞的模块
在以太网中,当没有数据在传输时,网络中会填充一种被称为连接脉冲的脉冲信号。在没有数据信号时就填充连接脉冲,这使得网络中一直都 有一定的信号流过,从而能够检测对方是否在正常工作,或者说网线有没 有正常连接。以太网设备的网线接口周围有一个绿色的 LED 指示灯,它表示是否检测到正常的脉冲信号。如果绿灯亮,说明 PHY(MAU)模块以及网线连接正常。 在双绞线以太网规范最初制定的时候,只规定了按一定间隔发送脉冲信号,这种信号只能用来确认网络是否正常。后来,人们又设计出了如下图这样的具有特定排列的脉冲信号,通过这种信号可以将自身的状态告知对方。自动协商功能就利用了这样的脉冲信号,即通过这种信号将自己能够支持的工作模式和传输速率相互告知对方,并从中选择一个最优的组合。