- 网络分层:
- IP层:IP层具有全局定位功能,如:192.168.1.100/24 由三个点分开,然后其中每个为8位大小(最大255),其中24表示前24位为网络好,后面的8位为机器号。
- MAC 层:MAC层只具有同个网络内的定位能力。
- 传输层:TCP和UDP协议
- 应用层:这部分放在用户态与具体程序相关。
- 发送流程
- TCP 层:在 TCP 层创建用于维护连接、序列号、重传、拥塞控制的数据结构,将 HTTP 包加上 TCP 头,发送给 IP 层
- IP层:IP 层加上 IP 头,发送给 MAC 层
- MAC 层:MAC 层加上 MAC 头,从硬件网卡发出去 。
- 交换机:交换机会将网络包的 MAC 头拿下来,发现目标 MAC 是在自己右面的网口,于是就从这个网口发出去。
- 路由器:网络包会到达中间的 Linux 路由器,它左面的网卡会收到网络包,发现 MAC 地址匹配,就交给 IP 层,在 IP 层根据 IP 头中的信息,在路由表中查找。下一跳在哪里,应该从哪个网口发出去?在这个例子中,最终会从右面的网口发出去。我们常把路由器称为三层设备,因为它只会处理到第三层。
- 接收端服务器:Linux 服务器 B,它发现 MAC 地址匹配,就将 MAC 头取下来,交给上一层。IP 层发现 IP 地址匹配,将 IP 头取下来,交给上一层。TCP 层会根据 TCP 头中的序列号等信息,发现它是一个正确的网络包,就会将网络包缓存起来,等待应用层的读取。
- 应用层通过 Socket 监听某个端口,因而读取的时候,内核会根据 TCP 头中的端口号,将网络包发给相应的应用。