TCP和HTTP协议有什么区别?
概念
1、TCP对应与传输层、而HTTP对应于应用层;
2、TCP是网络传输协议, HTTP是超文本传输协议;
TCP是底层协议,定义的是数据传输和连接方式的规范。
HTTP是应用层协议,定义的是传输数据的内容的规范。
HTTP也支持使用UDP协议(HTTP3),现在也有基于UDP的可靠协议QUIC。
困惑点
HTTP 是短连接,TCP 是长连接?
其实是一个历史上正确、现在容易误导的说法。
严格来说:
HTTP 不是连接 TCP 才是连接HTTP 本身只是协议,不存在“连接长短”的概念。
真正的说法应该是:
HTTP 可以使用短连接模式 HTTP 也可以使用长连接模式 底层都运行在 TCP 连接之上HTTP/1.0 为什么被称为短连接?
因为它默认一次请求完就关闭连接了。
3次握手连接和4次挥手断连,导致消息传输效率很低,所以HTTP也会使用keep alive,保持TCP连接
当请求一个Http接口时会发生什么?一套完整的流程是什么样的?
比如请求一个后端接口http://localhost:9776/test/hello,后端直接返回一个hello,流程是怎样的?
完整流程如下图:
分析:
连接
当回车时会先进行TCP连接(三次握手),可见图中编号171、173、175
171:客户端请求连接 173:服务端同意连接 175:客户端收到同意连接 176:服务端告知客户端TCP窗口大小调整。也就是Win=407808,告诉客户端:我还能接收 407808 字节,这是 TCP 流控,如果客户端要发的内容超过了窗口大小,就会进入客户端的本地Socket缓存中等待发送发送业务数据
177:客户端发送真实业务内容。HTTP协议其实就作用在 TCP payload (170 bytes),就是将业务内容实用HTTP协议进行编码,然后放置在TCP协议的Data中复制出16进制数据如下:
474554202f746573742f68656c6c6f20485454502f312e310d0a557365722d4167656e743a20417069666f782f312e302e30202868747470733a2f2f617069666f782e636f6d290d0a4163636570743a202a2f2a0d0a486f73743a206c6f63616c686f73743a393737360d0a4163636570742d456e636f64696e673a20677a69702c206465666c6174652c2062720d0a436f6e6e656374696f6e3a206b6565702d616c6976650d0a0d0a
转译出结果如下
GET /test/hello HTTP/1.1
User-Agent: Apifox/1.0.0 (https://apifox.com)
Accept: */*
Host: localhost:9776
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
178:服务端回复收到请求内容 181:服务端发送需要响应的内容16进制数据转译出结果如下:
HTTP/1.1 200
Content-Type: text/plain;charset=UTF-8
Content-Length: 5
Date: Fri, 29 May 2026 03:14:40 GMT
Keep-Alive: timeout=60
Connection: keep-alivehello
182:客户端收到服务端发送的内容断开连接
四次挥手断开连接
207:客户端请求断开连接 208:服务端收到客户端的断开连接请求 209:服务端请求断开连接 210:客户端收到服务端的断开连接请求结束🔚
补充:
发到哪了? Seq
收到哪了? Ack
还能收多少? Win
数据有多少? Len
一车最多拉多少? MSS
仓库能扩多大? WS
什么时候发的? TSval
我回复的是哪个时间?TSecr
