大家好,我是后来,我会分享我在学习和工作中遇到的点滴,希望有机会我的某篇文章能够对你有所帮助,所有的文章都会在公众号首发,欢迎大家关注我的公众号" 后来X大数据 ",感谢你的支持与认可。
今天买了一个显示器已经到家了,用着确实爽歪歪。哈哈!得继续写文了,不能对不起它!
上一篇文章,我通过“警察叔叔是怎么顺着网线找到你的 这个话题,为大家讲了IP地址的虚拟性,以及ARP地址解析协议,最后还写到了划分子网和构造超网。其实核心知识就是 地址解析协议ARP,以及IP地址不同的划分规则对应的如何转发分组 ,当然也同时要理解为什么IP地址是虚拟的。这其实就是上一篇文章的核心内容,回看
那么今天继续把网络层的知识讲完,今天的知识和生活息息相关。这张图再次温习一下。必会!!!
同样还是引出一个话题:拉了300M的网,下载速度为啥还是这么慢?
其实这个问题,我有2个想法
- 告诉你为啥你的网速从来没达到300M
- 说说路由器的工作原理,让你更了解你的路由器(慢慢讲)
同时今天的重点也先说一下:
- 为啥网速这么慢?
- 网际控制报文协议ICMP
- 路由选择协议,重新认识你家的路由器
- IPv6
- IP多播
- 虚拟专用网VPN和网络地址转换NAT
拉了300M的网,下载速度为啥还是这么慢?
其实这个问题,就是网络商和你玩文字游戏?
我们来看看宣传页
然而我们下载的速度是这样的:
那么这个大小写的b差了多少呢?
在计算机世界里,1个字节=8个比特,所以1B=8b
这么一换算,发现300Mb=37.5MB
也就是说你的下载网速理想峰值是37.5MB/s,这是在绝对理想的条件下进行的,所有的传输过程中没有损耗,但是现实生活中是这样的吗?当然不是,经过一些博主多次验证,一般300M的网下载速度一般能达到30MB就很不错了。
如果你多台电脑使用,并且还有一些无线设备连接,那么**这些所有的设备共享这个带宽。**所以网速自然比你想的要慢。
但是请不要忽略路由器的作用!!!
你的路由器是不是只有百兆端口?
你的网线是不是只能传输百兆?
如果是的话,那剩下的200M就被浪费掉了。
说完这个,我们等下接着解决路由器的核心工作原理问题。
你在PING啥?
不少学过计算机的朋友都应该知道这么个命令,在命令行“ping qq.com”来检测自己的是不是有网,有时候是内网,ping一下集群的其他机器,看这些机器通不通,“ping 192.168.X.X”,但是问题是PING的这个命令是怎么实现的?
它的原理其实是网际控制报文协议ICMP。PING使用了ICMP回送请求与回送回答报文。PING是应用层直接使用网络层ICMP的一个例子。它没有通过运输层的TCP或UDP。
那么我们来大致介绍下ICMP的原理:
我们之前也说了,IP数据报的传输在网络层是不可靠的,所以在把ICMP报文装在IP数据报中,发送出去。相当于数据报中有个监视器。
它的格式是下面这样的:
而ICMP的主要功能包括:确认IP包是否成功送达目标地址,通知在发送过程当中IP包被废弃的具体原因,改善网络设置等。有了这些功能以后,就可以获得网络是否正常、设置是否有误以及设备有何异常等信息,从而便于进行网络上的问题诊断。
于是ICMP报文就分为2类:
- 通知出错原因的错误消息(ICMP差错报告报文)
- 用于诊断的查询消息(ICMP询问报文)
所以ICMP协议的目的:更加有效的转发IP数据报和提高成功交付的机会
关于ICMP协议大家了解到这么多就可以了,再具体一点的知识有兴趣的可以自行百度。
但是ICMP现在很多时候为了安全考虑,有时会禁用。下图就是黑客一种常用的手段。
路由器的秘密——路由选择协议
路由器的构成
其实吧,路由器也是个计算机,只不过它是一种具有多个输入端口和多个输出端口的专用计算机,其任务是转发分组。
我们在计算机网络开始的时候就提到:互联网=网络的网络,而网络与网络之间是通过路由器连接的。
我们在上一篇文章中提到过转发分组,这次换句话说:网络层的数据单元——IP数据包要能够正确到达目的主机,经过路由器时,路由器根据数据包中的目的主机的IP地址与路由控制表的比较得出下一个应该接收的路由器,这就是上一篇文章中提到的转发分组。
现在的问题就是:路由表已经有了,用哪种算法来获得路由表中的需要的那个项目?
这个路由表有多大呢?一般的路由表都有10万条左右的路由项,告诉路由器更多,所以要想快速转发分组,我们希望通过这个算法尽可能最优,减少路由这边的时延。
于是路由算法分为了2大类:
- 静态路由选择策略=纯手工,管理员自行设定
- 动态路由选择策略=自动更新,适应网络状态的变化,开销大
结果显而易见,目前我们大多使用的都是动态路由选择策略,那么动态路由选择策略是个什么情况呢?就是说:路由器会给相邻的路由器发送自己已知的网络连接信息,那么到最后整个网络的路由控制表就制作完成了。
随着IP网络的发展,想要对所有的网络统一管理是不可能的事,所以为了更好的管理,就把互联网划分为许多较小的自治系统,记为AS。比如以企业为单位,内部使用内网,有些网址只能在公司网访问。所以就有了下面2种路由协议:
- 内部网关协议IGP,使用多的如:RIP协议、OSPF协议
- 外部网关协议EGP,使用多的是:BGP-4
那么下面大致介绍下这几种协议:
内部网关协议RIP
RIP属于距离向量型的路由协议,它指的是根据距离和方向决定目标网络或目标主机位置的一种方法。
RIP将路由控制信息定期(30秒一次)向全网广播,如果没有收到路由控制信息,最多重试5次,如果都没收到,那么连接就会被断开。
还记得上面PING的那个案例么?
看到最后的TTL=52了么,相当于我的主机经过52个路由器就到了qq的这个服务器。
RIP基于距离向量算法决定路径。距离(Metrics)的单位为“跳数”。跳数是指所经过的路由器的个数。 RIP希望尽可能少通过路由器将数据包转发到目标IP地址,根据距离向量生成距离向量表,再 抽出较小的路由生成最终的路由控制表。
这样的话,每一个路由器到每一个目的网络的路由都是最短的。
内部网关协议OSPF
它主要是分布式的链路状态协议,而不是像RIP一样是距离向量协议。
- 向本自治系统中所有路由器发送消息,称为洪泛法
- 发送的信息就是与本路由器相邻的所有路由器的链路状态,相当于“到所有网络的距离和下一跳路由器”
- 只有当链路状态发生变化,路由器才会发送此消息。而不是和RIP一样,30秒一次!
最后所有的路由器会建立一个完整的链路状态数据库,相当于全网的拓扑结构图,而且这个图在全网范围内是唯一的。
但是互联网实在是太大了,如果把所有的路由器都汇成一张拓扑图,那路由表早就不知道爆了多少次了。
于是就对一个自治系统划分为若干个更小的范围,叫做区域,每个区域的路由器不超过200个。
外部网关协议BGP
上面的两种,只是在管理自治系统内部的路由控制,但是BGP则需要兼顾整个互联网进行路由控制。
上面讲完了路由器的知识,我们再来聊聊目前特别火的IPv6
IPv6
我们在之前的文章中提到过,IPv4的IP地址在2011年4月就宣布耗尽了,而随着互联网的发展,之前设计IPv6也逐渐开始使用。
IPv6与IPv4最大的区别就是有了更大的地址空间,由之前的32位扩展到128位,可想而知,IP地址理论上最多有2的128次方。
那IPv6会不会有一天被用完呢?这么来说吧,在IPv6中,每个地址占128位,地址空间大于3.4×10的38次方。如果整个地球表面(包括陆地和水面)都覆盖着计算机,那么IPv6允许每平方米拥有7×10的23方个地址。如果地址分配速率是每微秒分配100万个地址,则需要10的19次方 年的时间才能将所有可能的地址分配完毕。可见在想象到的将来,IPv6的地址空间是不可能用完的。
那么我们来看一下IPv6的格式:
- 用二进制表示:
16*8=128位 - 16进制表示:
FEDC:BA98:7654:3210:FEDC:BA98:7654:3210
那大家明显发现,这么写肯定很不爽,而且不符合我们平时的书写习惯,于是就有了零压缩,也就是如果有多个连续的0可以用一对冒号所取代。但一般的还是很复杂。比如我电脑的截图如下:
好了,这个书写方式就不讨论了,
只要记住,冒号代表的是分隔的每个值是16位,点代表的是8位,如下:
IPv4向IPv6的过渡
大家也应该注意到了,目前不少大厂的app进入页面都提示已经支持IPv6了,那IPv4过渡IPv6阶段,又没有一个具体的期限说必须哪天之前都过渡完,也不现实,那么过渡阶段这个分组怎么转发呢?这中间也肯定需要两种协议之间的转换。
- 双协议栈
- 隧道技术
双协议栈
要求双协议的主机或路由去既能够和IPv6的系统通信,也能够和IPv4的系统通信,那么这个主机怎么知道目的主机采用哪种协议呢?它肯定不知道啊,所以它根据域名系统DNS来查询。DNS返回的是IPv6就用IPv6地址。以此类推。
下面这种情况是特别常见的情况,就是中间有一段网络是IPv4怎么办?
B 把IPv6数据报首部转换位IPv4数据报首部再发给C,传递到E后,E再恢复位IPv6。但是IPv6中的有些字段是无法恢复的,这种损失是首部转换方法不可避免的。
隧道技术
这个技术简单说就是把IPv6在包装一层为IPv4,这样的话也能正常传输,到双协议栈的时候,再把外面这一层去掉,传输IPv6。必须把IPv4首部的协议字段的值设置为41,表示数据报的数据部分是IPv6数据报。
ICMPv6
IPv6也不保证数据报的可靠交付,所以它也使用ICMP来反馈一些差错信息。那为啥名字不一样呢?那是因为升级了,哈哈,关键是比ICMPv4复杂一些。
IP多播
其实我们到目前为止,说的比较多的都是点对点的通信,但是还有广播通信这种也是使用非常广泛的,比如各大视频网站,是不是更新资源后,大家都能看到了。
假如说,某视频服务器要给90台主机传送同样的视频节目,这样的话,如果使用单播方式,需要同一个分组发送90个次,等于90个副本,但如果使用多播方式,只需要发送一次,爽不爽!
这样看起来是爽,具体要实现的话需要路由去能够识别多播数据报,这种路由去称为多播路由器,当然它也可以转发普通的单播数据报。
多播这种方式等于说是:在一个特定的组里,只要组长发消息,你们就能收到。但是怎么能加入这个组。
多播组的标识符就是IP地址中的D类地址,大家还记得么?
D类IP地址的前4位是1110,所以它的地址范围:224.0.0.0到239.255.255.255。所以我们就用每一个D类地址标识一个多播组。也就是说在同一时间可以允许超过2.6亿的多播组在互联网运行。
这个值在IPv6协议的时候更大。
那么这种多播地址只能用于目的地址,不能用于源地址
虚拟专用网VPN
这个解释,其实百度百科说的是比较明白的,我这里直接引用一下:
平时我们如果需要访问外网,不也是需要梯子么,那自己搭的梯子其实也是这种原理,首先要有一个境外的服务器,然后利用硬件或者软件,把自己的手机和境外的服务器连起来,就可以科学上网了,但是大家注意安全!!!
网络地址转换NAT
用过虚拟机的小伙伴肯定知道这种方式,一般时候,我们自己电脑的虚拟机都使用NAT的方式,这样的话你的虚拟机要上网等于共享你主机的带宽,而使用了NAT的虚拟机,在点对点的传输中,需要使用网络地址与端口号的转换,因为对外界看起来,IP地址是自己本身主机的,不是虚拟机。
关于标题中提到的问题,我在文章开头就进行了解答与分析,并在其中提到了路由器的路由选择协议。
互联网的正常运转离不开每一个路由器的努力,哈哈,所以,请选一个好一点的路由器也是有道理的。到目前为止,网络层的知识算是讲完了!
关于计算机网络的知识还是非常多的,我学到的也只是其中一点皮毛而已,还是那句话,”在技术领域,我们都要有一颗谦卑的心。“