数据在相同网段或不同网段转发原理基本一致
分为本地转发和远程转发 都依据tcp/ip协议
tcp封装过程
–主机建立tcp连接
–应用层封装(加密和解压缩等相关操作)
–传输层封装(假设为web应用 基于tcp协议传输 必须填充源端口号 目的端口号 初始序列号 确认序列号 标识位 窗口大小)
–网络层封装(使用ip进行封装 需明确ip报文的源地址和目的地址 如果数据大于网络的最大传输单元 在传输的过程中会被分片)
–查找路由–封装成数据帧(主机需获取下一跳mac地址 也就是网关的mac地址 首先查询arp缓存表 如果没有网关的mac 就会发送arp请求来获取网关的mac)
–数据链路层封装(遵循IEEE 802.3或者Ethernet 2 标准 源mac地址为自己的mac 目的mac为网关路由的mac地址)
–数据帧转发 (工作在半双工状态下 所以会使用csma/cd检测链路是否空闲 同一个冲突域都会收到主机A的发送的数据帧 但是只有网关会处理数据帧并继续转发 所有网络设备都会收到数据帧 会进行fcs校检 未通过则丢弃通过则检查目的MAC是否与自己的MAC相同 相同则处理 反之 丢弃 然后网关检查是否有到达目的的路由 如果存在则为数据包添加一个新的二层帧头和帧尾 继续转发 报文送到数据链路层重新封装 头部会封装成新的源MAC地址和目的MAC)
数据帧解封装
服务器端收到数据包后采用ip协议来处理 服务器会检查数据包内的目的ip 相同的话 就查看协议号 (假设为http服务)然后将数据送往上层协议tcp处理 服务器检查tcp头部端口号 为80 就会送往应用层http服务处理
数据在进行二层和三层封装之前 主机封装成数据包是 必须知道目的端口号 封装成数据帧是 必须知道下一跳的网关的mac
当数据帧发送到非目的的主机时 主机会检查mac地址 是就会处理 不是则丢弃
传输层会检查tcp或udp报文中的端口号的端口号来区分数据交给特定应用处理
两台主句同时访问服务器的http服务时 服务器可以只通过ip来区分流量 也可以通过tcp包头中的源端口号 区分 也可以通过不同的浏览器会话区分