从计算机发送出来的网络包会通过集线器、路由器等设备被转发,最终到达目的地。
经过集线器
当信号到达集线器后,会被广播到整个网络中,信号到达集线器的PHY(MAU)模块后,会进入中继电路。中继电路的基本功能就是将输入的信号广播到集线器的所有端口上。
接下来,信号从所有接口流出,到达连接在集线器上的所有设备,然后,这些设备在收到信号之后会通过MAC头部中的接收方MAC地址判断是不是发给自己的,如果是发给自己的就接受,否则就忽略。
经过交换机
首先,信号到达交换机的网线接口,并由PHY(MAU)模块进行接收。
接下来,PHY(MAU)模块会将网线中的信号转换为通用格式,然后传递给MAC模块,MAC模块将信号转换为数字信息,然后将信息存入缓冲区中。
将包存入缓冲区后,接下来需要查询一下这个包的接收方MAC地址是否已经在MAC地址表中有记录了,通过交换电路到达指定的端口。
当网络包通过交换电路到达发送端口时,端口中的MAC模块和PHY (MAU)模块会执行发送操作,将信号发送到网线中。
经过路由器
首先路由器会通过端口将发过来的包接收进来。
接下来,转发模块会根据接收到的包的IP头部中记录的接收方IP地址,在路由表中进行查询,以此判断转发目标。
然后,转发模块将包转移到转发目标对应的端口,端口再按照硬件的规则将包发送出去。
到达互联网
互联网接入路由器将数据包接收之后,根据IP头部记录的接收方的IP地址在路由表中查询对应的记录,然后转发给对应的网关。
互联网接入路由器转发数据包后,数据包进入ADSL Modem,然后,ADSL Modem会把包拆分成很多小格子,每一个小格子称为一个信元,然后将这些信元转换成信号了,ADSL Modem将信元转换为电信号之后,信号会进入一个叫作分离器的设备,然后ADSL信号会和电话的语音信号混合起来一起从电话线传输出去。
从分离器出来,就是插电话线的接口,信号从这里出来之后,会通过室内电话线,到达配线盘,通过配线盘之后,经过保安器,信号会进入电线杆上架设的电话电缆,经过电话线到达电话局。
信号通过电话线到达电话局之后,会经过配线盘、分离器到达DSLAM。电信号会被还原成数字信息——信元。信元从DSLAM出来之后,会到达一个叫作BAS的包转发设备,接下来,BAS会在包的前面加上隧道专用头部并发送到隧道的出口。
然后,网络包会到达隧道出口的隧道专用路由器在这里隧道头部会被去掉,IP包会被取出,并被转发到换联网。
到达网络运营商
网络包通过接入网之后,到达运营商POP的路由器,路由器根据路由表中的信息判断转发目标,经过几次转发之后,网络包就到达了Web服务器所在的POP的路由器,然后从这里被继续转发到Web服务器。
到达服务器
服务器的网卡接收到传输的电信号或者光信号,然后将其还原成数字信息。
接下来需要根据包末尾的帧校验序列(FCS)来校验错误,当FCS一致,即确认数据没有错误时,接下来需要检查MAC头部中的接收方MAC地址,看看这个包是不是发给自己的。如果是发给自己的就把数据存储在网卡的缓冲区中,否则就丢弃。
从网卡缓冲区中将接收到的包读取出来,根据MAC头部的以太类型字段判断协议的种类,并调用负责处理该协议的软件。
当网络包转交到协议栈时,IP模块会首先开始工作:
- 检查IP地址是否是发给自己的
- 检查是否分片,如果分片就等全部分片都接受完毕在还原,如果没有分片就存储
- 判断IP头部的协议字段,然后转发给对应的模块
TCP模块收到数据包时,执行以下操作:
4. 根据收到的包的发送方IP地址、发送方端口号、接收方IP地址、接收方端口号找到相对应的套接字
5. 将数据块拼合起来并保存在接收缓冲区中
6. 向客户端返回ACK
服务器接收数据完毕后,会根据数据内容执行对应的应用程序,然后把应用程序的执行结果返回给浏览器。