对于 TCP,请参阅以下文章:
TCP 三向握手 TCP 四向波 TCP 重传 TCP 滑动窗口 TCP 流控制 TCP 串扰控制网络可见性 TCP 三向握手 TCP 连接队列 TCP 性能优化远程定位 IP
TCP在进行数据传输时,会委托IP模块将数据封装成网络数据包发送给通信对象。
从上图可以看出,IP合约上需要源IP地址和目的IP地址。因为HTTP是TCP传输输入网址后就跳转到其他网址,所以IP头中的契约是0x06(代表TCP)。
客户端有多张网卡,源IP如何选择?
如果客户端有多个网卡(多个源IP地址),则必须根据路由表规则选择网卡(源IP地址)。
# linux中查看路由表
route -n
具体选择步骤如下:
对路由表中的目标地址和子网段执行 AND 操作。如果计算结果与路由中的Destination一致,则将路由对应的网卡IP地址作为路由表中的源IP地址。一个特殊的路由,目的地址和子网段都是0.0.0.0(代表默认网段,Gateway是路由器的IP地址),如果其他路由失败match输入网址后就跳转到其他网址,它也手动匹配。两点传输MAC
IP back生成后,需要在IP back后面添加MAC face。
MAC Yulin 需要发送者的 MAC 地址和接收者的 MAC 地址。在 TCP/IP 通信中,合约只有两种:
关于ARP如何获取接收者的MAC地址,可以阅读以下文章:
如何查看MAC地址缓存
arp -a
ARP缓存一般由三部分组成:
导出网卡
网络包只是显存中的一串补码信息,很难直接发给对方。需要网卡才能将数字信息转换成可以通过网线传输的电路信号。
控制网卡需要使用网卡驱动。网卡驱动从IP层获取数据包后,会将其复制到网卡中的缓冲区中,然后在开头加上header和start frame delimiter,并在最后加上一个frame校准序列,用于测量误差.
数据包封装后,网卡会将数据包转换为联通号码,通过网线发送出去。
开关
交换机是二层网络设备,用于将原始数据包转发到目的地。
交换机的端口没有MAC地址。
交换机中有一个MAC地址表。 MAC地址表主要包含两条信息:
交换机的收包操作
网线中的联通号到达交换机的网线插口。交换机收到联通号码后,会将联通号码转换为数字信号,并在包尾通过FCS校准。 ,需要检查数据包接收方的MAC地址是否在交换机的MAC地址表中。如果MAC地址表中有匹配记录,则通过交换电路将数据包发送到记录上的端口。
没有MAC地址表怎么办?
如果MAC地址表中没有对应的MAC地址,交换机就很难确定将数据包转发到端口。在这种情况下,交换机会将数据包发送到除源端口之外的所有端口。端口上的设备收到数据包后,如果自己的MAC地址与数据包中的MAC地址匹配,就会收到数据包并做出响应。只要响应返回,交换机就可以将其写入 MAC 地址表。无需向所有端口发送数据包。
如果接收方是广播地址,交换机仍会将数据包发送到源端口以外的所有端口。
路由器
数据包经过交换机后,成功到达路由器,转发到下一个路由器或路由器上的目标设备。
路由器是一个三层网络设备,每个端口都有一个MAC地址和一个IP地址。
路由器的发送和接收过程
路由器端口收到联通号码后,会将联通号码转发给数字信号路由器,在包尾校准FCS。如果没有问题,检查MAC腹部的接收方MAC地址是否与自己一致。放在接收缓冲区中,否则数据包会被直接扔掉。路由器收到数据包后,会将数据包中的MAC腹部去掉。路由器会根据IP后面的内容转发数据包,路由器会根据路由表进行搜索。一跳路由找到匹配的路由后,会根据路由表项中的Gateway列确定对方的地址。如果网段是IP地址,这个IP地址就是我们要转发的目的地址(此时目的还没有到达)。 ,路由器需要继续转发)如果网段为空,则IP后面的接收者IP地址为最终目的地址
目标IP地址确定后,会通过ARP确定MAC地址,最后将封装好的数据包(IP层的目标IP不会改变)发送出去。在整个包转发过程中,可以看到源IP和目的IP仍然没有变化,但是MAC地址还在变化。