计算机网络学习笔记(2):IP协议

主要内容:IP头部,IPV6扩展头部,IP转发。IPV6扩展头部主要是分片头部。

引言

IP是TCP/IP协议族中最核心的协议。所有TCP,UDP,ICMP,IGMP数据都通过IP数据报传输。IP提供了一种尽力而为,无连接的数据交付服务。尽力而为是指,它不保证数据报能够成功到达目的地。

IPV4头部和IPV6头部

计算机网络学习笔记(2):IP协议_第1张图片
IPV4数据报

版本字段:占4位,指出数据报的IP版本,比如IPV4为4,IPV6为6。

IHL:头部长度字段,占4位,用于保存头部中32位字的数量,最大十进制数为15,这意味着IPV4头部最大为60个字节,IPV4头部的包括20字节的固定大小和40个字节的选项(可变)。

DS字段:占6位,该字段用于IP在网络传输中提供特殊服务,如优先级,DS字段和ECN字段以前称为服务类型字段。

计算机网络学习笔记(2):IP协议_第2张图片
服务类型字段

前三位表示优先级位,不同的数字表示不同的优先级,D表示延时,T表示吞吐量,R表示可靠性。IP数据报以某种方式被标记(优先级,D,T,R),使他们的转发不同于其他数据报,比如优先级高的会优先转发。DS字段的机制和服务类型字段相似。

ECN字段:拥塞标识符,当目的主机收到的数据报的该字段被标识,他会被主机发现,并且通知发送方降低发送速度。

总长度字段(IPV4):记录IP数据报的大小。该字段占两个字节,间接说明IP数据报最大不超过65535个字节。虽然IP数据报的最大可以达到这么大,但是大多数链路层(以太网)不能发送这么大的数据,一般为1500个字节。

标识,标识符,偏移量放在后面讲IPV6的分片头部讲。

生存期(TTL):该字段用于表示IP数据报在网络中被节点(路由器)转发的次数,每被一个路由器转发一次该值减1。生存期在IPV6中称为跳数。该字段的的设置有效防止了,一个数据报在网络中出现环路。

协议:IP数据报负载部分数据的类型,就是上层协议的类型,比如UDP(该字段值17),TCP(值为6)。使用协议是的IP可携带不同上层协议的数据,实现复用。

头部校验和:用于接收方校验在传输过程中头部是否出现错误。该字段一般在发送方计算,接收方校验。

源IP地址,目的IP地址:发送方和接收方的IPV4地址。

选项:选项字段可以理解为IP数据报的扩展功能。我们先不详细解释,讲TCP的时候会把常用的选项仔细解释。

IP数据:IP所携带的上层数据,该值最大为65515(IPV4头部固定大小为20字节,不带任何选项)

计算机网络学习笔记(2):IP协议_第3张图片
IPV6头部

IPV6头部相对于IPV4来说相对于简单,有些地方不一样。版本,DS字段,ECN,跳数(TTL),源IP,目的IP,这些字段和IPV4基本上一样。

负载长度:只用于记录所携带的数据的长度,不包括IPV6头部,但包括扩展头部。

下一头部字段:由于IPV6使用扩展头部,该字段用于表示下一个头部(扩展头部,负载数据中的头部,就是传输层协议的头部),他们形成一条包括特殊扩展的头部链。

流标签:目前该字段没有使用,我上网上找了很多资料没弄明白它的用途,如果有知道的分享分享。

IPV6也有像IPV4中标识,标识,偏移量字段,这些字段用于表示IP分片。IPV6把标识分片的字段放在了扩展头部中的分片头部中。

IPV6路由头部

IPV6路由头部为发送方提供了一个IPV6数据报控制机制,以控制数据报在网络中经过的路径。

分片头部

当源主机主机向目的主机发送一个大于路MTU(最大传输单元)的数据报时,主机或路由器可将该数据报进行分片。在IPV4中,如果数据报超过下一跳的MTU,任何主机或路由器可做分片操作,在IPV6中,仅数据报的发送者才能执行分片操作。

这里以IPV6举例讲IP分片,因为IPV4的操作和IPV6的一样。

IPV6数据报执行分片需要有分片头部

计算机网络学习笔记(2):IP协议_第4张图片
IPV6分片头部

下一个头部字段和IPV6头部中下一个头部字段表示含义相同,保留字段和RES字段目前都是0。

分片偏移:占13位,和IPV4头部中的一样,该字段以8字节为单位,表示分片数据报的数据部分在原数据中的位置,等会儿会举例讲这个。

M字段:占1位,在IPV4中也有该字段,只是它包含在标志位中,M字段值为1则表示还有更多分片,如果该值为0表示该分片是原始数据的最后一个分片。

标识符:在IPV4中也存在该字段,每个分片的值都是一样的,该字段的主要目的是为了区别网络中不同的数据报,标识符相同的数据报属于同一个原始数据报,以便于在目的端进行数据报重组。

