2、网络基础回顾(上):OSI七层模型与TCP/IP四层模型、IP地址与端口、DNS解析过程
2.1 为什么还要回头看网络基础?
做网络加速器,说白了就是在跟网络协议打交道。你连基础都不懂,怎么去加速?
我记得刚入行那会儿,有个同事写了个UDP加速模块,结果跑在某个运营商网络里死活不通。查了三天,最后发现是中间某个节点把UDP包给丢了——这就是典型的传输层问题。从那以后,我养成了一个习惯:任何网络优化工作,先定位问题在哪个层级。
所以这一节,咱们把最核心的三个概念捋一遍。别嫌基础,这些都是后面实战的根基。
核心观点:网络加速的本质,就是在不同层级上做优化。你越清楚每一层在干什么,就越知道该从哪里下手。
2.2 OSI七层模型与TCP/IP四层模型
2.2.1 两个模型,一个目标
OSI七层模型是理论上的"完美方案",TCP/IP四层模型是实际用的"干活方案"。我个人习惯把两者对照着记,这样理解起来特别顺。
| OSI七层 | TCP/IP四层 | 典型协议/设备 | 一句话理解 |
|---|---|---|---|
| 应用层 | 应用层 | HTTP, DNS, FTP | 用户直接打交道的东西 |
| 表示层 | SSL/TLS, JPEG | 数据格式转换、加密 | |
| 会话层 | NetBIOS, RPC | 建立/管理会话 | |
| 传输层 | 传输层 | TCP, UDP | 端到端的可靠/不可靠传输 |
| 网络层 | 网络层 | IP, ICMP, 路由器 | 寻址和路由选择 |
| 数据链路层 | 网络接口层 | 以太网, MAC地址, 交换机 | 相邻节点间的传输 |
| 物理层 | 网线, 光纤, 集线器 | 比特流的物理传输 |
你想想看,一个数据包从你的浏览器发出去,要经过多少层?应用层打包数据,传输层加端口号,网络层加IP地址,链路层加MAC地址...每一层都在做封装。加速器要做的,就是想办法让这个过程更快、更稳。
2.2.2 我在项目中踩过的坑
我曾经接手过一个跨国加速项目,延迟总是降不下来。一开始我盯着网络层优化,换路由、调BGP,效果都不明显。后来仔细一查,发现是应用层的TLS握手太慢——每次连接都要来回好几趟。最后我们在传输层做了连接复用,延迟直接砍掉40%。
这个教训告诉我:问题出在哪一层,就要在哪一层解决。别拿着网络层的锤子,看什么都像钉子。
实战技巧:做加速器开发时,我建议你先把TCP/IP四层模型刻在脑子里。遇到性能问题,按层排查:应用层→传输层→网络层→链路层。90%的问题都能在这个框架里找到答案。
2.3 IP地址与端口
2.3.1 IP地址:网络世界的门牌号
IP地址分两种:IPv4和IPv6。IPv4是32位的,写成四个数字,比如192.168.1.1。IPv6是128位的,写成八组十六进制,比如2001:db8::1。
但说实话,做加速器开发,你更常打交道的是公网IP和私网IP的区别。公网IP全球唯一,私网IP只在局域网内有效。NAT(网络地址转换)就是干这个活的——把私网IP映射成公网IP。
注意:NAT是加速器的大敌。它会让P2P连接变得极其困难,也会增加延迟。很多加速方案的核心,就是想办法绕过NAT的限制。后面我们会专门讲NAT穿透技术。
2.3.2 端口:同一台机器上的不同服务
IP地址找到了机器,端口号找到了机器上的哪个程序。端口范围是0-65535,其中:
- 0-1023:知名端口,比如HTTP用80,HTTPS用443,DNS用53
- 1024-49151:注册端口,给应用程序用
- 49152-65535:动态/私有端口,客户端临时使用
我记得有一次调试加速器,发现某个游戏连不上服务器。抓包一看,客户端随机分配了一个端口,但服务器只认固定端口。这就是典型的端口不匹配问题。嗯,这里要注意:加速器必须能正确处理端口映射,否则游戏、视频这些应用全都会出问题。
2.4 DNS解析过程
2.4.1 从域名到IP的旅程
你在浏览器里输入www.example.com,回车。背后发生了什么?
- 浏览器缓存检查:先看看本地有没有存过这个域名的IP。有就直接用,没有就下一步。
- 操作系统缓存检查:浏览器没找到,问操作系统。操作系统也查一下自己的缓存。
- 本地DNS服务器:操作系统也没找到,就发给配置的DNS服务器(通常是运营商给的,或者你手动设的8.8.8.8)。
- 根DNS服务器:本地DNS不知道?它去问根服务器。根服务器说"我不知道具体IP,但你去问.com的顶级域名服务器"。
- 顶级域名服务器:.com服务器说"你去问example.com的权威DNS服务器"。
- 权威DNS服务器:终于,这个服务器知道
www.example.com的IP是多少,把结果返回。 - 缓存并返回:本地DNS拿到结果,缓存起来,然后返回给操作系统,再返回给浏览器。
整个过程看起来繁琐,但实际也就几十毫秒。不过,DNS解析是网络加速的关键环节之一。为什么?因为DNS劫持、DNS污染、DNS延迟,都会直接影响你的上网体验。
2.4.2 加速器如何优化DNS
我做过一个实验:用运营商的DNS解析一个国外网站,耗时800ms。换成公共DNS(比如1.1.1.1),降到200ms。再配合DNS缓存和预解析,直接压到50ms以内。
所以,好的加速器一定会做这几件事:
- 智能DNS选择:自动选最快的DNS服务器
- DNS缓存:减少重复查询
- DNS预解析:提前解析你可能要访问的域名
- 防DNS劫持:用加密DNS(DoH/DoT)防止被篡改
一句话总结:DNS解析是网络请求的第一步,也是加速器最容易出效果的地方。把DNS优化好了,用户体验能提升一大截。
2.5 本章知识体系
下面这张图,把这一节的核心逻辑串起来了。你可以看到,从模型到地址再到解析,每一步都是环环相扣的。
学习建议:这一节的内容,我建议你反复看三遍。第一遍通读,第二遍对照着抓包工具(比如Wireshark)看实际数据,第三遍自己画一遍知识体系图。三遍下来,这些概念就刻在脑子里了。
公众号:蓝海资料掘金营,微信deep3321