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

隐隐约约感觉计算机网络在提到的运输层的两个重要功能--复用和分用, 是不准确的抽象...

  •  
  •   deepkolos · 2018-01-12 17:03:17 +08:00 · 3147 次点击
    这是一个创建于 2285 天前的主题,其中的信息可能已经有所发展或是发生改变。

    感觉这样的行为区分抽象为复用和分用, 略勉强....感觉只是正常的职责的分离

    还有想问问, TCP 长连接在 NAT 路由器里面是如何实现的?

    书上的描述是:

    通过 NAT 路由器的通信必须有专用网内的主机发起

    内网主机向外网主机建立 TCP 链接, 那么链接建立之后, 外网主机给内网主机通过链接发送数据, 为什么可以通信?

    不清楚 NAT 地址交换表的表项的增删机制是怎样的, 求解~

    6 条回复    2018-01-26 14:55:16 +08:00
    billlee
        1
    billlee  
       2018-01-12 20:43:09 +08:00
    多个信号共用一条信道传输就叫做 multiplexing, 没毛病啊

    NAT 这里说的是 SNAT. NAT 表记录的是内网 (IP:端口) <-> 网关的外网 (IP:端口) 之间的映射关系。从外网看来,连接是建立在网关的外网 (IP:端口) <-> 服务器 (IP:端口) 之间的。外网主机向网关的 (IP:端口) 发送数据,网关就能收到。然后网关再根据 NAT 表找到对应的内网 (IP:端口), 抓拿过去。
    deepkolos
        2
    deepkolos  
    OP
       2018-01-12 21:50:05 +08:00
    @billlee 我觉得 IP 层服务性质的, 复用就没必要强调吧, 又不是一次性的.. 就像基础设施那样. 并且说的信号只是数据段的含义不同而已. 还有介绍 IP 层的时候也没有强调数据链路层的复用功能. 介绍数据链路层也没有强调物理层的复用功能. 所以就有点怪怪的感觉.

    至于分用, 感觉也是类似的, 在数据链路层的帧, 也一样没有强调分用的功能, 并且书本上分用的定义描述, 那不是端口要干的事情么? 至于如何正确交付, 感觉是交付策略. 所以感觉"分用"这个词又是很搭边, 略微勉强, 并且, 运输层应该强调不是交付策略么? 如何交付的问题. 每一个层的职责都不同, 复用和分用的定义感觉在那个层都适用, 但是为什么要在运输层强调捏?

    NAT 的疑问:

    书本上的描述有 NAT 和 NAPT, 没有看到 SNAT 的描述, 可能是教材问题, 不过也是这个流程. 后面仔细看了地址转换表, 发现是内网地址+端口映射到外网的端口, 有些疑问解决了, 剩下是不清楚 NAT 地址交换表的表项的增删机制是怎样的, 因为 TCP 链接建立之后是全双工通信, 就意味着地址转换表是一直都有的咯, 那是 TCP 链接断开, NAT 地址转换表对应的表项是否也被删除?
    deepkolos
        3
    deepkolos  
    OP
       2018-01-12 21:57:50 +08:00
    @billlee 我感觉 ngrok 实现内网穿透的关键就是在于 NAT 路由器里面存在转换表项, 如果清楚 NAT 的表项的增删机制, 说不定还可以内网的主机 a 通过伪造 IP 数据包, 可以开启一小会内网主机 b 的某个端口~
    billlee
        4
    billlee  
       2018-01-12 22:05:00 +08:00   ❤️ 1
    @deepkolos #2 首先 multiplexing/demultiplexing 是成对的概念,没必要分开来讨论。这个词翻译成「复用」有点奇怪,一般是叫做「多路复用」的,最典型的例子就是整栋楼的电话线都拉到楼下弱电房,然后用一根光纤往外接。IP 这样的分组网络确实不怎么提这个东西。

    NAT 表确实会跟着 TCP 连接状态变化,一般叫做「连接跟踪」。
    deepkolos
        5
    deepkolos  
    OP
       2018-01-12 22:12:38 +08:00
    @billlee 感谢解惑~
    hxndg
        6
    hxndg  
       2018-01-26 14:55:16 +08:00   ❤️ 1
    @deepkolos
    从我了解的角度实际上有的 nat 路由器实际上是维持了两个连接,一个是内网主机到路由器的主动连接,另一个是路由器到服务器的主动连接,两个连接任意一个终端另外一个都中断。这个过程并不是由路由器控制的。

    所以我觉得你的想法伪造数据包,开启内网主机的端口并不现实。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5512 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 07:38 · PVG 15:38 · LAX 00:38 · JFK 03:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.