上一次认真学习计网还是去年春招找实习2333,现在回头复习一下,看了几本书,博客,感觉又有了新的学习心得。
背景
最近买了丐版阿里云服务器,在本地写毕设,做完一部分想发到阿里云上部署瞅瞅。通过idea-docker插件连接阿里云上的docker,惊呼竟然可以通过公网ip直接连接(在这之前楼主都是以为只有有了域名才可以访问,一直以为需要通过公网ip+私网ip的方式才能建立连接)。
通过上文也可以知道楼主计网基础并不扎实了2333。
总共看了两本书,一篇博客:
- 《网络是怎样连接的》
- 《计算机网络》-谢希仁著
- 《图解网络系列》-小林coding公众号的PDF
基本概念
存储表结构与基本算法
路由表
路由选择规则:
- 目标ip与掩码作&运算得出结果 与 路由表中的目标地址做最长匹配;多个结果取跃点数小的作为下一跳。
- 无匹配则使用默认路由下一跳
- 无默认路由则使用ICMP协议回传错误报文。
转发:
下一跳若网关为空,则说明已达目的地(本机/同一局域网),直接交付;否则使用arp协议查询对应mac地址通过交换机发送。
arp表
没找具体的图,可以根据本机缓存等抽象一下。
一张ip -> Mac 的映射表。
arp协议的算法:
考虑本机缓存都失效,需要广播的情况。
这里讲述两种情况:
假设 A主机 发往 B主机
- 发送方与接收方同处一片局域网
通过局域网广播即可获取接收方mac地址 - 发送方与接收方处于不同网络中
1. 通过路由选择算法得出B的网络号、网关,发现与A主机处于不同网络,则只需要发至网关即可
2. 要发往对应网关就需要知晓对应网关的mac地址,这时因为 A主机 与 该网关同处一片局域网,只需要广播arp报文即可收到该网关的mac地址
3. 将报文发往该网关即可。
4. 该网关收到报文以这两种情况进行鉴别即可发往目的地。
交换机
交换表结构:
当知晓了接收方mac地址,需要通过交换机发送报文,通过查询交换表即可知道传输端口,走对应端口线路即可。
当交换表中没有查询到对应端口时,则全发。这里可能会有人想这么做可能会浪费很多传输资源,但其实没有那么大的问题,当接收方接收到报文时会拆帧检查接收方的mac地址是否为自己,若不是则直接丢弃了。
ip
这里也不分类,全部以<网络号,主机号>(即超网)的形式讲解。
公网ip与私网ip
起初博主看了很多文章,都将其比作 某市 + 某小区;这样说就会带来许多误解,从现实的角度想,别的地方的人要联系我岂不是需要同时知道公网ip与私网ip才能定位到我。起码在楼主这个转不过脑筋来的理解上这是错误的,只要分配了公网ip,就一定能找到你。
在非直接交付中,路由转发中起作用的只是网络号(这里其实不是很准确,应该是在每一次做路由选择时与每一条目掩码计算出来的网络号),当需要直接交付时(本机/同一局域网)主机号才会发挥作用。
关于私网ip,是仅在内网使用的ip,毕竟不与外网连接的网络中也需要互相传递信息,也需要借助 TCP/IP 来完成。
当然有时内网也需要与外部进行连接,这里分为两种:
-
不同地方架设了同一公司的内网,使用vpn通过隧道传输。借图说明
进入互联网就需要一个全球外一唯一的ip来完成互联网中的信息传输,所以发送方接收方各都需要路由器,传输过程无异。R1 将 原本的数据报加密(A中的私网源ip 与 目的地的B私网源ip) ,重新加上ip首部,写入 R1的ip,目的地R2的ip,这样这个包就可以参与互联网的路由转发了。
而中间的转发过程对 A 与 B 来说都是不用关心的。
当然vpn技术还有其他用途,这里仅为说明私网ip不再细说其他。 -
内网需要访问外网信息,使用nat/napt技术。借图说明
上图为采用NAT/NAPT技术时内网访问外网的流程,同样的也需要一个路由器(该路由器具有NAT/NAPT技术)。
上图为NAPT表地址映射。NAT下的映射没有端口。
只能从内网访问外网,外网访问不到内网(若入方向表中无映射,并且对于外网来说只能看到nat路由器的ip/端口)。
当 内网A主机 想要访问 外网中的B主机 时,第一个网关出口必定为NAT路由器(因为要访问外网,网络号肯定不是同样的),当包到达NAT路由器时,该路由器从闲置端口中抽一个出来作为内网映射,改写ip首部 源ip,发包。收包时再与映射表做匹配即可,匹配不到直接丢弃。
可以看出公网ip与私网ip没有任何关系。
而私网ip存在的原因就是 公网ip是有限的(网络号确定的情况下,主机号是有限的),该主机并不需要联网(或很少连接,只在使用时分配,使用完毕回收)。
未完待续
可能还有想写和补充的,暂时先到这里。
参考与引用
- 《计算机网络》-谢希仁著
- 《网络是怎样连接的》
- 《图解网络系列》-小林coding公众号
- arp协议获取mac地址,同网段和不同网段