目录
1. 地址管理
1.1 动态分配
1.2 NAT(网络地址转换)机制
1.3 IP地址的组成
1.4 IP地址网络号和主机号的划分
1.4.1 IP地址分类(ABCDE类)
1.4.2 子网掩码
1.5 特殊的IP地址
2. 路径规划
3. IP协议报文格式
3.1 分包
3.2 组包
1. 地址管理
IP地址在之前跟大家简单介绍了一下:网络基本知识分享_Crystal_bit的博客-CSDN博客
IPv4是传统的IP协议,是4个字节,这个32位整数能表示的地址数为2^32个,是不足以我们全世界的人使用的,所以在IPv4中,我们通过两种方法去解决,分别是动态分配IP地址和NAT机制.IPv6是比IPv4更新的IP协议,是16个字节,有128位去表示IP地址.
注:IPv6从根本上解决(可以表示的地址数是2^128个)了IP地址不够分配的问题.
1.1 动态分配
动态分配指只有某个设备上网才给它分配对应的ip地址,如果不是上网状态,那么就不给它分配ip,简单来说,就是不多就省着点用.
注:只是缓解ip地址不够用的问题,但是不能根本上解决该问题.
1.2 NAT(网络地址转换)机制
将所有ip地址分为两大类,分别是内网IP(在不同局域网可以重复)和外网IP(必须唯一).该机制提高ip利用率.
内网ip:10.* 172.16.* ~ 172.31.* 192.168.*,除内网ip之外,其余都是外网ip.而内网设备不能直接被外网设备访问(当然内网设备访问其他内网设备),不然我们的本地数据就会不安全,但是内网设备是可以访问外网设备的.
注:之前博客中我们说过端口号可以拿来区分同一个主机的不同程序,但是它也可以用来区分不同主机的不同程序,比如多个主机将数据发送给同一个路由器时,路由器就会记下是主机哪个程序发送的数据,返回数据的时候也根据记下的端口号返回给该主机的程序.
1.3 IP地址的组成
主要分为网络号和主机号,网络号用于标识一个局域网,主机号用于标识一个局域网内部的主机.
注:一个路由器有两个在不同的局域网的ip地址,可以用它将两个局域网连起来.
1.4 IP地址网络号和主机号的划分
一个IP地址的前三个字节不一定就是网络号,网络号和主机号的划分有两种方式:一种是根据IP地址进行分类,这种方式一般出现在教科书或者我们笔试面试中,实际我们使用的是另一种叫子网掩码的方式,并且家用网络的子网掩码一般都是255.255.255.0.
1.4.1 IP地址分类(ABCDE类)
A类:0 + 7位网络号 + 24位主机号. B类:10 + 14位网络号 + 16位主机号.
C类:110 + 21位网络号 + 8位主机号. D类:1110 + 28位多播组号.
E类:11110 + 27位(留待后用)
每个类别的网络号和主机号长度固定.
1.4.2 子网掩码
子网掩码是一个32位的整数(二进制),左侧有多少个1,那么ip地址的哪些位就是网络号.比如255.255.255.0,一个255以二进制表示就是八个1,也就是一个字节,三个255,就是24个1,一共就是3个字节,所以前三个字节就是网络号,最后一个字节是主机号.
注:左侧都是1,右侧都是0,不会出现1010的混合情况.
1.5 特殊的IP地址
● 主机号为0(192.168.0.0)的ip就是网络号,局域网里不应该存在某个主机号为1的主机.
● 主机号为全1(192.168..0.255)为广播地址,在不知道目标ip是什么时,靠广播功能去探测.
往广播地址上发送udp数据报,该数据报会被转发给整个局域网的所有主机.
● 环回ip(127.*),对应特殊的虚拟网卡,通过虚拟网卡传输数据属于纯内存操作,比普通ip传输数据的速度要更快.
● 主机号为1(192.168.0.1) 大部分情况下一般作为"网关ip",并不强制约定.网关是局域网的出入口.
注:Tcp不支持广播.
2. 路径规划
我们做旅游攻略的时候,我们从源目的前往旅游地的路线肯定不止一条,那路径规划就是给我们指明具体应该走哪一条路. 网络环境下是很复杂的,我们没办法把整个网络环境记录在某一个路由器下,路由器只能记录邻居的信息(通过路由表整个数据结构),转发数据的过程是渐进式的,类似于问路的过程,比如你去到一个陌生的地方,一般会找附近的人问路,附近的人不一定知道你的目的地究竟在哪里(该路由器的路由表中没有目的ip),但是会指引你一条他们认为更接近目的地的路径(相当于路由器的指出的默认路径-->在路由表的"下一跳表项"),会将你指向更上级的路由器(路由表的ip会更多,匹配到目的ip的几率会更大),就这样逐渐问路,然后找到目的ip主机.
注:此外还有诸多细节,比如路由表如何匹配?路由表如何生成?这里还涉及很多复杂的生成算法,我就不进行拓展学习了.
3. IP协议报文格式
在网络层,IP协议会完成分包和组包的功能(如果承载数据长度超过数据链路层数据帧的最大载荷长度(MTU),就会在IP层分包,使分出来的数据长度都能在MTU之内).
3.1 分包
一个大的IP数据报拆分成多个小的数据报之后,对应的16位标识这个字段值都是一样的, IP虽然能拆包,但是传输的UDP最大长度也是64k,拆分出来的IP数据报只有一份UDP首部,该首部UDP长度还是只有2个字节.
3.2 组包
多个小的ip数据报通过自己的13位片偏移来确定它们之间的先后顺序是什么样的,然后用来组包.而3位标志位,1位是不用,有1位表示是否分包了,最后1位表示当前包是否是最后一个子包(结束组包的标记).
总结完毕~撒花~