计算机网络学习笔记(2):IP协议_第5张图片
偏移量计算

偏移量就是分片数据报数据的起始点在原数据中的相对位置,以8字节为单位,比如上图的第一个分片,起始点是从第0个字节开始的,那么偏移量为0/8=0,M=1表示我不是最后一个分片。第二个分片数据是从原始数据的1448字节开始的,那么用偏移量表示它在原始数据的相对位置1448/8=181,M=1,表示我不是最后一个分片。一次类推,其中每个数据报的标识符字段的值都是一样的,该字段是计算机通过某种算法生成的,以区别不同的数据报。每个数据报的长度应该都会算。

原始数据报由两部分组成:不可分片部分(IP头部,IPV6可能会包含一些扩展头部)和可分片部分(数据)。分片之后每个分片的IP头部会做相应的改变,比如负载长度。

IP转发

从整体看来IP转发感觉很简单,特别是对于主机,如果目的主机属于同一网络,且直接相连,就不用通过路由器,直接交付数据就可以。两台主机不在同一网络时通过路由器,路由器将数据交付给目的主机。当然主机是不转发IP数据报,即使它被配置为一台主机。

那么IP层收到数据会做些什么?

IP层可以收到来自上层协议的数据(比如TCP,UDP,接收设备一般是主机),也可以收到来自网络接口数据(那肯定是别人通过网络发给我的呀。)。来自上层数据很简单啊,做相应的封装 ,交给下层协议通过网络接口发出去。如果收到来自网络接口的数据,这就有点麻烦了,毕竟路由器,主机都能通过网络接口接收数据。这个时候就要看看接收设备是一台主机还是一台路由器。如果是主机,检查一下这个数据是不是发给我的,如果是就做相应的处理(校验,去IP头)把它交给上层协议。如果不是那就更简单了,直接丢弃。如果接收设备是一台路由器,这时候就要发生我们所说的IP转发了。

转发表

IO转发行为依赖一个叫转发表的东西,转发表主要包括目的地,掩码,下一跳,接口等信息。

目的地:他就是一个网络号(关于网络号,主机号,子网划分,掩码等我们放到讲IP结构和作用是一起讲),只要明白他用于Internet中标识一个网络即可。

掩码:掩码本身就只有一个作用,区分一个IP地址中的网络部分和主机部分。一个IP地址和掩码做与运算就能得到一个网络号,还是解释一下网络号吧。打个比方,你家住成都,家庭住址是成都市某某区某某小区...。那么网络号就是成都,IP地址就是你的家庭住址,一个快递寄给你,发送方的邮递员可能不知道你家这个地址,但是他知道成都,他把快递送到成都就行,成都的快递员肯定知道你这个地址,然后再给你送过来。对,就是这个意思。通过掩码拿到网络号后,路由器就知道我要把数据交到哪个网络。

下一跳:它就是IP地址。找到网络号了,我要把数据发送到这个网络,但是太远了,我懒得走我就把他交给离我最近且能到达目标网络的节点。下一跳所对应的IP地址可能就是这个中间节点,也可能是主机(说不定我就是最后一个节点,主机就连着我)

接口:一个路由器通常连接着多个网络(至少是两个吧,不然怎么转发和路由),因此他会有多个IP地址。转发表条目中的接口指名,通过那个IP地址把分组发给下一个实体或节点。

直接交付和间接交付

接下来就说一下什么是直接交付什么是间接交付。直接交付:举个例子,我有个东西我想把它交给我朋友,我朋友还离我特别近,我可以亲自拿给他,不用通过邮寄或者别人带给的方式。这就是直接交付,分组不用通过其他网络设备中转,直接交付给目的主机。间接交付:我俩太远了,我不能亲手给你,我找个快递公司发给你,对于我来说这是间接交付,对于快递公司来说是直接交付。

转发行动

说了这么多终于到转发了。

(1).当路由器收到分组时,从分组的首部提取目的IP地址D。

(2).先用转发表中的各网络的子网掩码和D做与运算,看是否和相应的网络号匹配,若匹配,则将分组直接交付给这个网络,否则就是间接交付,执行(3)。

(3).若路由表中有目的地址为D的特定主机路由,则将分组传送给指名的下一跳路由器;否则执行(4)。

(4).前两个都不符合,那就找一个网络号符合度最高的,将转发表中的子网掩码与D做与运算,执行最长前缀匹配算法。找到最匹配的网络号,将分组传递给下一跳路由器;否则执行(5)。

(5).若路由表中有默认路由则直接将分组传递给默认路由器;否则执行(6)。

(6).报告转发错误,主机不可达(将ICMP会讲到)。

IP协议主要将这么多,关于IP协议涉及的算法会放到算法里面讲,比如最长前缀匹配算法,二叉线索查找路由表。IP地址结构会单独讲,主要需要算的太多了。

我也不知道讲的对不对,如果有错的希望大家指点。

你可能感兴趣的:(计算机网络学习笔记(2):IP协议)