一个 http 请求由多个 tcp 数据包组成,一个 tcp 连接可以发送多个 http 请求,是这样吗? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
httpbin - 协议调试工具
httpstatuses - 协议状态码查询
httpie - cURL-like tool for humans
Fiddler
wsWmsw
V2EX    HTTP

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

  •  
  • &nbs; wsWmsw 2022-11-16 08:04:44 +08:00 2775 次点击
    这是一个创建于 1128 天前的主题,其中的信息可能已经有所发展或是发生改变。

    tcp 连接tcp 数据包的区别

    26 条回复    2022-11-17 11:39:55 +08:00
    admirez
        1
    admirez  
       2022-11-16 08:15:00 +08:00 via iPhone
    tcp 是流不是包啊
    coolzjy
        2
    coolzjy  
       2022-11-16 08:15:08 +08:00 via iPhone
    一个 http 请求由多个 tcp 数据包组成:不确定

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

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

    类似于寿司和米饭的关系。
    kop1989smurf
        4
    kop1989smurf  
       2022-11-16 08:26:43 +08:00 via iPhone
    当然,就像楼上说的,http 后来也进行了标准的优化,在 http1.1 中引入了 HTTP 持久连接( HTTP keep-alive )的设计,但这就是后话了。
    villivateur
        5
    villivateur  
       2022-11-16 08:27:17 +08:00   1
    @kop1989smurf http2 似乎是复用一个 tcp 连接,同时传输多个 http
    kop1989smurf
        6
    kop1989smurf  
       2022-11-16 08:30:57 +08:00 via iPhone
    @villivateur 感谢指正,我也想到这么说有过度简化导致误导的嫌疑,所以上文也补充了
    strengthen
        7
    strengthen  
       2022-11-16 08:32:21 +08:00
    HTTP 请求
    TCP 请求
    是两个概念。。
    tf2
        8
    tf2  
       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 请求
    wsWmsw
        9
    wsWmsw  
    OP
       2022-11-16 09:50:49 +08:00
    @coolzjy 为什么 http 请求由多个数据包组成是不确定的?

    @lambdaq
    @coolzjy 有的浏览器有一个 host 最大打开 6 个 tcp 的限制,请问可以确定 1 个 tcp 可以发送多少 http 连接吗?这样我能确定哪些请求被阻塞了
    monkeyWie
        10
    monkeyWie  
       2022-11-16 10:01:17 +08:00
    @wsWmsw #9 一个 tcp 可以发送无限个 http 请求,如果不想被浏览器最大并发 tcp 连接限制,直接上 http2 就行了
    tf2
        11
    tf2  
       2022-11-16 10:02:14 +08:00
    @wsWmsw 因为 IP 网络是包交换网络。包有大有小,但是系统内核会负责把包裹按顺序组装好给应用使用。
    xtinput
        12
    xtinput  
       2022-11-16 10:03:30 +08:00
    @kop1989smurf 最新的 http 是可复用的,不需要频繁建立连接
    otakustay
        13
    otakustay  
       2022-11-16 10:27:02 +08:00
    @wsWmsw #9 一个包够用了的话,自然就不会由多个数据包组成了
    liuxingdeyu
        14
    liuingdeyu  
       2022-11-16 10:48:12 +08:00
    tcp 是把数据切成一个包一个包的发,然后收到的那边校验数据完整性并根据序号排序,这样你就可以认为这东西是流。http 是再往上的协议,tcp 负责的是把 http 想要的东西完整的扔过去,所以 http 可以选择一个请求建一个 tcp 链接,也可以拉个长链接一直用。当然,不用 tcp 也不是不行,quic 就是用的 udp ,但是自己做了校验和排序
    tianyou666shen
        15
    tianyou666shen  
       2022-11-16 15:22:05 +08:00
    这个系统的教程看看理解一下呗
    只言片语也没法给你一个整体的脉络层级
    wsWmsw
        16
    wsWmsw  
    OP
       2022-11-16 17:01:50 +08:00
    @tianyou666shen 《网络是怎样连接的》、《图解 HTTP 》、《图解 TCP/IP 》这三本以外有推荐的吗,博文也行
    tianyou666shen
        17
    tianyou666shen  
       2022-11-16 17:16:05 +08:00
    @wsWmsw
    我是看的慕课网
    咚咚呛的计算机基础 讲的比较细
    Jooooooooo
        18
    Jooooooooo  
       2022-11-16 21:11:59 +08:00
    粘包警告
    wsWmsw
        19
    wsWmsw  
    OP
       2022-11-16 21:32:47 +08:00 via Android
    @tianyou666shen ok ,谢谢
    7wN5407klUw768m0
        20
    7wN5407klUw768m0  
       2022-11-16 22:25:12 +08:00
    @admirez 粘包警察巴甫洛夫反射前能不能了解下什么是 TCP packet
    wsWmsw
        21
    wsWmsw  
    OP
       2022-11-16 23:26:53 +08:00
    @lambdaq
    @liuxingdeyu 谢谢。那就是包够大、http/1.0 ,1 个 http 请求会建立 1 个 tcp 连接,而且连接中会收发各 1 个包,可以这样理解吗,这里的包没有明确定义,可以说是网络包也可以是 tcp 数据包吧?
    tf2
        22
    tf2  
       2022-11-17 10:08:37 +08:00
    @wsWmsw 网络包 和 tcp 数据包这种概念你还是多去了解下吧。不要胡猜。。。
    wsWmsw
        23
    wsWmsw  
    OP
       2022-11-17 11:10:32 +08:00
    @lambdaq 嗯,好的
    julyclyde
        24
    julyclyde  
       2022-11-17 11:24:36 +08:00
    @Taojun0714 TCP 没有 packet 。TCP 只有 segment
    julyclyde
        25
    julyclyde  
       2022-11-17 11:25:13 +08:00
    要抱着分层的思想来学习网络知识
    HTTP 使用了 TCP 提供的服务
    TCP 提供的服务是“流”
    TCP 本身由 segment 构成,那是 TCP 自己的事,和 HTTP 没啥关系
    liuxingdeyu
        26
    liuxingdeyu  
       2022-11-17 11:39:55 +08:00   1
    @wsWmsw 建议看看 osi 的七层模型。ip 层就是一个一个的数据包,扔给目标机器,加上端口,目标机器就能知道给哪个监听程序处理这个数据包(这会还跟 tcp 、udp 无关),tcp 收到包之后,校验完整性再发 ack 再排序,这样对于上面的 http 来看,tcp 提供的就是个完整的通道。你可以理解成,tcp 是个物流公司,有一台一台的大卡车,谁先到谁后到无所谓,车上有编号,也有人查货物完整性。http 是个用物流的,每次用的时候找个物流公司可以,找个长期的物流公司也行。quic 就相当于是找了一堆车自己维护货物的顺序自己查货损没损坏
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2809 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VRSION: 3.9.8.5 30ms UTC 14:28 PVG 22:28 LAX 06:28 JFK 09:28
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86