IP协议相关特性
报头结构
报文结构解释
4位版本号:指定IP协议的版本,对于IPV4来说,就是四位.
4位首部长度:IP头部的长度是多少个32bit,也就是Length4的字节数,4bit表示的最大的数是15,因此IP头部最大长度是60.
8位服务类型:3位优先权字段(已经弃用),4位TOS字段,和1位保留 字段(必须置为0)。4位TOS分别表示:最小延时,最大吞吐量,最高可靠性,最小成本。
这四者相互冲突,只能选择一个。对于ssh/telnet这样的应用程序,最小延时比较重要;对于 ftp这样的程序,最大吞吐量比较重要。
16位总长度:IP数据报整体占多少个字节.
16位标识:唯一的标识主机发送的报文.如果IP报文在数据链路层被切断了,那么每一个片里面的这个id是相同的.
3位标志字段:第一位保留(现在不用),第二位置为1表示禁止分片,这时如果报文长度大于MTU,这时IP模块会丢弃报文,第三位表示"更多分片",若被分片,最后一个分片置为1,其他为0.类似一个结束标记.
13位分片偏移:是分片相对于原始IP报文开始处的偏移就是当前分片在原报文中处在哪个位置.实际偏移的字节数是这个值8得到的.因此除了最后一个报文之外,其他报文长度必须是8的整数倍(否则报文不连续了).
8位生存时间:数据报到达目的地的最大报文跳数.主要防止出现路由循环.
8位协议:表示上层协议的类型.
16位首部校验和:使用CRC进行校验,防止出现头部损坏.
32位源IP地址和32位目的IP地址:表示发送端和接受端.
IP地址相关问题
从报文结构得知,IP地址是一个4字节,32位的整数.我们通常会把这个整数转换为点分十进制的表示方法:
这样一串东西就是我的IP地址,三个点把整数分为了4个部分,每部分都是一个字节,每个部分的取值范围0~255.
那么32位整数可以产生多少个不同的地址?42亿9千万个,在互联网的发展下,这个数目已经不够用了,那么如何解决地址不够用的问题呢?
- 动态分配IP地址只给正上网的设备分配地址
- **
NAT机制
**
NAT的工作机制可以以10.0.0.10的主机与163.221.120.9的主机进行通信为例讲解,具体如下:
当10.0.0.10的主机需要与163.221.120.9主机进行通信时,NAT路由器会将源地址从10.0.0.10转换为全局的IP地址(202.244.174.37)再发送数据。 当响应数据从163.221.120.9发送过来时,NAT路由器会将目标地址(202.244.174.37)先转换成私有IP地址10.0.0.10以后再被转发。
NAT机制将IP地址分为了两大类,一类我们称为内网,一类分为外网
- 内网IP可以重复出现,内网IP地址是由路由器分配的本地IP地址,在同一个局域网内不会出现重复的情况。
- 外网IP:剩下的所有IP 外网IP必须唯一
NAT背景下如何通信
1、外网设备 >> 外网设备,可以直接通信
2、内网设备 >> 其他内网设备, 不允许
3、外网设备 >> 内网设备, 不允许
4、内网设备 >> 外网设备,对应的内网设备的路由器,触发NAT机制进行IP替换,此时就会给这个网络数据报的源IP替换成路由器自己的IP。
IP地址组成
IP地址分为两个部分,网络号和主机号
网络号:标识网段,保证相互连接的两个网段具有不同的标识。
主机号: 标识主机,同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号。
子网掩码
从二进制角度来看,左侧都为1右侧都为0,为1的部分有几位,就有几位网络号,剩下的就是主机号了.
特殊的IP地址
- 主机号全部为0的
例如:192.169.0.0 这个就是一个网络号,局域网中不存在某个主机的主机号为0。 - 主机号全部为1的
192.168.0.255 这是一个广播地址。 - ip为127.*开头的我们成为环回IP
- 主机号为1的,一般作为网关IP,这个不是绝对的。
MTU
一般我们把数据链路层的数据帧的最大载荷为MTU,若承载的数据长度超过这个MTU,那么就会在IP层进行分包,
另外,我们需要关注3个内容:
- 16位标识:一个大的IP数据报拆分为小的报后这个标识都是一样的
- 3位标志位:有1位不用,一位表示是否分包,还有1位表示当前这个分包是否是最后一个(结束标志)
- 13位片偏移:总得来说就是表示每个小的数据报的先后顺序,用来组包的.
MTU对IP协议的影响
由于数据链路层MTU的限制,对于较大的IP数据包要进行分包
将较大的IP包分成多个小包,并给每个小包打上标签;
每个小包IP协议头的 16位标识(id) 都是相同的;
每个小包的IP协议头的3位标志字段中,第2位置为0,表示允许分片,第3位来表示结束标记
(当前是否是最后一个小包,是的话置为1,否则置为0);到达对端时再将这些小包,会按顺序重组,拼装到一起返回给传输层;
一旦这些小包中任意一个小包丢失,接收端的重组就会失败。但是IP层不会负责重新传输数 据;