焦点

Web服务用了什么协议

时间:2010-12-5 17:23:32  作者:知识   来源:知识  查看:  评论:0
内容摘要:```html 打开浏览器,输入网址,敲下回车。几毫秒后,一个页面出现在你眼前。这背后,是几十台甚至上百台机器在协同工作。它们之间靠什么交流?靠协议。Web服务不是单一协议能撑起来的,它是一套协议栈,

```html

打开浏览器,什协输入网址,什协敲下回车。什协几毫秒后,什协一个页面出现在你眼前。什协这背后,什协是什协几十台甚至上百台机器在协同工作。它们之间靠什么交流?什协靠协议。Web服务不是什协单一协议能撑起来的,它是什协一套协议栈,像一摞盘子,什协每层干自己的什协事,又得配合上下层。什协

最底下是什协TCP/IP。这玩意儿是什协互联网的基石,Web服务跑在它上面。你发一个HTTP请求,先得跟服务器建立TCP连接——三次握手,SYN、SYN-ACK、ACK。这个过程听起来简单,但你要是用curl -v看一个请求的详细过程,会发现TCP握手之后才轮到HTTP出场。TCP负责把数据切成小包,编号,确保对方收到,丢包了就重传。IP负责把这些包路由到正确的机器。没有TCP/IP,HTTP就是空中楼阁。

HTTP才是Web服务的核心协议。超文本传输协议,名字就告诉你它传的是超文本——HTML、CSS、JS、图片、视频,什么都传。HTTP是无状态的,每次请求独立,服务器不记得你上次来过。这设计当年是为了简单,现在成了麻烦,所以才有了Cookie、Session、Token这些补丁。HTTP/1.1用了二十多年,队头阻塞问题一直被人诟病。一个页面要加载几十个资源,浏览器只能开六个并发连接,剩下的排队。后来有了HTTP/2,多路复用,一个连接跑所有请求,二进制分帧,头部压缩。HTTP/3更狠,直接扔掉TCP,改用QUIC,基于UDP,把握手和加密合并,延迟更低。Google推HTTP/3推了好几年,现在Cloudflare、Fastly这些CDN都支持了,但很多老服务器还在跑HTTP/1.1。

HTTPS是HTTP加TLS。TLS在传输层和应用层之间插了一脚,负责加密、认证、完整性校验。你访问银行网站,地址栏那个小锁图标就是TLS在工作。TLS握手比TCP握手复杂得多,要交换证书、协商密钥、验证身份。RSA和ECDHE是常见的密钥交换算法,AES和ChaCha20是常见的对称加密算法。TLS 1.3把握手从两次往返砍到一次,甚至零次往返(会话恢复)。但TLS不是万能的,证书过期、配置错误、中间人攻击,照样出问题。我见过一个生产事故,证书到期没续,整个站点直接不可用,用户看到的是浏览器的大红警告页。

WebSocket是另一个协议,跟HTTP不一样。HTTP是请求-响应模式,客户端不问,服务器不说。WebSocket是全双工,建立连接后双方都能随时发消息。聊天室、实时股票行情、多人协作编辑,这些场景用WebSocket比HTTP轮询高效得多。WebSocket握手借用了HTTP的Upgrade头,握手完成后就切换到自己的协议帧格式。它跑在TCP上,默认端口80和443,跟HTTP共用。但WebSocket不是HTTP的替代品,它是补充。你不可能用WebSocket加载一个网页,那不现实。

还有HTTP/2的服务器推送。服务器可以在客户端请求HTML之前,主动把CSS和JS推过去。听起来很美,实际用起来坑不少。推送的资源如果客户端已经缓存了,就浪费带宽。推送的优先级不好控制,可能把关键资源挤掉。Chrome后来干脆废掉了服务器推送,改用103 Early Hints状态码,让服务器提前告诉客户端要加载哪些资源,客户端自己决定要不要请求。这个改动挺务实,说明协议设计不能光靠理论,得看实际效果。

DNS也绕不开。你输入example.com,浏览器得先问DNS服务器这个域名对应的IP是什么。DNS查询走UDP,默认端口53。DNS over HTTPS(DoH)和DNS over TLS(DoT)是最近几年的新玩意儿,把DNS查询加密,防止运营商劫持和窥探。Firefox和Chrome都支持DoH了,但默认开启的还不多。我自己的路由器上配了DoH,解析速度没感觉慢多少,隐私倒是好了不少。

Web服务的协议栈不是一成不变的。HTTP/3在改,QUIC在改,TLS在改,连DNS都在改。每次改动背后都是性能、安全、兼容性的权衡。你写一个Web应用,可能根本不用关心底层用了什么协议,框架和库都帮你封装好了。但出了问题时,懂协议的人能更快定位。比如一个请求超时,是TCP重传了太多次,还是TLS握手失败了,还是HTTP/2的流控窗口满了?这些细节,日志里不一定写得清楚,但协议层面能看出来。

协议是死的,实现是活的。同一个HTTP/1.1,Nginx和Apache的行为可能不一样。同一个TLS 1.3,OpenSSL和BoringSSL的默认配置可能不同。Web服务的性能问题,很多时候不是协议本身的问题,而是实现的问题。调优的时候,别光盯着协议规范看,多看看实际跑的数据。

```
最近更新
热门排行
copyright © 2026 powered by 力不从心网   sitemap