网络☞五层模型☞IP协议

385 阅读10分钟

IP协议

IP(Internet Protocol)协议 英文名直译就是:因特网协议,简称为“网协”,也就是为计算机网络相互连接进行通信而设计的协议。它规定了计算机在因特网上进行通信时应当遵守的规则,任何厂家生产的计算机系统,只要遵守 IP协议就可以与因特网互连互通。

IP 协议作为通信子网的最高层,提供无状态无连接不可靠尽最大努力交付的数据报传输机制。IP协议是点到点的,核心问题是寻径。它向上层提供统一的IP数据报,使得各种物理帧的差异性对上层协议不复存在。

  • 无状态 是指IP通信双方不同步传输数据的状态信息,因此所有IP数据报的发送、传输和接收都是相互独立、没有上下文关系的。这种服务最大的缺点就是无法处理乱序和重复的IP数据报。
  • 无连接 是指IP通信双方都不长久地维持对方的任何信息。这样上层协议每次发送数据的时候,都必须明确指定对方的IP地址
  • 不可靠 是指IP协议不能保证IP数据报准确地到达接收端,它只是承诺尽最大努力。很多情况都可以导致IP数据报发送失败。

IP地址

Internet的网络地址 是指连入Internet网络的计算机的地址编号。所以,在Internet网络中,网络地址唯一地标识一台计算机。而我们要确认网络上的每一台计算机,靠的就是能唯一标识该计算机的网络地址,这个地址就叫做IP地址,即用Internet协议语言表示的地址

IPv4 和 IPv6

IPv4中规定IP地址长度为32, IPv6是下一版本的互联网协议。

  1. 目前的全球因特网所采用的协议族是TCP/IP协议族,IP是TCP/IP协议族中网络层的协议,是TCP/IP协议族的核心协议。目前IP协议的版本号是4,简称为IPv4。
  2. 发展至今已经使用了30多年, IPv4的地址位数为32位,也就是最多有2的32次方的电脑可以联到Internet上。
  3. 近十年来由于互联网的蓬勃发展,IP位址的需求量愈来愈大,使得IP位址的发放愈趋严格,全球IPv4位址已经耗尽。
  4. IPv6是下一版本的互联网协议,是下一代互联网的协议,它的提出最初是因为随着互联网的迅速发展,IPv4定义的有限地址空间将被耗尽,地址空间的不足必将妨碍互联网的进一步发展。
  5. 为了扩大地址空间,拟通过IPv6重新定义地址空间,IPv6采用128位地址长度,几乎可以不受限制地提供地址,按保守方法估算IPv6实际可分配的地址,整个地球的每平方米面积上仍可分配1000多个地址。

IP协议的主要功能

在相互连接的网络之间传递IP数据报。其中包括两个部分:

  • 寻址与路由:首先要用IP地址来标识Internet的主机:在每个IP数据报中,都会携带源IP地址和目标IP地址来标识该IP数据报的源和目的主机。IP协议可以根据路由选择协议提供的路由信息对IP数据报进行转发,直至抵达目的主机。然后IP地址和MAC地址的匹配,ARP协议。数据链路层使用MAC地址来发送数据帧,因此在实际发送IP报文时,还需要进行IP地址和MAC地址的匹配,由TCP/IP协议簇中的ARP完成。

  • 分段与重组:IP数据报通过不同类型的通信网络发送,IP数据报的大小会受到这些网络所规定的最大传输单元(MTU)的限制。再将IP数据报拆分成一个个能够适合下层技术传输的小数据报,被分段后的IP数据报可以独立地在网络中进行转发,在到达目的主机后被重组,恢复成原来的IP数据报。

IPv4地址

  • IPv4地址由四段组成,每个字段是一个字节,8位,最大值是255,常采用点分十进制来表示,如0.0.0.0。
  • IPv4地址由两部分组成,即网络地址和主机地址。网络地址表示其属于互联网的哪一个网络,主机地址表示其属于该网络中的哪一台主机,二者是主从关系。
  • IPv4地址根据网络号和主机号来分,分为A、B、C三类及特殊地址D、E,D类是多播地址,E类是保留地址。全0和全1的都保留不用,如A类中的0.0.0.0和127.255.255.255都不使用。
    • A类:0~127
    • B类:128~191
    • C类:192~223
    • D类:224~239,组播地址
    • E类:240~254,保留为研究测试使用 image.png
  • 作为特殊用途的IP地址 |范围|描述| |:--|:--| 10.0.0.0/8

    172.16.0.0/12

    192.168.0.0/16|私网IPv4地址,可用于家庭、办公室和企业的内部局域网。设计私网IPv4地址的初衷是缓解IPv4地址耗尽问题。 169.254.0.0/16|Link-local,本地链路的地址,是在本地网络通讯的,路由器不会转发此类IP包;当DHCP服务器故障,或者DHCP超时,不致于设备没有IP而造成连接不上。 127.0.0.0/8|Loopback,回送测试loopback test所用 224.0.0.0/4|IP组播地址 240.0.0.0/4|保留为研究测试使用 255.255.255.255|广播地址
  • 子网掩码是用来标识两个IP地址是否同属于一个子网。它也是一组32位长的二进制数值,其每一位上的数值代表不同含义:为“1”则代表该位是网络位;若为“0”则代表该位是主机位。和IP地址一样,人们同样使用(点式十进制)来表示子网掩码,如:255.255.255.0或192.168.1.2 /24(24表示32位子网掩码前24位都是1,所以是255.255.255.0)

