|
网络操作这件事,网络拆开看远比“上网”两个字复杂得多。操作你点一下手机屏幕,网络背后可能跑了几十种协议、操作跨了三个运营商、网络经过至少五台路由器。操作先别急着皱眉,网络咱们从最日常的操作场景说起。 打开浏览器输入一个网址,网络这动作叫HTTP请求。操作浏览器把你要的网络地址翻译成IP,比如把“baidu.com”换成“110.242.68.66”。操作这个翻译过程靠DNS解析完成。网络DNS服务器像一本巨大的操作电话簿,你问它“百度在哪”,网络它回你一个数字坐标。如果本地缓存里有记录,几毫秒就返回;没有的话,得一层层往上问,根域名服务器、顶级域名服务器、权威域名服务器,跑完一圈通常不超过200毫秒。但你要是碰上DNS污染或者服务器抽风,网页就会卡在“正在解析主机”那一步,转圈转到你怀疑人生。 拿到IP之后,浏览器和服务器之间要建立TCP连接。三次握手:你发SYN,对方回SYN+ACK,你再发ACK。听起来像对暗号,实际就是确认双方都能收发数据。这一步如果丢包,连接就建不起来,表现就是“连接超时”。我见过一个案例,某公司内网防火墙把SYN包全丢了,结果所有员工访问外部网站都失败,但ping外网IP却是通的——因为ping走的是ICMP,不经过TCP握手。 连接建好,数据开始传。这时候轮到HTTP协议干活。你发一个GET请求,服务器回200 OK和一堆HTML。但网页往往不止一个文件,图片、CSS、JS各自都要发请求。早期HTTP/1.1一个连接只能处理一个请求,后来有了keep-alive,再后来HTTP/2支持多路复用。现在很多网站用HTTP/3,底层换成QUIC协议,基于UDP,握手更快,丢包恢复也更聪明。你在手机上看视频不卡,多半是QUIC在帮忙。 数据从服务器到你手机,中间要经过路由和交换。路由器负责找路,交换机负责在局域网内转发。你家光猫是路由器,客厅的Wi-Fi扩展器是交换机加AP。数据包每经过一跳,TTL减一,减到零就丢弃。有次我 traceroute 一个国外网站,发现包在某个骨干网节点反复绕圈,TTL耗尽也没到达终点——典型的路由环路。运营商配置错误导致的,普通用户只能干等。 还有一类操作不靠浏览器,叫API调用。你手机上的天气App,背后是向气象服务器发一个POST请求,带JSON参数,服务器回JSON数据。这种操作通常走HTTPS,端口443。如果开发者偷懒用HTTP,你的位置和查询记录就可能被中间人截获。我见过一个智能灯泡的App,控制指令居然走明文HTTP,局域网里抓包就能看到开关灯的命令。 再往下挖,还有Socket编程。游戏联机、即时通讯、文件传输,很多不走HTTP,直接开TCP或UDP端口。UDP不保证可靠,但延迟低,适合语音和视频。TCP可靠但慢,适合文件。你打《王者荣耀》时卡顿,可能是UDP丢包;你下载Steam游戏时速度慢,可能是TCP窗口太小或者线路拥塞。 最后说个冷门的:ICMP和ARP。ICMP就是ping和traceroute用的协议,用来测试连通性。ARP用来把IP换成MAC地址,局域网内广播“谁是这个IP”,对应设备回“我是,我的MAC是XX”。ARP欺骗就是伪造这个回应,让流量经过攻击者的机器。公司断网有时候不是路由器坏了,是有人接了台设备发假ARP包。 网络操作远不止“打开网页”。每一次点击、每一次刷新、每一次消息发送,背后都是协议栈在层层配合。搞懂这些,下次断网你至少知道该先查DNS还是先看网线。 |