目录
一、IP协议
地址管理
每个处在网络上的设备,都需要有一个地址,这个地址是唯一的
IP协议的报文格式
IP地址
本质上是一个32位的整数,通常会将这个32位整数转换为点分十进制的表示方式
即:三个点,把这个整数分为四个部分,每个部分的取值为0-255,形如:xxxx.xxxx.xxxx
32位的整数最多可以表示42亿9千万个不同的地址,而全世界存在很多电脑,路由器,服务器,手机等等设备,它们都处于互联网上,很显然这是不够用的。
如何解决IP地址不够用呢
1.动态分配IP地址:设备上网才分配地址,不上网就不分配(只能缓解,不能彻底解决问题)
2.NAT机制
NAT机制
将IP分为内网IP和外网IP两个大类
内网IP:
10.*
172.16.* - 172.31.*
192.168.*
这些格式的IP都是内网IP
内网IP是可以重复出现的(在不同的局域网中)
外网IP:
除了内网IP以外的全部IP
外网IP必须是唯一的
如果内网设备要访问外网,就会给他分配一个外网IP,但是在一个局域网中的所有内网设备,都共用一个外网IP,所以这个外网IP并非一个设备独占,而是内网中的所有设备共用一个外网IP,即一个外网IP代表一系列设备
例如,你是北京大学的一名学生,你网购时填写的地址就是:北京市海淀区北京大学
而北京大学中有很多学生,这些学生就可以视为一系列内网设备,而北京大学就可以视为一个外网IP,北京大学的学生们一律使用北京大学这个地址进行购物
内外网设备间的通信
- 1.A是外网设备,B是内网设备,则A和B不需要任何NAT,之间可以进行通信
- 2.A是内网设备,B是其他内网的设备,则A和B不允许进行通信!!
- 3.A是外网设备,B是内网设备,那么A不允许对B通信!!(外网设备无法之间访问内网设备)
- 4.A是内网设备,B是外网设备,A对B通信时,触发NAT机制,将A的源IP替换为路由器自己的IP,此时A和B可以进行通信
IPv6
- IPv4是传统的IP协议,使用4个字节,32位来表示IP地址
- 而IPv6是最新的IP协议,使用16个字节,128位来表示IP地址
传统的IP协议,是不足以满足给地球上的所有设备都分配一个IP地址的,所以才需要引入NAT+动态分配来解决这个问题
而IPv6作为最新的IP协议,足以给地球上的每一粒沙子都分配一个IP地址!
IPv4和IPv6的最大区别就在于IP地址上,性能上并无区别,但是支持IPv4的设备,并不一定能支持IPv6协议,这是一件费力不讨好的事,所以相对于全球而言,IPv6普及率并不高
而在中国,IPv6的普及率是很高的,大概有70%左右,但大部分没有开启,仍在使用IPv4
IP地址的组成
一个IP地址由这两部组成
- 网络号:标识一个局域网,同一个局域网内,所有设备的网络号都一样
- 主机号:标识一个局域网内的主机,同一个局域网内,所有设备的主机号都不同
例如:
在这张图中,有两个局域网
- 一个是网络号为192.168.0的局域网1
- 一个是网络号为192.168.1的局域网2
而路由器将两个局域网连接起来了,此时这两个局域网就称为“相邻的局域网”。
那么在一个IP地址中,一定是前三个字节是网络号,最后一个字节是设备号吗?
并不一定!!
对于网络号和主机号的划分,主要分为两类
- IP地址分类(ABCDE)
- 子网掩码
从二进制的角度看,子网掩码是一个32位的地址,255就是0xff就是1111 1111,而在子网掩码中,左侧都是1,右侧都是0。不会存在101010这种混合的情况。
左侧有几个1,表示哪些字段就是网络号,相对的,0就是设备号。
在一般的家庭网络中,前24位表示网络号,后8为表示主机号,这并不绝对,其他的网络情况可能不一样。
特殊IP地址
- 192.168.0.0:网络号,原则上网络环境中不允许使用这个IP地址,因为不存在主机号为0的设备。
- 192.168.0.255:广播地址,往这个地址上发送udp数据报,此时这个数据报就会被转发给整个局域网中的所有主句
- 127.*:环回IP,表示自己这台主机
- 192.168.0.1:一般表示“网关”。只是习惯用法并不绝对
二、路由选择
两个外网服务器A和B,从A到B如何走?
在现实的网络环境中,是非常复杂,存在非常多的冗余的,这就导致了A和B之间的路径有很多种
某个路由器,是无法把整个网络环境都记录下来的,在路由器中,存在“路由表”这样一种数据结构记录周围情况,即记录“邻居”的信息
实际的转发过程,是渐进式的,类似于“投石问路”,一点点的逐渐摸清目标
例如你在北京站,此时要去你的大学北京大学,但是你不知道怎么走,又没有导航,只能向路人求助
你问路人A北京大学怎么走
A说:我也不知道怎么走,不过你可以去附近的公交站看看路线
到了公交站牌,你遇到了路人B,你向B问路北京大学怎么走
B说:我也不知道,但是我知道大概方向在北边,你坐公交朝北走吧
就这样一次次的问路,你最终接近了目的地,路由转发也是这种方式
每个路由器只能记录周围的情况,很可能问的目标,并不知道,此时路由器会指出一条默认的路径(路由表中的下一跳表项),把数据报指向更上一级的路由器,而越上级的路由器,就越见多识广,问到路的概率,也就越大