一次网络请求的完整旅程(总装)
复习
- DNS 查询与缓存:域名被解析为 IP 地址
- 路由器与逐跳转发:数据包被一跳一跳接力
- TLS 握手与 HTTPS:安全通道保护通信
- HTTP 请求与响应:浏览器与服务器交换资源
TL;DR
- 从输入网址到页面出现,是一次跨越全部分层的旅程
- 应用、传输、网络、链路各层依次参与
- 每一步都用到了前面学过的机制
- 分层与协作,是整张网络得以运转的关键
正文
这是计算机网络部分的最后一章。让我们跟着一次真实的发生,把前面所有零件串成一条完整的线:你在浏览器里敲下一个网址,按下回车,到页面出现——这中间究竟发生了什么?
第一站:知道往哪去
浏览器首先需要把域名变成IP 地址。
- 先查各层缓存,命中就省事了
- 没有,就交给解析器,沿域名树逐级询问,直到拿到地址
同时,如果目标内容在附近的 CDN 节点就有,后面的请求可能根本不必回源到很远的主机。
第二站:把包送到对面
有了地址,数据包开始上路:
- 若目标在本地网络,直接交付
- 若在远方,交给默认网关,由一台台路由器逐跳接力
- 每一跳都可能重新封装链路层帧,涉及 ARP、NAT 等机制
网络层负责端到端的方向,链路层负责每一跳的交付——这正是我们反复强调的分工。
第三站:建立可靠的、安全的通道
到达目标主机后,还要把数据稳妥、保密地送进正确的程序:
- TCP 先通过三次握手建立可靠连接
- 在它之上,TLS 做握手:验证服务器证书、协商会话密钥
- 之后的数据,用对称加密保护
于是,可靠(TCP)与安全(TLS)两件事,在传输层和它之上稳稳落地。
第四站:交换内容
通道好了,HTTP 开始工作:浏览器发请求,服务器回响应。响应里的网页、图片、样式、脚本,可能一部分直接来自缓存或 CDN 节点。
页面渲染出来。整个过程,往往在几百毫秒内完成。
回头看这张图
把这条旅程按层次排一下:
应用层 HTTP、DNS
传输层 TCP、UDP(端口)
网络层 IP、路由、ICMP
链路层 帧、MAC、以太网、无线
物理层 信号与介质
每层只做自己那一件事,把其余交给上下层。没有哪一层需要理解全部,可合在一起,却能完成一件惊人的事。
这就是分层的威力,也是这一部分的主题:复杂如互联网,也不过是一层层简单约定叠加出来的。 从一根线传一个比特,到一次完整的网页访问,我们终于走完了全程。
数据的组织与步骤的安排,其实无处不在:调度要挑进程,缓存要挑淘汰,路由要挑路径。它们背后是同一个问题——怎样组织数据、怎样安排步骤。这,正是我们接下来要走进的领域:数据结构与算法。
思考题 1
一次网页访问中,DNS、TCP、TLS、HTTP 分别在什么时候起作用?
思考题 2
如果说“没有分层,网络将变成一团乱麻”,你能举出分层带来的至少两个具体好处吗?
小结
知识点
- 一次访问依次经过 DNS、路由、TCP、TLS、HTTP
- 各层各司其职、协同完成通信
- 缓存与 CDN 让内容更近、更快
- 分层是网络可构建、可理解、可修复的基础
参考资料
- Wikipedia(zh):互联网协议套件:构成互联网的分层协议集合
- Wikipedia(zh):OSI模型:网络通信的分层参考模型
思考题答案(仅供参考)
思考题 1
DNS 最先起作用,把域名解析成 IP;随后 TCP 建立可靠连接、TLS 建立安全通道;通道就绪后,HTTP 才发送请求并接收响应。它们按先后顺序各司其职,共同完成一次访问。
思考题 2
例如:一是便于分工与演进,某一层更换实现(如有线换无线)不影响其他层;二是便于理解与排障,出问题时可以按层逐步定位,而不必在混乱的整体中瞎找。此外还便于复用与标准化。
协议
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
封面图
设计师 | 南国微雪