V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
palemoky
V2EX  ›  问与答

本机起服务调试,还会建立 TCP 连接吗?

  •  
  •   palemoky · 2021-09-10 11:03:43 +08:00 · 1114 次点击
    这是一个创建于 930 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在看 TCP 方面的书,如果客户端与服务端不在同一主机可以理解数据包的链路,突然有个疑问,如果我在本机开启服务调试请求,数据包链路是怎样的呢?还会进行 TCP/IP 封包到网卡兜一圈吗?

    15 条回复    2021-09-13 14:33:21 +08:00
    iBugOne
        1
    iBugOne  
       2021-09-10 11:09:38 +08:00 via Android   ❤️ 1
    该有的封包、路由、防火墙等当然还是有,一层层下去直到 IP 层,但是不会上物理网卡,本机流量有个专属端口叫回环( loopback ),可以当做在内存里绕了一圈
    iBugOne
        2
    iBugOne  
       2021-09-10 11:12:40 +08:00 via Android
    对于 TCP 服务,端口、连接、滑动窗口、拥塞控制一样都不会少,不过因为“内存里绕一圈”的这个“链路”不会丢包,这些东西基本上没啥影响
    datoujiejie221
        3
    datoujiejie221  
       2021-09-10 11:40:29 +08:00
    装个 wireshark 抓 loopback 的包
    cubecube
        4
    cubecube  
       2021-09-10 11:42:32 +08:00
    会走一遍协议栈,所以端口流量都会有,最后不真上网卡。
    数据在 hard_start_xmit 往设备上发的时候,被 loopback_dev 设备拦截就往回走了。

    内核里面有源码,如果按照 tcpip 去理解,就是除了物理层都会走
    jasonyang9
        5
    jasonyang9  
       2021-09-10 11:53:16 +08:00
    回环的设计真的很棒
    chairuosen
        6
    chairuosen  
       2021-09-10 11:54:25 +08:00
    @iBugOne 学习了,如果访问的是本机的外网 ip 监听的端口,也会被 loopback 拦截么?
    warcraft1236
        7
    warcraft1236  
       2021-09-10 12:29:11 +08:00
    @chairuosen 坐等答案,感觉会
    palemoky
        8
    palemoky  
    OP
       2021-09-10 12:55:37 +08:00 via iPhone
    @iBugOne @cubecube @datoujiejie221 感谢三位的解答,我用 wireshark 抓个包研究下
    iBugOne
        9
    iBugOne  
       2021-09-10 13:12:40 +08:00 via Android
    @chairuosen 看你说的是哪个“外网”,如果是操作系统里登记在网卡上的 IP 地址,那么一样是走 loopback ( Linux 运行 ip r s t local 查看回环路由表),如果是经过层层 NAT 的“真 · 外网”,那还是要从网卡出去的,因为操作系统不知道你 NAT 后的 IP 地址
    iBugOne
        10
    iBugOne  
       2021-09-10 13:14:14 +08:00 via Android
    @cubecube 取决于 iface 类型,链路层也不一定会走,比如 loopback 和三层隧道( GRE / WireGuard )就没有链路层,所以我前面说封包只说封到 IP 层
    lysS
        11
    lysS  
       2021-09-10 14:52:50 +08:00
    @datoujiejie221 早就试过了,这种抓不到
    zhoudaiyu
        12
    zhoudaiyu  
       2021-09-10 17:54:07 +08:00 via iPhone
    Unix Domain Socket 就不会🐶
    cubecube
        13
    cubecube  
       2021-09-11 16:10:37 +08:00
    @iBugOne 我之所以没说链路层这个茬,就是因为现实中不存在呀。没必要硬去套 7 层模型
    iBugOne
        14
    iBugOne  
       2021-09-11 18:28:26 +08:00 via Android
    @zhoudaiyu UDS 只是一种承载方式,而且如果你用了 UDS 应该就没有 TCP 这个概念了吧。

    AF_UNIX 本质上是 Unix IPC,不经过网络栈,有独立于 TCP/UDP 的两套面向数据流和数据包的“协议”,并且 API 甚至一些行为也和 T/U 不完全一致。
    julyclyde
        15
    julyclyde  
       2021-09-13 14:33:21 +08:00
    TCP/IP 其实和网卡没啥关系,谈不上“去网卡”绕一圈
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2997 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 130ms · UTC 14:48 · PVG 22:48 · LAX 07:48 · JFK 10:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.