作者:困了电视剧
专栏:《JavaEE初阶》
文章分布:这是一篇关于网络原理的文章,在这篇文章中我会具体介绍ip地址的分配管理,信息传输的路由选择以及以以太网来举例的数据链路层数据帧,希望对你有所帮助!
目录
地址管理
ip地址的分配
上图是ip协议的协议头格式,由此表可以看出,IP地址本质上是一个32位的整数,在表示的时候,我们通常会将这个32位的整数用点分十进制的方式进行表示,即三个点,把这个整数分成4个部分,每个部分一个字节。
设备需要进行通信,就必须有ip地址的参与,32位整数最多能表示32亿九千万个不同的地址,这个数字看上去很庞大,但是全世界有很多的电脑,服务器和手机等,在这个数字面前,32亿又显得十分渺小,那么该如何解决上述问题呢?ip协议采用了如下的几个方法。
动态分配ip地址
设备上网才分配,不上网就不分配,这样就可以省下一大批的ip地址了。
不过,这种方法并没有增加ip地址的总数,只能一定程度的缓解,并不能解决问题。
NAT机制
NAT机制是将所有的ip地址分成两大类,即内网ip和外网ip,这里的内网和外网分别指的是一定范围内的局域网和这个范围之外一定范围的广域网。
所以,外网ip必须是唯一的,而内网ip则可以重复出现,尤其是在不同的局域网中。
内网设备如果要访问外网,会给他分配一个外网ip,但是这个外网ip不是这个设备独占的,而是这个内网中所有的设备都共用这一个外网ip。
这样说可能有点抽象,我们现在用快递的方式来举个栗子:
比如说现在有一个小区叫比奇堡小区,然后这个小区设有一个菜鸟驿站,我是比奇堡的一员,我现在要从淘宝上买一个东西,我在填收货地址的时候我一定填的是比奇堡菜鸟驿站,不光是我,整个比奇堡所有的居民填的收货地址都是比奇堡菜鸟驿站,这里就可以将比奇堡中的居民抽象成内网ip,把菜鸟驿站抽象成那个唯一的外网ip,这样一个外网ip就可以代表一系列的设备了。
理解完这点后我用实际运转的过程进行举例:
现在有甲乙两台主机,甲主机需要从百度上搜小哥哥看,乙主机需要从百度上搜小姐姐看,于是他们都发了一个数据报,源ip是他们自己的ip地址,而目的ip是百度服务器的ip地址,现在他们的数据报需要经过一个路由器,这个路由器的在收到他们的数据报后,会将源ip改为路由器自己本身的ip地址,这个ip地址是外网的ip地址,然后通过这个外网的ip地址与百度服务器进行通信,百度服务器也会将数据返回给这个路由器。
那这个路由器又是怎么区分这些主机的呢?本来端口号是用来区分同一个主机的不同程序的,那能用端口来区不同主机的不同的程序吗?当然可以,路由器通过这些不同的端口来识别不同的主机,然后再将信息发送给正确的主机上。
这个过程也直接说明了:外网的设备是无法直接访问内网的设备的。
IPv6
IPv6从根本上解决了ip不够用的问题。
IPv4是传统的IP协议,使用4个字节,32位来表示ip地址,IPv6是更新一些的IP协议,使用16个字节,128位来表示ip地址,这样一共就可以表示2的128次方个ip地址,这个数字太大了,完全有能力将每一个设备都附上一个不同的ip地址。
ip地址的组成
ip地址分为两个部分,即网络号和主机号。
网络号:标识网段(标识一个局域网),保证相互连接的两个网段具有不同的标识;
主机号:标识主机(标识了一个局域网中的主机),同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号。
注:一个路由器具有两个ip地址,分别是在不同的局域网中,一个路由器的作用就是将两个局域网连接起来。
现在问题来了,一个ip地址中,哪个部分是网络号,哪个部分是主机号,对于网络号和主机号的划分主要采用了如下的两种分类方式:
ip地址分类(ABCDE)
理论中的划分方式,现实中几乎已经淘汰的方式。
如图,IP地址会被划分为ABCDE五类,每一类都有一个固定的划分方式,然后通过前缀来区分这个ip地址是哪一类的。
弊端:AB类的主机号太长了,实际上很少有这么大的局域网。
子网掩码
子网掩码是真实的划分方式。
子网掩码,站在二进制的角度来看也是一个32位的整数(ip地址也是32位),只不过子网掩码左侧都是1,右侧都是0,不会出现1010这种混合出现的情况。
左侧有几个1,就代表ip地址的哪些位是网络号
255转换成二进制就是1111,所以这个子网掩码的意思就是,前12位都是网络号,后4位是主机号。
拓,特殊的ip地址,假定子网掩码是255.255.255.0:
1.主机号为全1的ip,比如:192.168.0.255,一般为广播地址,往这个地址上发送udp数据报,这个数据报就会被转发给整个局域网中的所有主机(TCP不支持广播)
2.ip为127开头的成为环回ip,比如127.0.0.1,环回ip对应特殊的虚拟网卡lo,通过环回ip传输的数据,走这个虚拟网卡(这个过程没有IO操作,纯内存操作),要比一般的这种普通ip的数据传输的要快。
3.主机号为1,比如192.168.0.1,一般称为“网关ip”,局域网的出入口。
路由选择
有一个问题,我的一条信息从A 发到B ,具体路线应该怎么走?互联网存在大量的冗余,A和B之间存在很多种不同的路线,具体走哪条?路由选择要做的事情就是这个。
听上去比较像高德地图,但不同的是,高德地图是站在上帝视角,即对于整个地区的地图是非常清晰的,但是在网络上,则没有那么容易,因为网络环境太复杂了,所以某个路由器无法将整个网络环境都记录下来,路由器只能记录周围的情况(路由器中使用路由表这样的数据结构来记录邻居的信息)。
实际的转发过程是渐进式的,类似于“问路一样”,逐渐接近最终目标,举个栗子:
比如说A想到达B,A的周围有C,于是A就问C,B在哪里,C表示我也不知道,但我知道D在哪,D知道的比我多,你可以去问问他,于是A按照C的指引找到了D,D说我也不知道,但我知道E在哪,E懂得比我多,于是A又按照D的指引找到了E,最终E说B我知道,于是A在E的指引下找到了B,结束。
ip数据报,在进行网络转发的过程中,就是一个“逐渐问路”的过程,每个路由器只能认识周围的情况,很可能问的目标并不知道(不知道指的是:目的ip在路由表中,没有匹配结果的),此时就会走路由器给你指出的一条默认的路径(这个路径是路由表中的“下一跳表项”)。
这个“下一跳表项”会把咱们的数据报指引向更上一级的路由器,越上级的路由器,见识就越广。
数据链路层数据帧
"以太网" 不是一种具体的网络,而是一种技术标准;既包含了数据链路层的内容,也包含了一些物理层的内容。例如:规定了网络拓扑结构,访问控制方式,传输速率等,以太网是当前应用最广泛的局域网技术;和以太网并列的还有令牌环网,无线LAN等。
所以我们这里通过以太网来进行举例:
如图,此图就是以太网数据帧的结构,这里的目的地址和源地址都是mac地址,什么是mac地址?mac地址是网卡的硬件地址,由于mac地址占用6个字节,比4个字节大了6w多倍,所以相比于不够用的ipv4,mac地址目前还是够用的,当前mac地址是可以做到每个设备都是唯一的,并且mac地址也不需要动态分配,一般都是在出厂的时候就写死的。
这个图中有一个1500,1500的意思是,一个以太网数据帧,载荷最大长度就是1500字节,注意:这里的1500只是以太网规定的1500,不同的数据链路层协议对应不同的硬件物理设备,为什么要这样设置呢?这些数据都需要利用网线这个硬件设备进行传输,网线一次传输的量是有限的,所以每一个数据帧的大小放小一点有利于数据的传输。
最大载荷长度MTU
我们把这个数据链路层数据帧的最大载荷长度成为MTU。
如果承载的数据长度超过了MTU,就会在ip层进行分包(ip的一个工作就是完成这个分包/组包),使每个分出来的结果都能在MTU之内。
16位标识:一个大的ip数据报,拆成多个小的数据报之后,这些小的数据报的标识都是相同的。
3位标志:有一位不用,有一位标识是否分包了,还有一位表示当前这个分包是否是最后一个(结束标记)。
13位片偏移:表示每个小的数据报之间的先后顺序,用来组包的。
具体过程可参考该图;
以上就是本篇博客的全部内容,如有疏漏,欢迎指正!