tcp 连接和tcp 数据包的区别
1
admirez 2022-11-16 08:15:00 +08:00 via iPhone
tcp 是流不是包啊
|
2
coolzjy 2022-11-16 08:15:08 +08:00 via iPhone
一个 http 请求由多个 tcp 数据包组成:不确定
一个 tcp 连接可以发送多个 http 请求:是的 |
3
kop1989smurf 2022-11-16 08:16:11 +08:00 via iPhone
一个 http 请求包含一个完整的 tcp 链接生命周期(从握手到断开)。所以后半句是错的。
http 请求是一种使用 tcp 实现的通信标准,他不能和 tcp 混在一起讨论。 类似于寿司和米饭的关系。 |
4
kop1989smurf 2022-11-16 08:26:43 +08:00 via iPhone
当然,就像楼上说的,http 后来也进行了标准的优化,在 http1.1 中引入了 HTTP 持久连接( HTTP keep-alive )的设计,但这就是后话了。
|
5
villivateur 2022-11-16 08:27:17 +08:00 1
@kop1989smurf http2 似乎是复用一个 tcp 连接,同时传输多个 http
|
6
kop1989smurf 2022-11-16 08:30:57 +08:00 via iPhone
@villivateur 感谢指正,我也想到这么说有过度简化导致误导的嫌疑,所以上文也补充了
|
7
strengthen 2022-11-16 08:32:21 +08:00
HTTP 请求
TCP 请求 是两个概念。。 |
8
lambdaq 2022-11-16 08:33:43 +08:00 3
一个 tcp 连接只能收发一个 http/1.0 请求
一个 tcp 只能依次顺序收发多个 http/1.1 非 pipeline 请求。如果是 pipeline 可以批量收发 一个 tcp 连接可以乱序收发多个 http/2 请求,一个 http/2 请求可以 demux 到多个 tcp 连接上 一个或多个 udp 包(无连接)可以收发多个 http/3 请求 |
9
wsWmsw OP |
10
monkeyWie 2022-11-16 10:01:17 +08:00
@wsWmsw #9 一个 tcp 可以发送无限个 http 请求,如果不想被浏览器最大并发 tcp 连接限制,直接上 http2 就行了
|
12
xtinput 2022-11-16 10:03:30 +08:00
@kop1989smurf 最新的 http 是可复用的,不需要频繁建立连接
|
14
liuxingdeyu 2022-11-16 10:48:12 +08:00
tcp 是把数据切成一个包一个包的发,然后收到的那边校验数据完整性并根据序号排序,这样你就可以认为这东西是流。http 是再往上的协议,tcp 负责的是把 http 想要的东西完整的扔过去,所以 http 可以选择一个请求建一个 tcp 链接,也可以拉个长链接一直用。当然,不用 tcp 也不是不行,quic 就是用的 udp ,但是自己做了校验和排序
|
15
tianyou666shen 2022-11-16 15:22:05 +08:00
这个系统的教程看看理解一下呗
只言片语也没法给你一个整体的脉络层级 |
16
wsWmsw OP @tianyou666shen 《网络是怎样连接的》、《图解 HTTP 》、《图解 TCP/IP 》这三本以外有推荐的吗,博文也行
|
17
tianyou666shen 2022-11-16 17:16:05 +08:00
|
18
Jooooooooo 2022-11-16 21:11:59 +08:00
粘包警告
|
19
wsWmsw OP @tianyou666shen ok ,谢谢
|
20
Taojun0714 2022-11-16 22:25:12 +08:00
@admirez 粘包警察巴甫洛夫反射前能不能了解下什么是 TCP packet
|
21
wsWmsw OP @lambdaq
@liuxingdeyu 谢谢。那就是包够大、http/1.0 ,1 个 http 请求会建立 1 个 tcp 连接,而且连接中会收发各 1 个包,可以这样理解吗,这里的包没有明确定义,可以说是网络包也可以是 tcp 数据包吧? |
24
julyclyde 2022-11-17 11:24:36 +08:00
@Taojun0714 TCP 没有 packet 。TCP 只有 segment
|
25
julyclyde 2022-11-17 11:25:13 +08:00
要抱着分层的思想来学习网络知识
HTTP 使用了 TCP 提供的服务 TCP 提供的服务是“流” TCP 本身由 segment 构成,那是 TCP 自己的事,和 HTTP 没啥关系 |
26
liuxingdeyu 2022-11-17 11:39:55 +08:00 1
@wsWmsw 建议看看 osi 的七层模型。ip 层就是一个一个的数据包,扔给目标机器,加上端口,目标机器就能知道给哪个监听程序处理这个数据包(这会还跟 tcp 、udp 无关),tcp 收到包之后,校验完整性再发 ack 再排序,这样对于上面的 http 来看,tcp 提供的就是个完整的通道。你可以理解成,tcp 是个物流公司,有一台一台的大卡车,谁先到谁后到无所谓,车上有编号,也有人查货物完整性。http 是个用物流的,每次用的时候找个物流公司可以,找个长期的物流公司也行。quic 就相当于是找了一堆车自己维护货物的顺序自己查货损没损坏
|