美文网首页
IP与以太网的包收发操作(2.5)

IP与以太网的包收发操作(2.5)

作者: cdd48b9d36e0 | 来源:发表于2018-08-07 17:39 被阅读21次

2.5 IP与以太网的包收发操作

2.5.1 包的基本知识

“TCP 模块在执行连接、收发、断开等各阶段操作时,都需要委托 IP 模块将数据封装成包发送给通信对象。我们在 TCP 的讲解中也经常提到 IP,下面就来讨论一下 IP 模块是如何将包发送给对方的。”


网络包的基本结构
IP网络包的传输方式

由上面两张图可知,IP头部记录的是最终目的地路由器的IP地址,Mac头部记录的是下一个路由器的Mac地址

  • 路由器根据目标地址判断下一个路由器的位置
  • 集线器在子网中将网络包传输到下一个路由

实际上,集线器是按照以太网规则传输包的设备,而路由器是按照 IP 规则传输包的设备,因此我们也可以作如下理解。

  • IP 协议根据目标地址判断下一个 IP 转发设备的位置
  • 子网中的以太网协议将包传输到下一个转发设备”

“前面讲了 IP 和以太网的分工,其中以太网的部分也可以替换成其他的东西,例如无线局域网、ADSL、FTTH 等,它们都可以替代以太网的角色帮助 IP 协议来传输网络包 54 。因此,将 IP 和负责传输的网络分开,可以更好地根据需要使用各种通信技术。像互联网这样庞大复杂的网络,在架构上需要保证灵活性,这就是设计这种分工方式的原因。”

2.5.2 包收发操作概览

“实际上将包从发送方传输到接收方的工作是由集线器、路由器等网络设备来完成的”
“IP 模块仅仅是整个包传输过程的入口而已。”


包收发操作的整体过程

“在这个过程中,有几个关键的点。TCP 模块在收发数据时会分为好几个阶段,并为各个阶段设计了实现相应功能的网络包,但 IP 的包收发操作都是相同的,并不会因包本身而有所区别。因为 IP 模块会将 TCP 头部和数据块看作一整块二进制数据,在执行收发操作时并不关心其中的内容,也不关心这个包是包含 TCP 头部和数据两者都有呢,还是只有 TCP 头部而没有数据。当然,IP 模块也不关心 TCP 的操作阶段,对于包的乱序和丢失也一概不知。总之,IP 的职责就是将委托的东西打包送到对方手里,或者是将对方送来的包接收下来,仅此而已。因此,接下来我们要讲的这些关于 IP 的工作方式,可适用于任何 TCP委派的收发操作”

2.5.3 生成包含接收方 IP 地址的 IP 头部

IP头部格式
IP头部格式

“那么,我们应该如何判断应该把包交给哪块网卡呢?”
答案就是路由表(详细内容见下一章)

2.5.4 生成以太网用的 MAC 头部

MAC头部的字段
MAC头部的字段

这里的第一项“接收方MAC地址”并不能直接查到,我们在2.5.3小节通过路由表紧紧是知道了下一个的IP地址,所以还需要执行根据 IP 地址查询 MAC 地址的操作

2.5.5 通过 ARP 查询目标路由器的 MAC 地址

“这里我们需要使用 ARP ,它其实非常简单。在以太网中,有一种叫作广播的方法,可以把包发给连接在同一以太网中的所有设备。ARP 就是利用广播对所有设备提问:“×× 这个 IP 地址是谁的?请把你的 MAC 地址告诉我。”然后就会有人回答:“这个 IP 地址是我的,我的 MAC 地址是 ××××。”


用 ARP 查询 MAC 地址

“不过,如果每次发送包都要这样查询一次,网络中就会增加很多 ARP 包,因此我们会将查询结果放到一块叫作 ARP 缓存的内存空间中留着以后用。也就是说,在发送包时,先查询一下 ARP 缓存,如果其中已经保存了对方的 MAC 地址,就不需要发送 ARP 查询,直接使用 ARP 缓存中的地址,而当 ARP 缓存中不存在对方 MAC 地址时,则发送 ARP 查询。”
“有了 ARP 缓存,我们可以减少 ARP 包的数量,但如果总是使用 ARP 缓存中保存的地址也会产生问题。例如当 IP 地址发生变化时,ARP 缓存的内容就会和现实发生差异。为了防止这种问题的发生,ARP 缓存中的值在经过一段时间后会被删除,一般这个时间在几分钟左右。这个删除的操作非常简单粗暴,不管 ARP 缓存中的内容是否有效,只要经过几分钟就全部删掉,这样就不会出问题了。当地址从 ARP 缓存中删除后,只要重新执行一次 ARP 查询就可以再次获得地址了。”
“IP 模块能够完成整个打包工作,那么网卡只要将打好的包发送出去就可以了。”

