V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
abersheeran
V2EX  ›  程序员

怎么优雅的实现 TCP Ping?

  •  
  •   abersheeran ·
    abersheeran · 5 天前 · 1845 次点击

    如题。

    是计算使用 Raw Socket 手动发送 SYN 包 与收到 SYN+ACK 包的时间差,还是直接使用更上层的 TCP Socket,直接计算连接建立完成的时间?

    第 1 条附言  ·  5 天前
    已用 Python 实现 https://v2ex.com/t/782963
    11 条回复    2021-06-12 13:52:31 +08:00
    yachen
        1
    yachen   5 天前   ❤️ 1
    apt install hping3
    hping3 -S www.baidu.com -p 80
    Jirajine
        2
    Jirajine   5 天前 via Android
    建立连接
    whitehack
        3
    whitehack   5 天前
    https://github.com/rampageX/paping
    这有个实现 一直用的这个 非常好用
    3dwelcome
        4
    3dwelcome   5 天前
    nodejs 里也有一个实现 https://www.npmjs.com/package/tcp-ping

    理论上 TCP ping 的结果,应该尽可能契合 ICMP ping,然而事实上大部分实现都是简单暴力计算一下 connect time.
    kastnerorz
        5
    kastnerorz   5 天前   ❤️ 2
    ping 的主要功能有测试连通性,测试延迟等,我觉得可以这样做一个类比:
    - ping 发送 ICMP 包保证网络层连通性,延迟为发送 ECHO_REQUEST 与接收 ECHO_RESPONSE 的差值
    - TCP ping 建立 TCP 连接保证传输层连通性,延迟为建立连接的时间
    - HTTP ping 建立 HTTP 连接保证应用层连通性,延迟为完成整个请求传输的时间

    如果需要保证传输层连通性,使用 Raw Socket 手动发送 SYN 与接收 SYN+ACK (两次握手)是不能保证传输层连通性的,三次才可以

    个人浅见
    abersheeran
        6
    abersheeran   5 天前
    @kastnerorz 拨云开雾,感谢。
    kastnerorz
        7
    kastnerorz   5 天前
    @abersheeran 我也因为这个问题思考了很多,不客气
    lesismal
        8
    lesismal   5 天前
    一个三层一个四层,通常:
    人工排查网络故障普通问题用 ping
    业务服务相关并且 ping 不能满足需求(比如某端口是否开启)的软件功能开发用 4 、7 层建连或 req/res

    看你实际要做什么,比如云厂的服务端口健康检查或者自家 devops 节点服务状态检查,这本身不是 ICMP 这种三层专用协议能做到的,就需要业务层自己开发
    lesismal
        9
    lesismal   5 天前
    楼主玩 python 但不是做 AI 方向,有点可惜人才了,早点全面转 go 会大大提升自己在服务端的上限
    cz5424
        10
    cz5424   5 天前 via iPhone
    寻求 go 版本的 ping,用于测延迟
    yazoox
        11
    yazoox   4 天前
    为什么要自己实现?是为了嵌入到代码里面使用么?
    (楼上分享,已经有很多实现了)
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1222 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 18:06 · PVG 02:06 · LAX 11:06 · JFK 14:06
    ♥ Do have faith in what you're doing.