外观
TCP/IP、DNS、TLS、HTTP,怎样串成一次请求?
标准回答
可以把网络分层理解:DNS 帮你找地址,IP 负责寻址和转发,TCP 提供可靠有序的字节流,TLS 在其上保护连接,HTTP 规定请求和响应怎么表达。这里描述常见的 HTTPS over TCP;HTTP/3 使用 QUIC。
- TCP 有序传递字节,不替应用划分业务消息边界;自定义协议需要长度、分隔或明确编码。
- TCP 连接建立不等于业务可用,也不保证请求已经被服务端执行。
- 复用连接时可能省掉 DNS、建连和握手阶段,比较性能要区分首次连接与复用。
通俗例子
车机加载天气超时,可能是域名没解析出来,也可能 TCP 连不上、TLS 证书验证失败,或者服务器迟迟没返回。把各阶段耗时拆开,才能知道该查网络、证书还是后端。
深入解释
**每一层交付什么:**DNS 把域名解析为地址;IP 负责寻址转发;TCP 提供可靠有序的字节流;TLS 保护连接;HTTP 再定义方法、状态和消息含义。它们是分工关系。
**为什么会有粘包的说法:**TCP 没有“这次 read 恰好对应一条业务消息”的承诺,一次读取可能拿到半条或多条。自定义协议需要长度、分隔符等边界,不能按读取次数数消息。
易混淆点
把所有网络失败都叫“HTTP 超时”,会漏掉 HTTP 之前就失败的情况。
参考资料
内容来源
- Android · AI Agent 知识手册 · 原条目
job-N01