三次握手和欢迎套接字的问题? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
amiwrong123
V2EX    程序员

三次握手和欢迎套接字的问题?

  •  
  •   amiwrong123 2021-02-06 21:49:58 +08:00 2844 次点击
    这是一个创建于 1777 天前的主题,其中的信息可能已经有所发展或是发生改变。

    正在看计算机网络自低向上。看到欢迎套接字这里有两个问题。

    1. 三次握手的第一次和第三次都是发送给服务器,而且都是发送给了服务器的欢迎套接字?因为从第二个图中,看起来是这个意思。

    2. 三次握手以后,客户端再向服务器发送什么数据时,来自客户端的数据到达目的地主机的运输层之后,会发现两个 socket 都满足目的地的端口号(欢迎套接字和连接套接字),那它怎么知道该传给 欢迎套接字 还是 连接套接字呢? ( https://www.zhihu.com/question/54182420/answer/138476746 ,从知乎这个回答里,说了欢迎套接字和连接套接字是具有相同端口的。)

    3. 欢迎套接字和连接套接字是处于 运行在服务器主机上的两个进程吗?

    本人网络太菜,各位大佬求解答

    18 条回复    2021-02-07 15:02:38 +08:00
    misaka19000
        1
    misaka19000  
       2021-02-06 22:09:48 +08:00
    欢迎套接字和连接套接字是啥?完全看不懂
    misaka19000
        2
    misaka19000  
       2021-02-06 22:11:26 +08:00
    TCP 连接在建立前(即三次握手)是客户端主动发起第一个 syn,之后服务端回复 ack 以及顺便向客户端发送 syn,随后客户端向服务端发送 ack,到此连接建立

    连接建立后就不存在客户端和服务端的区别了,双方发送数据都是对等的
    lujie2012
        3
    lujie2012  
       2021-02-06 22:21:05 +08:00
    看书没有用,都是死的。你自己去抓包,看代码,运行一下,实践才是靠谱的。
    qakito
        4
    qakito  
       2021-02-06 22:29:59 +08:00   1
    listen socket 只用来接收客户端的 TCP 连接
    1.完成握手后,该 client 连接信息(IP:PORT + SERVER:PORT)加入 listen socket 的连接完成队列,同时 accept 函数返回
    2.accept 函数从 listen socket 的连接完成队列中取队列元素,并生成新的 socket 与其关联
    3.server 可以通过新的 socket 与 client 通信

    代码中,listen socket 只需要完成
    fd = socket(AF_INET, SOCK_STREAM, 0);
    bind(fd, 相应的 TCP 端口)
    listen(fd)
    new_cOnn= accept(fd)
    当新 TCP 连接完成,new_conn 即可用于实际数据通信

    至于 new_conn 的实际交互流程,可以放在子进程(or 线程),也可以在同一个进程里完成

    你要的答案 TCP/IP 详解卷 2 里有 socket 的相关实现
    qakito
        5
    qakito  
       2021-02-06 22:31:54 +08:00
    另,关于 TCP server 在 unix 网络编程中也有相关章节介绍
    无论是子进程的方式,还是 select 复用
    oaix
        6
    oaix  
       2021-02-06 22:39:57 +08:00   1
    > 三次握手的第一次和第三次都是发送给服务器,而且都是发送给了服务器的“欢迎套接字”?
    是的
    > 那它怎么知道该传给 欢迎套接字 还是 连接套接字呢?
    根据来 src 来区分,如果已经建立连接了,就发送到“连接套接字”
    > 欢迎套接字和连接套接字是处于 运行在服务器主机上的两个进程吗?
    不是,“连接套接字”是通过在“欢迎套接字”上调用 accept 调用返回的。
    hxndg
        7
    hxndg  
       2021-02-06 23:11:18 +08:00
    坦白讲,我也不知道欢迎套接字是啥。。。。

    我主要好奇的是 《计算机网络自底向上》是个啥书?
    我只知道《计算机网络自顶向下》特别好。
    amiwrong123
        8
    amiwrong123  
    OP
       2021-02-06 23:50:15 +08:00
    @qakito #4
    谢谢回答啦。那比如下面这个 tcp server 的简单 py 实现:

    红框里那一句得到的数据 sentence,就是第一个图里客户端的第三次握手顺带发过来的 http 请求报文吗?(我没理解错吧,第三次握手时,客户端会顺便发送 http 请求报文)
    amiwrong123
        9
    amiwrong123  
    OP
       2021-02-06 23:54:12 +08:00
    @qakito #4
    @oaix #6
    对了,还有个问题,就是因为 TCP 相对 UDP 是面向连接的协议,所以 TCP 实现上才搞了个 欢迎套接字,来方便快速处理 这些 TCP 连接请求呗?

    UDP 就根本不需要这玩意,因为 UDP 是无连接的。
    amiwrong123
        10
    amiwrong123  
    OP
       2021-02-06 23:54:41 +08:00
    @hxndg #7
    见笑了,手滑打错了
    anthow
        11
    anthow  
       2021-02-07 09:16:17 +08:00
    欢迎套接字,还是第一次听说。
    dongtingyue
        12
    dongtingyue  
       2021-02-07 09:51:02 +08:00
    这书看起来好古老
    zhangsanfeng2012
        13
    zhangsanfeng2012  
       2021-02-07 09:56:22 +08:00
    监听 socket 和 已连接 socket 的意思吗?
    newmlp
        14
    newmlp  
       2021-02-07 10:53:29 +08:00
    tcp 协议那么复杂,够写一本书了,你用两张图就能搞清啦?
    ooxiaoming
        15
    ooxiaoming  
       2021-02-07 11:31:58 +08:00
    看 tcp/ip 详解...
    yamasa
        16
    yamasa  
       2021-02-07 12:24:11 +08:00
    > 看 tcp/ip illustrated 或者 computer network: A top down approach, 要看原版, 绕过垃圾翻译成本。
    > 边看的时候自己用 wireshark 抓包玩起来,只看书都是务虚的,很多细节看完没几天忘光。
    togou
        17
    togou  
       2021-02-07 12:27:15 +08:00
    1,2 :欢迎套接字 欢迎之后 也就是 accept 完成了 为给你生成一个新的 fd 那个 fd 所对应的 ip 端口 就是欢迎套接字监听的端口
    对端的套接字连接 connect 之后 那个 fd 与服务端 ip:port <=> ip:port 这个四元组 就是一个 tcp 连接
    3.套接字编程实现是 文件描述符 欢迎套接字 与 连接的套接字是两个不同的 fd
    julyclyde
        18
    julyclyde  
       2021-02-07 15:02:38 +08:00
    listen socket
    connection socket
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     862 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 758ms UTC 20:05 PVG 04:05 LAX 12:05 JFK 15:05
    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