美文网首页
使用电信号传输TCP/IP:接收网络包的操作过程(PHY/MAU

使用电信号传输TCP/IP:接收网络包的操作过程(PHY/MAU

作者: robot_test_boy | 来源:发表于2022-07-12 03:27 被阅读0次

在使用集线器的半双工模式以太网中,一台设备发送的信号会到达连接在集线器上的所有设备。这意味着无论是不是发给自己的信号都会通过接收线路传进来,因此接收操作的第一步就是不管三七二十一把这些信号全都收进来再说。

信号的开头是报头,通过报头的波形同步时钟,然后遇到起始帧分界符时开始将后面的信号转换成数字信息。接收操作和发送时是相反的,即PHY(MAU)模块先开始工作,然后再轮到MAC模块

首先,PHY (MAU)模块会将信号转换成通用格式并发送给MAC模块,MAC模块再从头开始将信号转换为数字信息,并存放到缓冲区中。当到达信号的末尾时,还需要检查FCS。从包开头到结尾的所有比特套用到公式中计算出FCS,然后和包末尾的FCS进行对比,正常情况下两者应该是一致的,如果中途受到噪声干扰而导致波形发生紊乱,则两者的值会产生差异,这时这个包就会被当作错误包而被丢弃。

如果FCS校验没有问题,接下来查看MAC头部中接收方MAC地址与网卡在初始化时分配给自己的MAC地址是否一致,以判断这个包是不是发给自己的。我们没必要去接收发给别人的包,因此如果不是自己的包就直接丢弃,如果接收方MAC地址和自己MAC地址一致,则将包放入缓冲区中。到这里,MAC模块的工作就完成了,接下来网卡会通知计算机收到了一个包。

特例:可以让网卡不检查包的接收方地址,不管是不是自己的包都统统接收下来,这种模式叫作“混杂模式”(Promiscuous Mode)。

通知计算机的操作会使用一个叫作中断的机制。在网卡执行接收包的操作的过程中,计算机并不是一直监控着网卡的活动,而是去继续执行其他的任务。

如果网卡不通知计算机,计算机是不知道包已经收到了这件事的。网卡驱动也是在计算机中运行的一个程序,因此它也不知道包到达的状态。在这种情况下,我们需要一种机制能够打断计算机正在执行的任务,让计算机注意到网卡中发生的事情,这种机制就是中断

中断的工作过程:

首先,网卡向扩展总线中的中断信号线发送信号,该信号线通过计算机中的中断控制器连接到CPU。当产生中断信号时,CPU会暂时挂起正在处理的任务,切换到操作系统中的中断处理程序。然后,中断处理程序会调用网卡驱动,控制网卡执行相应的接收操作。

中断是有编号的,网卡在安装的时候就在硬件中设置了中断号,在中断处理程序中则将硬件的中断号和相应的驱动程序绑定。

假设网卡的中断号为11,则在中断处理程序中将中断号11和相应的网卡驱动绑定起来,当网卡发起中断时,就会自动调用网卡驱动了。现在的硬件设备都遵循即插即用规范自动设置中断号,我们没必要去关心中断号了,在以前需要手动设置中断号的年代,经常发生因为设置了错误的中断号而导致网卡无法正常工作的问题。

网卡驱动被中断处理程序调用后,会从网卡的缓冲区中取出收到的包,并通过MAC头部中的以太类型字段判断协议的类型。现在我们在大多数情况下都是使用TCP/IP协议,但除了TCP/IP之外还有很多其他类型的协议,例如NetWare中使用的IPX/SPX,以及Mac电脑中使用的AppleTalk等协议。这些协议都被分配了不同的以太类型,如0080(十六进制)代表IP协议,网卡驱动就会把这样的包交给TCP/IP协议栈;如果是809B则表示AppleTalk协议,就把包交给AppleTalk协议栈,以此类推。

网卡不会关心包里的内容,只要按照以太类型将包交给对应的协议栈就可以。接下来,协议栈会判断这个包应该交给哪个应用程序,并进行相应的处理。

本文摘取自周自恒翻译的户根勤编写的《网络是怎样连接的》

相关文章

网友评论

      本文标题:使用电信号传输TCP/IP:接收网络包的操作过程(PHY/MAU

      本文链接:https://www.haomeiwen.com/subject/laimbrtx.html