IP寻址需要同时知道IP地址和子网掩码,但是在通过ssh连接服务器时,只需要知道IP地址和端口号就可以了,ssh通讯为什么不需要子网掩码呢。在不知道子网掩码的前提下,可以正确找到IP对应的主机吗?
不需要,SSH(Secure Shell)客户端软件压根不知道子网掩码为何物。
不光SSH,任何通信软件,其中包括各种浏览器、微信、各种其它形形色色的软件,都不需要知晓通信对端的子网掩码。
既然与对方(目的地)通信,无需知道对方对方(目的地)的子网掩码,要它(子网掩码)何用?
谁是packet的发源(诞生)地,谁用子网掩码,这个子网掩码是谁的啊?
当然是发源地的子网掩码。题主Alice,试图SSH的网站,Alice的主机需要使用Alice主机网卡的子网掩码。
跨网段主机之间的通信
Alice的主机IP地址为192.168.1.2/24,知乎IP=103.41.167.234,服务端口默认= 22 (TCP)
Alice的主机拿24子网掩码长度(24 bit 位),去遮掩(左侧对齐)知乎IP = 103.41.167.234,被遮掩的数字(网段号) = 103.41.167。
Alice的主机就会计算:
知乎的网段号(103.41.167)≠ 自己的网段号(192.168.1)
不同的网段主机的通信,需要网关的帮助才可以。至于如何请求网关的帮助,发布的文章很多,不再重复。
同网段主机之间的通信
Alice的主机IP地址为192.168.1.2/24,SSH另外一台服务器IP=192.168.1.3,服务端口默认 = 22 (TCP)
Alice的主机就会计算:
服务器的网段号(192.168.1)= 自己的网段号(192.168.1)
服务器的主机号(3) ≠ 自己的主机号(2)
这是同一个网段主机之间的通信,很简单,只要用ARP请求对方的MAC地址即可。
同一个主机进程之间的通信
Alice的主机IP地址为192.168.1.2/24,SSH一台服务器IP=192.168.1.2,服务端口默认 = 22 (TCP)
Alice的主机就会计算:
服务器的网段号(192.168.1)= 自己的网段号(192.168.1)
服务器的主机号(2)= 自己的主机号(2)
这是同一个主机进程之间的通信,很简单,packet从上层一路下行到达TCP/IP协议栈的IP路由模块时,被IP路由模块从transmit queue直接移到receive queue,然后到达TCP,再一路上行到端口22的服务器进程。
连ARP都不需要。
以上3个处理流程在coding层面完全是不一样的,这就是子网掩码的存在的价值,子网掩码是packet的发送方,用来决策packet究竟走以上3个流程的哪个流程。
作者|车小胖谈网络|公众号