什么是IP协议
IP是Internet Protocol 的简称,IP 协议处于 TCP/IP 五层模型的网络层,它的主要功能是数据的传输和路由选择。
IP数据报格式
IP数据报的格式能够说明IP协议都具有什么功能,以下详细介绍:
1) 4位版本号,占用4位,指定IP协议的版本,对于IPv4来说,就是4
2) 首部长度,占用4位,表示IP头部的长度是多少个32bit,四个字节的最大数字是15,因此头部的最大长度计算为 15 * 4 = 60 个字节
3) 服务类型,占用8位,其中4位TOS字段,分别表示:最小延时、最大吞吐量、最高可靠性、最小成本
,这四者相互冲突, 只能选择一个。它的作用就是告诉路由器我更偏重哪个方面。例如:ssh 应用
更加在乎实时性,就将最小延时位置1,表示我的愿望,最终愿望能否得到实现,并不一定。又或者 ftp 程序
更加在乎传输速率,因此将最大吞吐量位置1,同样这只是一个愿望。
4) IP数据报总长度,占用16位,最大65535个字节。在IP层的下面链路层都有自己的帧格式,其中帧数据的最大长度称为MTU最大传送单元
,当一个IP数据报封装成链路层帧时,帧数据的长度(IP首部+数据)一定不能超过MTU值,同样为了保证传输效率也有一个最小的传输单元。当数据超过了MTU时需要进行分片处理才能进行发送,此时IP数据报首部的总长度指的是分片以后的首部及数据的长度总和
。
5) 标识,占16位,IP软件维持这一个计数器,每产生一个计数器计数器加1,并将此值赋给标识字段。当IP数据报被分片后,相同标识的数据报片最后会重装在一起。
6) 标志字段,占3位,只有两位有意义。MF = 1 表示后面还有分片
,=0 表示当前分片是最后一个;DF = 1 表示不能分片,只有 =0 才允许分片。
7) 片偏移,占13位,分片相对于原始IP报文开始处的偏移,实际偏移的字节数是这个值 * 8 得到的,因此,除了最后一个报文之外,其他报文的长度必须是8的整数倍
(否则报文就不连续了)
举例:
一个IP数据报的总长度为3820字节,数据部分为3800字节,MTU为1420。
因固定首部长度20字节,因此每个数据报片的数据长度不能超过1400字节,于是分为3个数据分片,数据部分的长度分别为 1400、1400、1000字节,原始数据报的首部被复制作为各数据报片的首部,但是必须修改有关字段的值(例如总长度、片偏移)。
经过分片的数据报,在传输过程中还有可能进行二次分片。
8) 生存时间(TTL),占8位,数据报到达目的地的最大报文跳数,最大是255,每次经过一跳,TTL -= 1
,一直减到0还没到达,那么就丢弃了,这个字段主要是用来防止出现路由循环
9) 协议,占8位,指出数据报携带的数据用的哪种上层协议,以便接受主机知道交给谁进行处理。
10) 首部校验和,占16位,这个字段只校验数据报的首部
,不包括数据部分。因为每经过一个路由器,路由器都要重新计算一下首部校验和(生存时间、标志、片偏移都可能变化),不检验数据部分可以减少工作量,数据部分由传输层最终进行校验。
11) 32位源地址和32位目标地址,表示发送端和接收端
12) 选项字段,不定长, 最多40字节
网段划分方案 CIDR
首先一个IP 地址分为两部分:网络号和主机号
。网络号是保证相互连接的两个网段具有不同的标识;主机号是同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号。
不同的子网就是将网络号相同的主机放在一起,如果子网中多了一台主机,那么这台主机和该子网中的所有主机有着相同的网络号,但是主机号一定不相同。
CIDR
是一种主机号和网络号的划分方案,它引入了一个额外的子网掩码来区分网络号和主机号;子网掩码也是一个32位的正整数,通常以一串0
结尾;将IP地址和子网掩码进行按位与操作
得到的就是网络号。
IP地址和子网掩码还有一种简单的表示方式 172.17.50.109/24
,24表示的就是子网掩码的高24位是1
IP地址不够用的解决方案
IPV4 直接用一个32bit的整数
来作为地址,最大数量42亿9千万,这个数字很大,但是依旧不能满足需求,因此想使用IPV4给每台机器分配一个唯一的地址是不可能了,这个问题怎么解决呢?
a) 动态分配 ip地址,联网就分配,否则就不分配
b) NAT 机制,一个 ip 代表一大堆用户,然后用其他方法区别这一大堆用户
c) IPV6 是解决地址不够用的最核心办法,但是与 IPV4 不兼容
私有IP地址 和公网IP地址
如果一个组织在内部组建局域网,IP 地址只用于内部通信,那么不管 IP 地址是多少,只要内部不重复
就可以正常通信,和外部无关系(即使 IP 地址和外部冲突)
但实际上私有IP也并不能随意设置,RFC规定了私有IP的使用范围:
10.*,前8位是网络号,共16,777,216个地址
172.16.*到172.31.*,前12位是网络号,共1,048,576个地址
192.168.*,前16位是网络号,共65,536个地址
一个路由器分配两个 IP
,一个是WAN口IP,一个是LAN口IP(子网IP);路由器LAN口连接的主机,都从属于当前这个子网中;不同的路由器的子网IP其实都是一样的,子网内的主机IP地址不能重复,但是子网之间的 IP 地址可以重复
;每一个家用路由器都作为运营商路由器子网中的一个节点,这样的运营商路由器有很多级,最外层
的路由器的WAN口就是一个公网IP
;子网的主机需要和外网进行通信时,路由器将IP首部的IP地址换成WAN口IP,这样逐级向上都进行替换,最终替换成 公网IP,这种技术称为 NAT
(地址转换技术)。
路由选择
IP数据包路由的过程实际就是 "一跳一跳"
的问路的过程,所谓 “一跳” 就是数据链路层中的一个区间,具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间。
当数据帧传输给路由器后,经过层层分用递达路由器网络层,网络层获取到目的IP地址,并查看路由表
来确定下一步发送的地址(直接发送目标主机还是下一个路由器),重复上述过程一直到达目的地址。