计算机网络层相关协议(IP协议等)......

在TCP/IP协议族中,两大重要协议就是传输层的TCP协议和网络层的IP协议。本文主要讲网络层的IP协议以及其余相关协议。git

IP协议

IP协议做为TCP/IP协议中最重要协议之一,理解和掌握IP协议相关知识点,在实际项目工做中,能起到指导性做用。github

分类IP地址

分类地址即将32位IP地址划分红两个固定长度的块,每一个块表明不一样的含义。其中一个称为网络地址,用来标明主机所接入的网络,该网络地址在全球惟一的;另外一个称为主机号,标识接入前面网络地址的主机。从这种两级的IP地址结构能够看出,IP地址在互联网上都是惟一的。常见的分类地址就是A类、B类、C类。算法

上图中,A类、B类、C类都是单播地址,网络号前面0、十、110值固定的,永久不会改变。其对应的网络号位数也分别是八、1六、24位。网络号所占位数越多,能接入的主机就越少,毕竟IP地址固定为32位。 32位二进制的记法并不适合咱们人类阅读,从引进方便人类阅读的点分十进制,也就是咱们熟悉的样子:128.11.3.31。

在A类地址中,网络号占8位,第一位固定为0,那么还剩下7位。因为网络号全为0表明本地(“this”)和网络号全为1(0111 1111)表明本地软件的环回地址。因此可分配的网络号数为2 7-2。与网络号相似,主机号全零的IP地址表示“本机”所链接到的单个网络地址;而全1则表示该网络号上的全部主机。所以A类的主机数为2 24-2。

