网络是怎样连接的学习笔记-用电信号传输TCP/IP数据(下)
知识点:
l IP模块、MAC模块
l 数据包收发
l 以太网
1、 IP与以太网的包发送操作
TCP模块在执行连接、收发、断开等各阶段操作时,都需要委托IP模块将数据封装成包发送给通信对象。包是由头部和数据两部分构成的,头部包含目的地址等控制信息,头部后面就是委托方要发送给对方的数据
网络中有路由器和集线器两种不同的转发设备,它们在传输网络包时有着各自的分工:
(1)路由器根据目标地址判断下一个路由器的位置
(2)集线器在子网中将网络包传输到下一个路由
集线器是按照以太网规则传输包的设备,而路由器是按照IP规则传输包的设备,因此我们也可以作如下理解:
(1)IP协议根据目标地址判断下一个IP转发设备的位置
(2)子网中的以太网协议将包传输到下一个转发设备
TCP/IP 包包含如下两个头部:
(a)MAC头部(用于以太网协议)
(b)IP头部(用于IP协议)
IP头部中的目的IP地址是从TCP模块传递过来的,而TCP模块是在执行连接操作时从应用程序那里获得这个地址的。
TCP模块给数据加上TCP头部生成TCP包,发送给IP模块委托其进行发送,IP模块给TCP包加上IP头部和MAC头部,生成网络数据包。IP模块将网络数据包发送给网卡设备,传递给网卡的网络包是由一连串0和1组成的数字信息,网卡会将这些数字信息转换为电信号或光信号,并通过网线(或光纤)发送出去,然后这些信号就会到达集线器、路由器等转发设备,再由转发设备一步一步地送达接收方。
IP寻址是通过路由表完成的,关于路由表在后续再进行探索。
IP模块添加的MAC头部中的目的MAC是下一跳路由器的MAC地址,使用ARP(Address Resolution Protocol,地址解析协议)查询目标路由器MAC地址(每一台网络中的设备都会维护一个ARP缓存,降低ARP查询的频率)。
网卡负责将数字信息转换为电或光信号。网卡也无法单独工作,要控制网卡还需要网卡驱动程序。网卡并不是通上电之后就可以马上开始工作的,而是和其他硬件一样,都需要进行初始化。打开计算机启动操作系统的时候,网卡驱动程序会对硬件进行初始化操作(硬件错误检查、初始设置等步骤),然后硬件才进入可以使用的状态。网卡的ROM中保存着全世界唯一的MAC地址,这是在生产网卡时写入的,网卡驱动读取ROM中的MAC地址并分配给MAC模块。
网卡驱动从IP模块获取包之后,会将其复制到网卡内的缓冲区中,然后向MAC模块发送发送包的命令。首先,MAC模块会将包从缓冲区中取出,并在开头加上报头和起始帧分界符,在末尾加上用于检测错误的帧校验序列(FCS)。
报头是一串像10101010…这样1和0交替出现的比特序列,长度为56比特,它的作用是确定包的读取时机。末尾的FCS(帧校验序列)用来检查包传输过程中因噪声导致的波形紊乱、数据错误,它是一串32比特的序列,是通过一个公式对包中从头到尾的所有内容进行计算而得出来的。加上报头、起始帧分界符和FCS之后,就可以将包通过网线发送出去了。
MAC模块将电信号交给PHY(MAU)模块,PHY(MAU)模块将数据转换为可在网线上传输的电信号,并通过网线发送出去。在这里,将数字信息转换为电信号的速率就是网络的传输速率,例如每秒将10 Mbit的数字信息转换为电信号发送出去,则速率就是10 Mbit/s。
发送信号的操作分为两种,一种是使用集线器的半双工模式,另一种是使用交换机的全双工模式。
在半双工模式中,为了避免信号碰撞,首先要判断网线中是否存在其他设备发送的信号。如果有,则需要等待该信号传输完毕,因为如果在有信号时再发送一组信号,两组信号就会发生碰撞。PHY(MAU)模块提供监控接收线路中有没有信号进来的功能,在确认没有其他信号进来的情况下,才会开始发送。
全双工模式我们会在探索交换机时进行学习,在全双工模式中,发送和接收可以同时进行,不会发生碰撞。
接收与上述过程刚好相反,信息先以电信号的形式从网线传输进来,首先,PHY(MAU)模块会将信号转换成通用格式并发送给MAC模块,MAC模块再从头开始将信号转换为数字信息,当到达信号的末尾时,需要检查FCS。如果FCS校验没有问题,接下来就要看一下MAC头部中接收方MAC地址与网卡在初始化时分配给自己的MAC地址是否一致,如不一致则丢弃,如一致,则将包放入缓冲区中。到这里,MAC 模块的工作就完成了,接下来网卡会通知计算机收到了一个包。
通过系统的中断机制,网卡驱动被中断处理程序调用后,会从网卡的缓冲区中取出收到的包,并通过MAC头部中的以太类型字段判断协议的类型,如果是IP协议,网卡驱动就会把这样的包交给TCP/IP协议栈。IP模块开始工作了,第一步是检查IP头部,确认格式是否正确。如果格式没有问题,下一步就是查看接收方IP地址是否与本地IP一致(当不一致时,IP模块会通过ICMP消息将错误告知发送方)。如果接收方IP地址正确,则这个包会被接收下来,这时还需要完成另一项工作:如果接收到的包是经过分片的,那么IP模块进行分片重组(当收到分片的包时,IP 模块会将其暂存在内部的内存空间中,然后等待IP头部中具有相同ID的包全部到达,这是因为同一个包的所有分片都具有相同的ID。此外,IP头部还有一个分片偏移量字段,它表示当前分片在整个包中所处的位置。根据这些信息,在所有分片全部收到之后,就可以将它们还原成原始的包),到这里,IP模块的工作就完成了,接下来包交给TCP模块。
TCP模块会根据 IP头部中的接收方和发送方IP地址,以及TCP头部中的接收方和发送方端口号来查找对应的套接字。找到对应的套接字之后,就可以根据套接字中记录的通信状态,执行相应的操作了。
2、 以太网基本知识
以太网原型的本质其实就是一根网线,还有一种叫作收发器的小设备,它的功能只是将不同网线之间的信号连接起来而已。因此,当一台计算机发送信号时,信号就会通过网线流过整个网络,最终到达所有的设备。在信号的开头加上发送者和接收者的信息,也就是两者的MAC地址。这样一来就能够判断信号是谁发出的,应该由谁接收。与接收者地址匹配的设备就接收这个包,其他的设备则丢弃这个包,这样我们的包就送到指定的目的地了。
以太网原型后来变成了采用中继式集线器的结构。这个结构是将主干网线替换成了一个中继式集线器,将收发器网线替换成了双绞线。不过,虽然网络的结构有所变化,但信号会发送给所有设备这一基本性质并没有改变。
交换式集线器的结构就是现在我们说的以太网的结构。这个结构看上去和中继式集线器很像,但其实里面有一个重要的变化,即信号会发送给所有设备这一性质变了,现在信号只会流到根据MAC地址指定的设备,而不会到达其他设备了。当然,根据MAC地址来传输包这一点并没有变,因此MAC头部的设计也得以保留。