2.5.6 以太网的基本知识

以太网的基本结构

“(c)这样的使用交换式集线器 的结构普及开来,现在我们说的以太网指的都是这样的结构。这个结构看上去和(b)很像,但其实里面有一个重要的变化,即信号会发送给所有设备这一性质变了,现在信号只会流到根据 MAC 地址指定的设备,而不会到达其他设备了。当然,根据 MAC 地址来传输包这一点并没有变,因此 MAC 头部的设计也得以保留。”

2.5.7 将 IP 包转换成电或光信号发送出去

网卡

“网卡中保存的 MAC 地址会由网卡驱动程序读取并分配给MAC模块。”

2.5.8 给网络包再加 3 个控制数据

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


网卡发送出去的包

“报头是一串像 10101010…这样 1 和 0 交替出现的比特序列,长度为 56 比特,它的作用是确定包的读取时机。当这些 1010 的比特序列被转换成电信号后,会形成如图 这样的波形。接收方在收到信号时,遇到这样的波形就可以判断读取数据的时机。”


报头和起始帧分界符
通过时钟测量读取信号的时机
“采用将数据信号和时钟信号叠加在一起的方法。这样的信号如图 2.26(c)所示,发送方将这样的信号发给接收方。由于时钟信号是像图 2.26(b)这样按固定频率进行变化的,只要能够找到这个变化的周期,就可以从接收到的信号(c)中提取出时钟信号(b),进而通过接收信号(c)和时钟信号(b)计算出数据信号(a),这和发送方将数据信号和时钟信号进行叠加的过程正好相反。然后,只要根据时钟信号(b)的变化周期,我们就可以从数据信号(a)中读取相应的电压和电流值,并将其还原为 0 或 1 的比特了。”
“这里的重点在于如何判断时钟信号的变化周期。时钟信号是以 10 Mbit/s 或者 100 Mbit/s 这种固定频率进行变化的,就像我们乘坐自动扶梯一样,只要对信号进行一段时间的观察,就可以找到其变化的周期。因此,我们不能一开始就发送包的数据,而是要在前面加上一段用来测量时钟信号的特殊信号,这就是报头的作用。”

“如果在包信号结束之后,继续传输时钟信号,就可以保持时钟同步的状态,下一个包就无需重新进行同步。有些通信方式采用了这样的设计,但以太网的包结束之后时钟信号也跟着结束了,没有通过这种方式来保持时钟同步,因此需要在每个包的前面加上报头,用来进行时钟同步。”

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

CRC:Cyclic Redundancy Check,循环冗余校验。

2.5.9 向集线器发送网络包

“加上报头、起始帧分界符和 FCS 之后,我们就可以将包通过网线发送出去了。发送信号的操作分为两种,一种是使用集线器的半双工模式,另一种是使用交换机的全双工模式。”

“发送和接收同时并行的方式叫作“全双工”,相对地,某一时刻只能进行发送或接收其中一种操作的叫作“半双工”。”

“在这里,将数字信息转换为电信号的速率就是网络的传输速率,例如每秒将 10 Mbit 的数字信息转换为电信号发送出去,则速率就是 10 Mbit/s。”

小结:“网卡的 MAC 模块生成通用信号,然后由PHY(MAU)模块转换成可在网线中传输的格式,并通过网线发送出去。”

2.5.10 接收返回包

“通知计算机的操作会使用一个叫作中断的机制。在网卡执行接收包的操作的过程中,计算机并不是一直监控着网卡的活动,而是去继续执行其他的任务。因此,如果网卡不通知计算机,计算机是不知道包已经收到了这件事的。网卡驱动也是在计算机中运行的一个程序,因此它也不知道包到达的状态。在这种情况下,我们需要一种机制能够打断计算机正在执行的任务,让计算机注意到网卡中发生的事情,这种机制就是中断。”
“具体来说,中断的工作过程是这样的。首先,网卡向扩展总线中的中断信号线发送信号,该信号线通过计算机中的中断控制器连接到 CPU。当产生中断信号时,CPU 会暂时挂起正在处理的任务,切换到操作系统中的中断处理程序 97 。然后,中断处理程序会调用网卡驱动,控制网卡执行相应的接收操作。”
“中断是有编号的,网卡在安装的时候就在硬件中设置了中断号,在中断处理程序中则将硬件的中断号和相应的驱动程序绑定。例如,假设网卡的中断号为 11,则在中断处理程序中将中断号 11 和相应的网卡驱动绑定起来,当网卡发起中断时,就会自动调用网卡驱动了。现在的硬件设备都遵循即插即用 98 规范自动设置中断号,我们没必要去关心中断号了,在以前需要手动设置中断号的年代,经常发生因为设置了错误的中断号而导致网卡无法正常工作”

相关文章

网友评论

      本文标题:IP与以太网的包收发操作(2.5)

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