TCP模块在执行连接、收发、断开等各阶段操作时,都需要委托IP模块将数据封装成包发送给通信对象。
包的基本知识
包是由头部和数据两部分构成的。头部包含目的地址等控制信息,可以理解为快递包裹的面单;头部后面就是委托方要发送给对方的数据,也就是相当于包裹里的货物。
首先,发送方的网络设备会负责创建包,创建包的过程就是生成含有正确控制信息的头部,然后再附加上要发送的数据。接下来,包会发往最近的网络转化设备。当到达最近的转发设备之后,转化设备会根据头部中的信息判断接下来应该发往哪里。
这个过程里会有一张表,这张表里面记录了每一个地址对应的发送方向,也就是按照头部里记录的目的地址在表进行查询,并根据查到的信息判断接下来应该发往哪个方向。
包收发操作概览
IP模块会添加IP头部和mac头部这两种头部。IP头部中包含IP协议规定的、根据IP地址将包发往目的地所需的控制信息;MAC头部包含通过以太网的局域网将包传输至最近的路由器所需的控制信息。
无论要收发的包还是控制包还是数据包,IP对各种类型的包的收发操作都是相同的。
生成包含接收方IP地址的IP头部
IP头部最重要的内容是IP地址,这个地址的最初来源是应用程序。还需要填写发送方的地址,一般是由DHCP服务器自动分配。
因为协议栈的IP模块与路由器负责包收发的部分都是根据IP协议规则来进行包收发操作的,所以它们也都用相同的方法来判断把包发给谁。
生成以太网用的MAC头部
生成了IP头部后,接下来IP模块还需要在IP头部的前面加上MAC头部。
IP头部中的接收方IP地址表示网络包的目的地,通过这个地址我们就可以判断将包发到哪里,但在以太网的世界中,TCP/IP这个思路是行不通的。
以太网在判断网络包目的地是和TCP/IP的方式不同,因此必须采用相匹配的方式才能在以太网中将包发往目的地,而MAC头部就是干这个用的。
IP模块根据路由表Gateway栏的内容判断应该把包发送给谁。通过ARP查询目标路由器的MAC地址
在以太网中,有一种叫作广播的方法, 可以把包发给连接在同一以太网中的所有设备。ARP就是利用广播提问,从而获取对方的MAC地址。
以太网的基本知识
以太网是一种为多台计算机通够彼此自由和廉价地相互通信而设计的通信技术。
这种网络中任何一台设备发送的信息所有设备都能接收到。因此需要在信息的开头加上接收者的信息即地址,与接收者地址相匹配地设备就接收这个包,其他的设备则丢弃这个包。
将IP包转换成电或光信号发送出去
IP生成的包只是存放在内存中的一串数字信息,没有办法直接发送给对方。因些,我们需要将数字信息转化为电或光信号,才对在网线上传输,也就是说,这才是真正的数据发送过程。
负责执行这一操作的是网卡。网卡也无法单独工作,要控制网卡还需要网卡驱动程序。
给网络包再加3个控制数据
下面看一下网卡是如何将包转换成电信号并发送到到网线中的。
网卡驱动从IP模块获取包之后,会将其复制到网卡内的缓冲区中,然后向MAC模块发送发送包的命令。MAC模块会将包从缓冲区中取出,并在开头加上报头和起始帧分界符,在末尾加上用于检测错误的FCS(帧校验序列)。
用电信号来表达数字信息时,我们需要让0和1两种比特分别对应特定的电压和电流,这样的电信号就可以表达数字信息。
向集线器发送网络包
加上报头、起始帧分界符和FCS之后,我们就可以将包通过网线发送出去了。发送信号的操作分为两种,一种是使用集线器的半双工模式,另一种是使用交换机的全双工模式。
接收返回包
在使用集线器的半双工模式以太网中,一台设备发送的信号会到达连接在集线串的所有设备。这意味着无论是不是自己的信号都会通过接收线路传进来。
通知计算机的操作会使用一个叫作中断的机制。在网卡执行接收包的操作的过程中,计算机并不是一直监控着网卡的活动,而是去执行其他的任务。