本文采用知识共享 署名-相同方式共享 4.0 国际 许可协议进行许可。
访问 https://creativecommons.org/licenses/by-sa/4.0/ 查看该许可协议。

1) OSI 七层参考模型

  1. 应用层
  2. 表示层
  3. 会话层
  4. 传输控制层
  5. 网络层
  6. 链路层
  7. 物理层

2) TCP/IP 四层精简模型

2.1) 应用层 (用户界面)

2.2) 传输层 (Port)

三次握手 -> 数据传输 -> 四次分手

2.3) 网络层 (IP)

基于路由表实现,Linux 查看路由表 route -n,基础路由表来源是 OS 中的网卡配置。
网络层就是找到下一跳,从上往下基于路由表每一条做匹配:目标 IP 与一条路由的掩码做与运算,与该条目 Destination 匹配则找了下一跳。

2.4) 链路层 (MAC)

链路层基于 MAC 地址,将含有目标 IP 的数据包再套上一层,链路层也有一张路由表,Linux 查看路由表 `arp -a
arp 会解释 IP 和网卡 MAC 地址的映射,受限与局域网,将数据包丢给下一个节点(下一跳、下一个 MAC 地址)

2.4.1) ARP 路由表来源

当机器刚开机时,ARP 表是空的,只有下一跳的 IP,那么数据包应该怎么发出去呢?即本机 ARP 缓存表中没有目标地址的缓存,将会经历一个 ARP 解析流程:

  1. 打包一个包含(源 IP、源 MAC、目标 IP、目标MAC 为 FF:FF:FF:FF:FF:FF) 的包,交换机收到 MAC 地址为 FF:FF:FF:FF:FF:FF 的包时会将此包广播给其他所有 Port
  2. 的目标机器收到包,若机器 IP 不匹配下一跳 IP,此包将被丢弃
  3. 若 IP 匹配,则向源 MAC 回包,包含匹配目标机器的 MAC
  4. 源机器将此记录添入 ARP 表
2.4.1.1) ARP 欺骗

这里会引入一个 ARP 欺骗的问题,若同时有两台机器向源机器回 ARP Response,源机器最终会记录最后一个收到的 ARP Response,这就引发了 ARP 欺骗

2.5) TCP/IP 总结

从物理层开始,每一层都向上层提供服务访问点。
在连接因特网的普通微机上:

  • 物理层:服务访问点就是网卡接口 (RJ45接口或BNC接口)
  • 数据链路层:服务访问点是 MAC 地址
  • 网络层的服务访问点是 IP 地址
  • 传输层的服务访问点是 Port 端口号
  • 应用层提供的服务访问点是用户界面

3) Linux 命令行打开网站(不使用 CURL)

# 进入当前进程的文件描述符目录,0(stdin),1(stdout)和2(stderr)
cd /proc/$$/fd
# 创建一个 TCP Socket 输入输出链接文件 8,链接到百度
exec 8<> /dev/tcp/www.baidu.com/80
# 管道加 & 的意思代表 8 时文件描述符非文件
echo -e 'GET / HTTP/1.0\n' >& 8
# 将 8 的输出管道到 stdin
cat 0 <& 8

9) 参见