接下来我们来看TCP/IP的五大层之网络层,这部分是非常复杂的一部分,TCP/IP协议栈
1.IP协议
1).四位版本
:用来表示IP协议的版本,现在的IP协议只有两个版本,IPv4,IPv6
2)四位首部长度
:设定和TCP一样,IP报头可变长的,IP报头也是带有选项的,此处的单位也是四字节的
3)八位服务类型
真正只有四位才有效果,其中服务类型有多个机制,有最小延迟,最大吞吐量,最高可靠性,最小成本等形态,四种形态是类似的,只能切换到一种形态
4)16位总长度
这里指的是IP报头+载荷的长度,
总长度 - IP报文长度=>载荷长度=>TCP报文总长度
TCP报文总长度 - TCP报头长度 => TCP载荷长度
这里的16位总长度,也设计64kb问题,但是ip协议,自身支持“拆包组包”机制,这里的64kb只是约束了一个数据报,如果需要携带比较长的数据的时候,IP协议会自动把一个数据报拆成多个数据报,接收方在进行分用的时候,也会把多个数据报合并层一个数据报
5)16位总长度的内部
描述了整个IP数据报拆包组包的过程
当IP数据报需要携带比较长的数据的时候就在IP协议这一层触发拆包操作,把一个大包拆成多个小包,多个小的IP数据报都会带有IP报头,载荷是TCP数据报的几个部分,例如
我有一个很长的数据,把它拆成两个报
拆成如下两个
这里面16位标识是相同的,13位片偏移是不同的,前一个包片偏移更小,后一个包更大
三位标志位:其中有一位是不用的,还有一位,表示是否允许拆包,在这里都拆了,都是1
剩下一位,表示“结束标记”标识当前包是否是最后一个,为0表示是最后一个包
6)8位生存时间
TTL,单位是次,初次情况下TTL会有个数值,每经过一个路由器转发,TTL就会-1,减到0了,就会被丢弃
7)8位协议
描述了上层,传输层用了哪种协议
8)16位首部检验和
校验数据是否正确的机制,只需要校验首部即可,
9)32位源ip和目的ip地址![](https://img-blog.csdnimg.cn/9f661792d4aa40d1b8d7f21932bf62cb.png)
IP协议中最重要的部分,它是来描述主机的具体位置,
所谓ip地址,是一个32位的总数(四字节)由于按照32位的方式表示,数字会变得很大,难以理解记忆,一般都会把ip地址按点分十进制的方式来表示
(使用三个 . 把32位分成四个部分,每个部分就是八位,一个字节,每个字节范围为0-255)
a)ip地址不够用了咋办
1.动态分配ip (DHCP)
一个设备,不会一直上网,需要上网,就分配ip,不需要就先不分配ip
2.NAT机制(网络地址转换)(理解网络结构的关键要点)
ip地址不很够用,于是我们就把IP地址分成了两大类:内网ip和外网ip,内网ip:不同的局域网内的设备,内网ip可以重复,同一个局域网内的设备,内网ip不能重复,因此,
外网ip:外网ip不能重复
3.假如两个局域网之间的设备进行通信(当前这两个设备的ip可能相同),因此,直接禁止这种通信,想要通信,就需要有一个外网的ip设备进行中转
4.局域网内部的设备访问带有外网ip的设备
5.通过NAT机制发送信息
向我们用的手机电脑都是在服务器内部进行使用,他们会有一个内网ip,还有一个类似服务器的设备,具有外网ip;
发送给服务器端
服务器返回信息
上述情况只是一个简化的过程,实际上电脑数据经过一次路由器都“可能”会进行NAT
6.NAT的缺点和优点
缺点:
1.效率不高
2.非常繁琐
3.不方便直接访问局域网内的设备
优点:NAT是一个纯软件实现的机制
7 .IPv6(从根本上解决ip地址不够用的问题)
IPv4使用四个字节,32位标表示ip地址
IPv6是16个字节,128位表示ip地址
1.IPv6和IPv4不兼容,想要升级IPv6就必须要更换路由器,相比之下,NAT方案只需要开发商升级软件(成本很低)
8.ip地址的组成
a)ip地址分为两部分,网络号和主机号
b)如何分辨ip地址中的网络号和主机号
通过子网掩码来识别的,子网掩码和ip地址一样,也是四个字节,32位整数,左侧必须是连续的1,右侧必须是连续的0,子网掩码是现代的划分网络号的方案,更早的时代有另一种方式
9.特殊ip地址
上面说的内容主要是ip协议如何管理地址的(地址管理)
ip协议另一个重要的功能,路由选择(数据报在ip协议下如何传播)是很复杂的,跟tcp一样的难
10.路由器转发的过程,类似于“问路”走一步看一步 每个路由器内部,都有一个数据结构“路由表” 数据报到达路由器的时候,就需要查询路由表(问路)
1.如果查到了,就可以继续按照这个方向继续转发,数据就能到达
2.如果没查到,路由器就会给一个默认的方向(下一跳地址),沿着默认的方向走(往往是走到了上一级路由器这里)