
公网IP全球具有唯一性
ip用点分十进制标识(IPV6)
eg.
121.41.6.245,范围为0,255.0,255.0,255.0,255
目的ip地址 = 目标网络 + 目标主机
主机:配有ip,但是不进行路由控制
路由器:配有ip,且进行路由控制
IP的核心作用:把数据包跨网络转发到目标主机

但是转发到目标主机不一定成功(可能丢包),如果丢包了,就需要TCP协议处理(重传)

上图所示,左边是传输层报头的结构,右边是网络层报头的结构
网络层传输的路径就是由源IP地址和目的IP地址决定的
IP报头的解包:
IP报头报头包括前面20个字节和选项,后面的数据则是报文的有效载荷
IP的报头有里包含四位首部长度,IP报文在计算长度时存在四字节的基本单位
所以实际上报头的取值范围为 20, 60,有四十个字节的选项
去掉前20个字节,剩余的就是选项
16位总长度则是包括了有效载荷的整个报文大小
IP报文通过4位首部长度和16位总长度来进行解包和封包
8位协议字段用来处理分用问题
在tcp/udp封装时,会将自己的协议号填上
根据8位协议,报文技能够继续向上选择tcp或udp继续解包
8位服务类型包括3位优先权字段(已弃用),4位TOS字段和1位保留字段
可以选择要用什么样的方法来转发报文(最小延时,最大吞吐量,最高可靠性,最小成本)

**8位生存时间(TTL)**是报文的生存时间
TTL是一个计数器,每经过一个路由器,计数器--,如果减到0,还没有到达,就就丢弃报文
这是为了防止出现路由循环


子网划分
IP地址 = 网络地址 + 主机地址
同一个子网的IP地址的网络号(网络标识)是一致的(前三位是网络号,一个子网中的网络号都一致)
路由器存在两个IP地址,因为路由器同时属于两个子网

家里第一个入网的设备是路由器,路由器具有构建子网的能力
子网划分可以更快的找到目标IP,根据网络号找到对应的IP地址,查找效率更高
不用再一个一个ip遍历
报文再进行转发的过程中,在到达目标网络之前,只关注IP中的目标网络部分
不同的子网就是把网络号相同的主机放到一起

过去的划分网络号和主机号的方案:
IP地址总共32位
IP地址可以分为ABCDE五类
其特点和范围如下

子网掩码
但是由于大部分组织都申请B类网络地址,导致B类地址很快就分配完了,而A类浪费了大量地址
为此引入了新的划分方案:子网掩码
子网掩码也是32位的正整数,通常用一串0结尾
将IP地址和子网掩码进行按位与,得到的结果是网络号
网络号和主机号的划分与这个地址是A类,B类还是C类无关

全0和全1分别位网络号和广播地址,是特使ip,不能分配给主机,因此实际上的子网地址范围为
256 - 2 = 254


IP地址的数量限制
IP地址总共有2^32个,而每一个主机都需要一个IP地址
同时由于特殊IP地址的存在,数量原不足2^32个
因此会采用:
1.动态分配IP地址
2.NAT技术
3.IPv6(用16个字节,总共128位)
来解决IP地址不足的问题

私有IP地址和共有IP地址
局域网中使用的私有IP地址,理论上可以随便使用
但是规定了私有IP地址:

私有IP,只能用来组建局域网,不能出现在公网中
私有IP由于只在内网中使用,所以不同的子网,IP地址可以重复
但是公网IP不能重复

我们的报文必须经过运营商的转发,才能到达公网
内网到公网的过程:
报文从主机转发到家用路由器,然后将src(源IP地址)替换成所经过路由器的WAN口IP
然后该报文会被转发到运营商的出入口路由器
然后继续修改src,替换成所经过路由器的WAN口IP
至此,源IP和目标IP都变成了公网IP
然后通过公网转发,随后目标IP地址的主机进行应答
根据dst发送回公网的原本的位置
这就是NAT技术

NAT技术缓解了IP地址不足的问题
因为他单独切分了一部分IP,只用他来做内网
这样IP地址就可以被重复利用了
全球网络就是对全球公网IP地址进行划分的过程
划分公网IP由各国家,公司,学校等进行申请的
有路由表存储目标网络的IP地址与其对应的地区
eg.



在查路由表时,如果找不到,就会找缺省路由,缺省路由通常是上一级路由,省级路由器的缺省路由是国际路由

路由

路由的过程就是子网间跳跃的过程
路由器要配置默认路由(缺省路由)
路由器的路由表找不到目标IP,就会找缺省路由,升到上一级路由,再进行寻找
目标IP = 目标网络 + 目标主机
在网络里通过目标网络寻找,到达目标网络后,通过目标主机寻找
主机 + 路由器是自己的网络层,记录配置了自己的路由表信息
可以使用route来查询路由表
转发过程:

IP报文转发的过程,本质就是在各个子网间进行转发
IP主要解决的核心问题就是路径选择(淘汰其他子网)
IP转发过程:
1.寻找目标网络
2.内网进行转发
数据链路层规定,单次发送的数据帧的有效载荷的长度不能超过MTU(一般为1500)
IP报文太长了,会进行分片,分片工作通常由网络层进行
分片后也由网络层进行组装
分片和组装的详细信息被包括在报头中
分片的报文,如果有任意一个丢失,就会判定丢包
分片之后,丢包率增加了
分片不能作为网络发送的主流
所以要尽量减少分片,就要传输层不要发送太大的报文段

如果分片,则16位标识必须全为1
三位标志位,第一位保留,第二位表示禁止分片,如果该位置为1,且报文长度超过MTU,则丢弃该报文,第三位表示更多分片,如果分片了,最后一个分片位置为0,其他为1
13位片偏移是分片相对于原始IP报文开始处的偏移
接收方可以根据16位标识位,片偏移和三位标识来判断是否分片

接收方根据16位标识,确认分片是否放在一起
然后根据片偏移进行升序排序
如果报文开头+偏移量=下一个报文的地址,重复这个过程就能确认是否收起所有分片
片偏移,是数据相对与原始IP报文有效载荷的开始偏移量
片偏移具体的数字,必须是8的整数倍,因为片偏移的数字是实际数据 / 8
8 = 2^3,0, 2\^13\*2\^3 = 2\^16
因为前面的三位被分片标志位占用了
分片后,每一片,都是一个IP报文,每一片都要包含IP报头
所以分片时,不包括报头,直接分片有效载荷,然后填充16位标识,3位标识和13位片偏移
一个分片最多填充1480字节有效载荷+20字节报头
