
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 @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 tf2 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 请求 |
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 liuingdeyu 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 7wN5407klUw768m0 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 @wsWmsw 建议看看 osi 的七层模型。ip 层就是一个一个的数据包,扔给目标机器,加上端口,目标机器就能知道给哪个监听程序处理这个数据包(这会还跟 tcp 、udp 无关),tcp 收到包之后,校验完整性再发 ack 再排序,这样对于上面的 http 来看,tcp 提供的就是个完整的通道。你可以理解成,tcp 是个物流公司,有一台一台的大卡车,谁先到谁后到无所谓,车上有编号,也有人查货物完整性。http 是个用物流的,每次用的时候找个物流公司可以,找个长期的物流公司也行。quic 就相当于是找了一堆车自己维护货物的顺序自己查货损没损坏 |