菜鸟提问:关于 TCP 协议 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
justicelove
V2EX    Linux

菜鸟提问:关于 TCP 协议

  •  
  •   justicelove
    Justice-love 2017-04-05 13:05:23 +08:00 5217 次点击
    这是一个创建于 3178 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • TCP 协议中的 TIME_WAIT 状态会占一定内存,想了解占用内存的大小是 固定值 还是这次 TCP 连接传输的内容大小
    20 条回复    2017-04-06 12:08:09 +08:00
    introom
        1
    introom  
       2017-04-05 13:15:38 +08:00 via Android
    ss -timep srcport=yourport

    你的问题暴露出你还不了解你的问题。可以先从熟悉 ss 开始。有问题的话就翻翻 ss 源码。
    jimzhong
        2
    jimzhong  
       2017-04-05 13:24:50 +08:00
    我觉得是固定值
    yangff
        3
    yangff  
       2017-04-05 13:50:10 +08:00
    @introom 穿越了……?
    LokiSharp
        4
    LokiSharp  
       2017-04-05 13:52:07 +08:00
    @introom 你进错贴了吧?
    justicelove
        5
    justicelove  
    OP
       2017-04-05 13:57:34 +08:00
    @jimzhong
    如果是固定值,那保留 TIME_WAIT 状态有何意义?

    在网上查看到的内容如下:

    **TIME_WAIT 两个 MSL 的作用:可靠安全的关闭 TCP 连接。比如网络拥塞,主动方最后一个 ACK 被动方没收到,这时被动方会对 FIN 开启 TCP 重传,发送多个 FIN 包,在这时尚未关闭的 TIME_WAIT 就会把这些尾巴问题处理掉,不至于对新连接及其它服务产生影响。**
    如果是固定值,那当发生 TCP 重连时,重传的内容从哪里来呢?
    falseen
        6
    falseen  
       2017-04-05 13:59:00 +08:00 via Android
    这个是系统内核决定的吧。
    neighbads
        7
    neighbads  
       2017-04-05 13:59:43 +08:00
    肯定不是传送内容大小。。。
    ryd994
        8
    ryd994  
       2017-04-05 15:13:42 +08:00   2
    TIME_WAIT 只是内核的一种处理方式,只是连接表里的一个标记,资源占用可以忽略
    保留在连接表里可以防止该端口在这段时间内复用,否则如果刚好有个新连接,四元组相同,延迟的包就会影响现在的链接

    你看清楚,被动方会对 FIN 开启 TCP 重传
    1. 这是被动方以为连接还没断干净,是被动方重发
    2.TIME_WAIT 是主动方的事,被动方没有 TIME_WAIT
    justicelove
        9
    justicelove  
    OP
       2017-04-05 15:42:21 +08:00
    @ryd994 多谢,懂了
    est
        10
    est  
       2017-04-05 15:48:12 +08:00   1
    @LokiSharp
    @yangff

    iproute2 包里有一个比 netstat 牛逼一万倍的命令叫 ss 。。。。。
    introom
        11
    introom  
       2017-04-05 17:46:21 +08:00
    @est
    一般来说 ss 确实够了,但有些时候感觉还是不方便。虽然 tcpdump 能推测出一些信息,可是毕竟是在 2 层。
    比方说, kernel 有一些 helper 函数,类似: http://lxr.free-electrons.com/source/include/net/tcp.h#L1071


    所以我自己用还是手写 systemtap 比较方便。 @justicelove 你关心内存的话,可以边学 tcp ,边用 systemtap 观测。
    demonchang
        12
    demonchang  
       2017-04-05 17:52:15 +08:00
    time_wait 最主要的还是占用链接资源。每个机器链接资源都是有限的。不过可以更改大小。 主要还是重复利用 time_wait 的链接资源吧
    est
        13
    est  
       2017-04-05 18:03:28 +08:00
    @introom 高玩啊。我觉得 ss 已经很够用了。其实 netlink 也可以得到更多信息。上次解决一个比较棘手的问题是一个 unix domain socket 的 backlog 有多大。
    raysonx
        14
    raysonx  
       2017-04-05 18:11:47 +08:00
    内核会为每一个 TCP 连接分配一定的资源( tcpcb 之类)保存连接的状态信息。关闭连接的主动方在发送完最后一个 ACK 后,会进入 TIME_WAIT 状态,连接在这个状态超时之前不会被释放,以防对方没收到这个 ACK 包。若对方真的没收到这个 ACK 会重发 FIN ,这时主动方会再次发送 ACK 。
    理论上来讲,占用的内存会和连接数占线性关系。
    owt5008137
        15
    owt5008137  
       2017-04-05 20:02:32 +08:00 via Android
    这个根据实现的不同而不同的吧。理论上内存消耗不会超过最后一次发送窗口+tcp 本身资源占用的大小。

    tcp 连接都有自己的发送队列的, fin 对方没收到,难道之前的包对方就收到了?所以一般来说,这里的发送队列管理和正常的收发包流程并没有什么太大区别
    longaiwp
        16
    longaiwp  
       2017-04-05 20:52:56 +08:00
    @yangff 惊了,原来还有这样的命令
    luoqeng
        17
    luoqeng  
       2017-04-05 23:21:36 +08:00
    https://zhuanlan.zhihu.com/p/25241630 虽然我也没仔细看
    zyEros
        18
    zyEros  
       2017-04-06 00:40:33 +08:00 via iPhone
    time wait 只是一个 tcp 状态,占资源的是链接
    justicelove
        19
    justicelove  
    OP
       2017-04-06 09:06:54 +08:00
    @introom 感谢
    duzhichaomail
        20
    duzhichaomail  
       2017-04-06 12:08:09 +08:00
    楼主看来对 tcp 的概念不熟悉 , 推荐 《计算机网络:自顶向下方法》 《 TCP/IP 详解 卷 1 :协议》
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     891 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 21:30 PVG 05:30 LAX 13:30 JFK 16:30
    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