IPv6地址

  • IPv6地址有128位,地址总数共计2的128次方,几乎可以为地球上每一粒沙子都配置上IPv6地址
  • IPv6的格式采用点分16进制的 形式,分为8段,每段16位,一共128位,形如1002:003B:456C:678D:890E:0012:234F:56G7

IPv4报文

前同步码*帧开始界定符*源MAC地址目的MAC地址报文类型IPv4报文内容CRC
7字节1字节6字节6字节2字节(0x0800)46~1500字节4字节

image.png

|字段|长度|描述| |:--:||:--:|:--| 版本号|4bit|不同的IP协议版本使用不同的数据报格式,IPv4其值为4。 首部长度|4bit|若IP数据报没有包含选项,则IP数据报首部长度为20字节,否则需要加上选项的长度 服务类型|8bit|更好地服务不同类型IP数据报(如实时数据报IP电话应用、非实时通信流FTP),Cisco将TOS前3位标识不同服务等级,即优先级。 数据报长度|16bit|IP数据报文内容的长度,即IP首部+数据。 分片:标识、标志、段位移|16bit/3bit/13bit|这3个字段跟IP分片有关。

当目的主机从同一个源收到一批数据报时,需要确定这些数据报是完整数据报还是分片后的数据报,数据报首部标识字段解决这个问题,检查数据报的标识号确定哪些数据报真正是同一个较大数据报的片;

如何判断最后一个分片已收到,数据报首部标志字段解决这个问题,将最后一片的标志为0,其他标记为1;

如何顺序重组这些片,这就需要记录每个片的在数据报有效净荷的偏移量,这也确定了片是否丢失。若丢失某些片,则丢弃这个不完整的数据报(不会交给传输层)。需要可靠传输怎么办呢,由传输层让源重传原始数据摄中的数据(如TCP)。 寿命TTL|8bit|每次数据报经过一台路由器时,该字段的值减1,若TTL字段减为0,则丢弃该数据报,从而确保数据报不会永远在网络循环。 上层协议|8bit|该字段用于指明IP数据报的数据部分应该交给哪个传输层协议(6为TCP、17为UDP)。 首部检查和|16bit|只是对IP首部进行检验,对整个TCP/UDP报文段检验交由TCP/UDP完成。将首部中的每两个字节当作一个数,用反码运算对这些数求和,该和按1补码值存放在检查和字段。当路由器收到IP数据报时,计算其首部检查和,与该字段值比较,若出错则丢弃该数据报。

注:因为TTL字段及选项字段可能改变,所以每个路由器上的首部检查和都须重新计算并存放在原处。(检查后,再更新) 源IP地址|32bit|- 目的IP地址|32bit|- 选项|可变长度|选项字段允许IP首部被扩展,由此导致数据报首部长度可变,故不能预先确定数据字段从何开始,同时也使路由器处理一个IP数据报所需时间差异很大(有的要处理选项,有的不需要)。 数据|可变长度|当使用TCP/UDP协议时,数据即为传输层报文段(TCP/UDP)。数据字段也可承载其他类型数据,如ICMP报文段。 填充|可变长度|以太帧数据段长度最小46字节(算上IP首部),如不满足则需填充。

IPv6报文

image.png

IPv6首部固定40字节长度。 |字段|长度|描述| |:--:||:--:|:--| 版本号|4bit|不同的IP协议版本使用不同的数据报格式,IPv6值为6。 通信量等级|8bit|使得源节点和路由器能够识别IPv6信息包的优先级。 流标签|20bit|标记那些需要IPv6路由器特殊处理(如一种非默认服务质量或实时服务)的信息包顺序。 有效负载长度|16bit|定长40字节数据报首部后面的字节数量,包括扩展报头和负载数据,即数据报长度-40。 下一个首部|8bit|当IPv6没有扩展报头时,该字段的作用和IPv4的上层协议字段一样。当含有扩展报头时,该字段的值即为第一个扩展报头的类型。 跳限制|8bit|转发数据报的每台路由器对该字段的值减1,若减为0则丢弃该数据报。 源IP地址|128bit|- 目的IP地址|128bit|- 数据|可变长度|当数据报到达目的地时,该有效载荷就从IP数据报移出,并交给下一个首部字段中指定的协议。