在B类地址中,网络号占16位,即两个字节,前两位固定,那么可分配的网络号数为214(由于网络号后面14位不管如何取值,都不会出现全零和全1的情况,因此不须要减2。但实际上128.0.0.0网络地址是不指派的,因此网络地址总数应该是214-1。那么主机号数共216-2。缓存

C类地址与B类地址相似,因此网络地址总数为224-1,主机数为28-2。网络

D类地址经常使用于多播,即一对多通讯。post

IP数据报格式

经过IP数据报的格式能够知道IP数据报具备什么功能。 性能

IP数据报由首部和数据两部分组成,首部固定20个字节,也就是说IP数据报最小长度20个字节。

  • 版本:长度共4位,指定IP协议的版本,例如IPv4(版本号为4)和IPv6(版本号为6),通讯双方使用的IP协议版本必须一致。测试

  • 首部长度:长度共4位,由于首部存在可变部分,因此首部长度=固定部分(20字节)+可变部分长度。由于固定部分长度20个字节,全部首部长度最小值为5(由于首部长度字段 所表示数的单位是32位字长,即4个字节。20个字节等于数5,即0101)。当首部长度4位为最大值全为1时,即十进制的15,那么能够表示首都最大长度为60字节。当首部长度不是4个字节的整数倍时,须要用填充字段进行填充。this

  • 区分服务:用来得到更好的服务,通常状况下不使用。3d

  • 总长度:长度为16位,单位为字节,表示整个数据报的长度,即总长度=首部长度+数据部分长度。总长度最大值为216-1=65535个字节。

  • 标识:长度共16位,IP软件在存储器维持一个计时器,每发送一个数据,计时器就增1,并将该值赋值给 标志 字段。标志字段主要为了IP数据报在须要分片时,会复制到每一个数据片的标志字段,各个数据片在接收后可以正确组装成原来的数据报。

  • 标志:共3位,目前只有两位有意义。最低位记为“MF”,即MF=1表示后面还有分片,MF=0,后面没有分片。中间位记为“DF”,即DF=1不容许分片。DF=0容许分片。

  • 片偏移:共13位,单位为8字节。较长的IP数据报进行分片后,片偏移表示该分片距离原数据报起始位置的偏移量。为分片从新组装成数据报提供有力保证。

  • 生存时间:共8位,该数据报在网络的寿命,经常使用TTL表示。表示该数据报在网络可以转发多少次,一个路由器转发一次,该值就减1,直到为0就丢失该数据报。因此,最多能够转发255次。

  • 协议:共8位,指出该数据报携带的数据携带何种数据,以让目的主机IP层知道如何将数据部分上交给什么协议处理。例如TCP、UDP协议。经常使用的协议和对应协议字段的值:

  • 首部检验和:共16位,只校对首部,不校对数据。在发送端,将首部划分为许多16位字的序列,并将校验和置0,而后对全部序列进行反码算术运算求和,求和结果取反码写入到检验和中。接收端,操做与发送端相似,但不把检验和置0,若是取放码后结果为0,则保留该数据报,不为0则表示出错,丢弃该数据报。

    二进制反码算术求和:从低位到高位逐列进行运算:0+0=0;0+1=1;1+1=0,进1,若是最高进1,则在最后的结果加1便可。

  • 源地址和目的地址:各32位本地IP地址和目的主机的IP地址。

路由器分组转发算法

知道了IP数据报的格式,那么数据报是如何从发送端经过路由器到达接收端的呢?那就要了解路由表转发算法了。

  1. 路由器从数据报的的首部提取目的IP地址D,并计算出目的网络地址N.
  2. 若是N就是与此路由器直接相连的某个网络地址,则直接进行交付,不须要通过其余路由器。所谓直接交付就是将目的地址D直接转换为具体的硬件地址,把数据报封装成MAC帧,在数据链路层发送此帧。否侧就是间接交付,执行第3步。
  3. 路由器的路由表若是含有该目的地址D所指定的特定主机路由,则将数据报传输给下一跳路由。不然执行第4步。
  4. 路由表有能到达网络N的路由,则将数据报传输给下一跳路由。不然执行第5步。
  5. 若路由表有默认路由,则将数据报传输给下一跳默认路由。不然执行第6步。
  6. 报告转发分组出错。

那么在第二步中,如何将目的IP地址转换成硬件地址呢?那就涉及到ARP协议,具体看下一节。

ARP(地址解析协议)

在实际网络数据链路中传递数据帧,使用的仍是硬件地址,所以须要经过ARP将IP地址解析出在数据链路层使用的硬件地址。

每台主机都设有ARP高速缓存,存有本局域网上的各主机和路由器的IP地址到硬件地址的映射表,该映射表是动态更新的。由于IP地址32位,而硬件地址是48位,常常的转换计算操做是很是的耗性能,因此经过高速缓存来存储IP地址和硬件地址的映射关系。同时因为主机常常添加和移除,因此须要动态更新映射表。映射地址项在映射表中都有生存时间,超过了生存时间就会被剔除。

那么ARP是如何经过IP地址找到对应的硬件地址呢?

若是主机H1要向主机H2发送IP数据报,那么会先在ARP高速缓存查找是否有H2主机的IP地址,若是有,就找到H2主机的硬件地址,而后把硬件地址写入到MAC帧便可,发送出去。若是在高速缓存中找不到H2主机的IP地址,那么H1主机就须要向局域网广播一个ARP请求分组,请求分组会携带有H2主机的IP地址。局域网内的全部主机都会收到该广播,并将请求分组的IP地址和本身的IP地址比较,若是一致则回复ARP响应分组,告知H1z主机,本身的硬件地址。H1主机收到H2的答复后,就会写入到高速缓存中,后续须要向H2主机发送数据就直接从映射表查找便可,有效下降通讯量。

那,要是H2主机不在H1主机的局域网中怎么办?

ARP是解决同一个局域网内全部主机和路由器的IP地址与硬件地址解析问题。若是局域网内不存在H2主机,即ARP没法在本地局域网解析出H2的硬件地址,那么就查找本地局域网的一个路由器R1。路由器R1会在另外一个相连局域网A经过ARP查找H2主机,若是找不到,则会在A局域网查找另一个路由器R3,进行ARP查询。

那若是主机H2已经没有接入互联网了,或者在路由表转发分组出错时,怎么办?那么就须要ICMP(网际控制报文协议)。

ICMP(网际控制报文协议)

ICMP容许在主机或路由器报告差错状况和提供有关异常的状况报告。ICMP报文是装在IP数据报中,做为IP数据报的数据部分。如图所示:

ICMP报文的种类

ICMP报文有ICMP差错报告报文ICMP询问报文两种。

下面表格是常见几种ICMP报文类型:

差错报告报文

  • 终点不可达:当主机或路由不能交付数据报时就向源主机发送终点不可达报文。例如上文路由表转发分组第6步就是发送此报文。
  • 时间超过:在讲解IP数据报格式,讲到生存时间TTL,当数据报在路由器转发的次数(跳数)超过了源数据TTL的值,则会丢失该数据报,向源主机发送时间超过报文。或者终点在预约的时间内收不到全部的数据片的状况。
  • 参数问题:在接收端校验首部检验数据和,若是不为0,会丢失该数据报,并向源主机发送参数问题报文。
  • 改变路由:路由器把改变路由报文发给主机,让主机下次把报文发给另外的路由器(可经过更好的路由器)。

至于ICMP的数据部分,在差错报告报文,具备同一个格式,取原有的数据报数据字段的前8个字节(对TCPh和UDP协议来讲,能够获取到端口号)。

下面几种状况是再也不发送ICMP差错报文:

  • 对ICMP差错报文,再也不发送ICMP差错报文。
  • 第一个数据片后面的全部数据片。
  • 具备多播地址的数据报
  • 具备特殊地址的数据报,如回环地址等等。

询问报文

  • 回送请求和回答:由主机或路由表向特定主机发送出的询问。收到此询问报文的主机向主机或路由表回复的回答报文。通常用来测试目的主机的是否可达和了解相关状态。
  • 时间戳请求和回答:请求主机或路由表回答当前的日期和时间。用于时间同步或时间测量。

例如咱们经常使用的PING就是ICMP的应用实例,用来测试两台主机的连通性。

划分子网

两级IP地址到三级IP地址

在IP地址小结的介绍中,IP地址分为网络地址和主机号两级结构。两级划分IP地址会存在如下问题:

IP地址空间利用率有时很低:一个A类地址网络能够链接主机数超过1000万台,B类超过6万台。对主机数需求不大的单位又不肯申请C类,形成大量IP地址浪费。

路由表变得太大:给每个物理网络分配一个网络地址,会致使路由器的路由表的项目数愈来愈多,从而致使网络性能降低。

两级IP地址不够灵活:一个单位在新的地点新建一个网络,是没法当即接入互联网的,须要向管理机构申请新的网络地址。

为此,经过将两级IP地址划分为三级地址来解决上述问题。这种作法叫作划分子网或者子网寻址或者子网路由选择

所谓划分子网就是从主机号中借若干位做为子网号,这样就行三级结构:

IP地址::={网络号:子网号:主机号}

同个子网内的全部主机,网络号也是相同,子网内的主机对外通信须要将数据报发给路由器,再由路由器统一发送到其余网络。其余主机发送到本子网的主机也须要通过路由器。也就是说,划分子网是单位内部的事,对外仍是表现为一个网络。

子网掩码

那么,当外部数据达到路由器,路由器如何转发给子网呢?从IP数据报首部是没法判断出网络是否划分子网的,因此须要子网掩码来协助。子网掩码是用来计算子网的网络地址。假如子网掩码为255.255.255.0,IP地址为145.13.3.10,将子网掩码和IP地址逐位与(AND),获得145.130.3.0就是子网网络地址。

使用子网掩码的好处是不管有没有划分子网,经过和IP地址按位与,能够快速得出网络地址,进行分组转发。若是划分子网,那么使用子网掩码就能够计算子网络地址,没有划分,方便路由器在路由表中查找下一跳。因此如今网络规定必须使用子网掩码。

构造超网

构造超网也就是无分类编址(CIDR),划分子网能在必定程度缓解IP地址不够用的问题,可是还不够,所以出现了无分类域间路由选择(CIDR)。CIDR具备如下两大特色:

消除传统分类地址和子网划分,成为无分类的两级编址,记法为:

IP地址::={网络前缀:主机}

更熟悉的记法是斜线记法

128.14.35.7/20
20表示前20位为网络地址(网络前缀),而剩下的12位为主机号。经过斜线记法也能够得出最小地址为128.14.32.0;最大地址为128.14.47.255。

IPv6

随着互联网的发展,IPv4分配的IP地址基本耗尽。新版IPv6是采用具备更大的地址空间来解决IP地址不够用的问题。 在IPv4中将数据协议单元PDU称为数据报,而在IPv6称为分组。IPv6相对IPv4具备如下特色:

  • 更大地址空间,位数为128位
  • 扩展地址层次结构
  • 灵活首部格式
  • 改进的选项
  • 容许协议继续扩充
  • 支持即插即用
  • 支持资源预分配
  • 首部改成8字节对齐,IPv4是4字节对齐

IPv6更多信息参阅GitHub文档资源吧。

点赞支持支持吧
相关文章
相关标签/搜索