目录
IP协议报头
网络层协议做的工作主要是 地址管理与路由选择(做路径规划)
- 4位版本号:指的是IP协议的版本4/6 ,指的是IPV4 / IPV6
- 4位头部长度 : 指的是IP报头的长度,会带有选项字段(可以有也可以没有),最长占60字节,最短占20字节.
- 8位服务类型 : 有4位有效位(4个服务类型是互斥的,一个报文里面只有一个是1,剩下的都是0用来表示服务类型,有4个形态(1).最小延时.2).最大吞吐量.3).最高可靠性.4).最小成本 根据这4个需求可以切换到不同的形态.),4位是保留位(为后续的扩展流出剩余)
- 16位总长度 : 表示一个IP数据报有多长(长度为IP报头+载荷),
IP协议内置拆包和组包的功能,如果TCP数据报太长,IP就会进行分包,每个包携带一部分TCP数据.
- 16位标识 : 唯一的标识主机发送的报文,如果IP报文被分片了,那么每一片的标识都是相同的.
- 3位标志位 : 其中最重要的一位是标识结束标记(为1就代表结束)
- 13位片偏移 : 描述拆出来的每个包的先后顺序.
UDP实现拆包组包可以参考IP的三个字段(标识,标志位,片偏移).
- 8位生存时间 : 描述IP数据报,还能在网络中存活多长时间.
网络环境非常复杂,A->B发送一个IP数据报,数据报就会沿着网络尝试去找B的位置,如果B存在就会直接发送,如果B不存在,就会设置初始TTL(是转发次数) ,每次经过一个路由器就会次数-=1,如果最后TTL为0,那么就认为IP找不到就会触发丢包.
- 8位协议 : 表示传输层使用了哪些协议.
- 16位首部校验和 : 校验和功能对数据进行校验,发送数据前进行计算,接收数据后在进行计算然后看计算的结果是否一样.
- 32位源IP地址相当于发送方地址,32位目的IP地址相当于接收方IP地址
其中源IP地址,目的IP地址,源端口号,目的端口号,协议类型 称为5元组
IP地址可以保证唯一么?
也就是说可以给每一个主机分配一个唯一的IP地址么???
由于现在手机端+pc端+海量服务器+物联网,就会导致IP地址不够用
如何解决IP地址不够用的问题呢???
动态分配IP地址(DHCP)
动态分配IP地址也就是当设备上网的时候就分配IP地址,不上网的时候就不分配IP地址.
NAT (IP地址转换)
将IP地址分为两大类,一个是内网IP(局域网里面使用的IP),一个是外网IP(广域网中使用的IP).
允许局域网之间的内网IP重复,但是外网IP要保持唯一.
客户端给服务器进行发送数据报,数据报会经过一些设备进行转发,没经过一个路由器就会进行一次IP地址的替换(路由器会记住替换的是哪一个IP地址),当服务器返回给客户端的时候数据报也会经过一系列路由器之间的转发,会将IP地址替换回来,返回给客户端.
NAT机制本质上就是利用一个外网IP代表一大批内网的设备,这样就会将一大批IP地址省下来了.设备之间的IP就可以做出区分了.
IPV6
IPV6是解决IP地址不够用的最终解决方案,IPV6和IPV4是完全不同的两个协议.
IPV4 是4个字节 也就是 2^32 bit
IPV6 是16字节 也就是 2^32 * 2^32 *2^32 *2^32
IP地址的分类
为了更好的组网,IP又划分为网络号和主机号
主流的划分方式为 : CIDR ;
引入了子网掩码,通过子网掩码来区分哪部分是网络号,哪部分是主机号.
同一个局域网内部,设备之间的网络号都是一样的,主机号是不同的
两个相邻的局域网,网络号是不同的
绿色局域网设备网络号都为192.168.0
如果两个设备主机号相同,就会导致其中一台设备无法上网(IP地址可以通过DHCP自动来分配,也可以通过手动的方式进行分配)
特殊的IP地址
- 将IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网;
- 将IP地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包;
- 127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信
路由选择
路由选择就相当于是一个人在问路,每次到达某一个地方就会问路,最终一点一点接近目标地点.
每一次问路就相当于是一次路由转发,每次经过路由器会告诉我的目的IP,路由器都会有一张路由表,路由器会根据目的IP在路由表中匹配,如果匹配到了就会按照指定的方向继续往下转发,如果没有匹配到就会有一个默认的方向为下一跳地址(指的时路由器的默认选项).