一个 http 请求由多个 tcp 数据包组成,一个 tcp 连接可以发送多个 http 请求,是这样吗?

2022-11-16 08:04:44 +08:00
 wsWmsw

tcp 连接tcp 数据包的区别

2265 次点击
所在节点    HTTP
26 条回复
admirez
2022-11-16 08:15:00 +08:00
tcp 是流不是包啊
coolzjy
2022-11-16 08:15:08 +08:00
一个 http 请求由多个 tcp 数据包组成:不确定

一个 tcp 连接可以发送多个 http 请求:是的
kop1989smurf
2022-11-16 08:16:11 +08:00
一个 http 请求包含一个完整的 tcp 链接生命周期(从握手到断开)。所以后半句是错的。

http 请求是一种使用 tcp 实现的通信标准,他不能和 tcp 混在一起讨论。

类似于寿司和米饭的关系。
kop1989smurf
2022-11-16 08:26:43 +08:00
当然,就像楼上说的,http 后来也进行了标准的优化,在 http1.1 中引入了 HTTP 持久连接( HTTP keep-alive )的设计,但这就是后话了。
villivateur
2022-11-16 08:27:17 +08:00
@kop1989smurf http2 似乎是复用一个 tcp 连接,同时传输多个 http
kop1989smurf
2022-11-16 08:30:57 +08:00
@villivateur 感谢指正,我也想到这么说有过度简化导致误导的嫌疑,所以上文也补充了
strengthen
2022-11-16 08:32:21 +08:00
HTTP 请求
TCP 请求
是两个概念。。
lambdaq
2022-11-16 08:33:43 +08:00
一个 tcp 连接只能收发一个 http/1.0 请求
一个 tcp 只能依次顺序收发多个 http/1.1 非 pipeline 请求。如果是 pipeline 可以批量收发
一个 tcp 连接可以乱序收发多个 http/2 请求,一个 http/2 请求可以 demux 到多个 tcp 连接上
一个或多个 udp 包(无连接)可以收发多个 http/3 请求
wsWmsw
2022-11-16 09:50:49 +08:00
@coolzjy 为什么 http 请求由多个数据包组成是不确定的?

@lambdaq
@coolzjy 有的浏览器有一个 host 最大打开 6 个 tcp 的限制,请问可以确定 1 个 tcp 可以发送多少 http 连接吗?这样我能确定哪些请求被阻塞了
monkeyWie
2022-11-16 10:01:17 +08:00
@wsWmsw #9 一个 tcp 可以发送无限个 http 请求,如果不想被浏览器最大并发 tcp 连接限制,直接上 http2 就行了
lambdaq
2022-11-16 10:02:14 +08:00
@wsWmsw 因为 IP 网络是包交换网络。包有大有小,但是系统内核会负责把包裹按顺序组装好给应用使用。
xtinput
2022-11-16 10:03:30 +08:00
@kop1989smurf 最新的 http 是可复用的,不需要频繁建立连接
otakustay
2022-11-16 10:27:02 +08:00
@wsWmsw #9 一个包够用了的话,自然就不会由多个数据包组成了
liuxingdeyu
2022-11-16 10:48:12 +08:00
tcp 是把数据切成一个包一个包的发,然后收到的那边校验数据完整性并根据序号排序,这样你就可以认为这东西是流。http 是再往上的协议,tcp 负责的是把 http 想要的东西完整的扔过去,所以 http 可以选择一个请求建一个 tcp 链接,也可以拉个长链接一直用。当然,不用 tcp 也不是不行,quic 就是用的 udp ,但是自己做了校验和排序
tianyou666shen
2022-11-16 15:22:05 +08:00
这个系统的教程看看理解一下呗
只言片语也没法给你一个整体的脉络层级
wsWmsw
2022-11-16 17:01:50 +08:00
@tianyou666shen 《网络是怎样连接的》、《图解 HTTP 》、《图解 TCP/IP 》这三本以外有推荐的吗,博文也行
tianyou666shen
2022-11-16 17:16:05 +08:00
@wsWmsw
我是看的慕课网
咚咚呛的计算机基础 讲的比较细
Jooooooooo
2022-11-16 21:11:59 +08:00
粘包警告
wsWmsw
2022-11-16 21:32:47 +08:00
@tianyou666shen ok ,谢谢
Taojun0714
2022-11-16 22:25:12 +08:00
@admirez 粘包警察巴甫洛夫反射前能不能了解下什么是 TCP packet

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/895552

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX