《图解TCP/IP》读书笔记四:IP协议

这里写图片描述

4.1 IP即网际协议

      TCP/IP的心脏是互联网层。这一层主要是由IP(Internet Protocol)和ICMP(Internet Control Message Protocol)两个协议组成。

4.1.1 IP相当于OSI参考模型的第3层

      IP(IPv4、IPv6)相当于OSI参考模型中的第3层–网络层。
      网络层的主要作用是“实现终端节点之间的通信”。这种终端节点之间的通信也叫“点对点(end-to_end)通信”。
      网络层的下一层—数据链路层的主要作用是在互联同一种数据链路的节点之间进行包传递。
这里写图片描述

4.1.2 网络层与数据链路层的关系

  • 数据链路层提供直连两个设备之间的通信功能。
  • 网络层的IP则负责在没有直连的两个网络之间进行通信传输。

这里写图片描述

      仔细分析机票和火车票,每张票只能够在某一限定区间内移动。此处的“区间内”就如同通信网络上的数据链路。而这个区间内的出发地点和目的地点就如同某一个数据链路的源地址和目标地址等首部信息。这个全称的行程表的作用就相当于网络层。

4.2 IP基础知识

      IP大致分为三大作用模块,它们是IP寻址、路由(最终节点为止的转发)以及IP分包与组包。

4.2.1 IP地址属于网络层地址

      MAC地址在数据链路层,是用来标识同一个链路中不同计算机的一种识别码。

      网络层的IP,也有这种地址信息。一般叫做IP地址。IP地址用于在“连接到网络中的所有主机中识别出进行通信的目标地址”。因此,在TCP/IP通信中所有主机或路由器必须设定自己的IP地址。

      不论一台主机与哪种数据链路连接,其IP地址的形式都保持不变。以太网、无线局域网、PPP等,都不会改变IP地址的形式。网络层对数据链路层的某些特性进行了抽象。数据链路的类型对IP地址形式透明,这本身就是其中抽象化的一点。

      另外,在网桥或交换集线器等物理层或数据链路层数据包转发设备中,不需要设置IP地址(在用SNMP进行网络管理时有必要设置IP地址)。因为这些设备只负责将IP包转化为0,、1比特流转发或对数据链路帧的数据部分进行转发,而不需要应对IP协议。

4.2.2 路由控制

      路由控制(Routing)是指将分组数据发送到最终目标地址的功能。一个数据包之所以能够成功地到达最终的目标地址,全靠路由控制。

发送数据至最终目标地址

      Hop译为中文“跳”。它是指网络中的一个区间。IP包正式在网络中一个跳间被转发。因此IP路由也叫做多跳路由。在每个区间决定着包在下一跳被转发的路径。
这里写图片描述

一跳的范围
一跳(1 Hop)是指利用数据链路层以下分层的功能传输数据帧的一个区间。
以太网等数据链路中使用MAC地址传输数据帧。此时的一跳是指从源MAC地址到目标MAC地址之间传输帧的区间。 就是说它是主机或路由器网卡不经其他路由器而能直接到达的相邻主机或路由器网卡之间的一个区间。在一跳的这个区间内,电缆可以通过网桥或交换集线器相连,不会通过路由器或网关相连。

      多跳路由是指路由器或主机在转发IP数据包时只指定下一个路由器或主机,而不是将到最终目标地址为止的所有通路全都指定出来。因为每一个区间(跳)在在转发IP数据包时会分别指定下一跳的操作,直至包达到最终的目标地址。

路由控制表

      为了将数据包发给目标主机,所有主机都维护着一张路由控制表(Routing Table)。该表记录IP数据在下一步应该发给哪个路由器。IP包将根据这个路由表在各个数据链路上传输。
这里写图片描述

数据链路的抽象化

      IP是实现多个数据链路之间通信的协议。数据链路根据种类的不同各有特点。对这些不同数据链路的相异特性进行抽象化也是IP的重要作用之一。数据链路的地址可以被抽象化为IP地址。因此,对IP的上一层来说,不论底层数据链路使用以太网还是无线LAN、PPP,都将被一视同仁。

      不同数据链路有个最大的区别,就是它们各自最大传输单位(MTU:Maximum Transmission Unit)不同。就好像人们在邮寄或行李时有各自的大小限制一样。

      MTU的值在以太网中是1500字节,在FDDI中是4352字节,而ATM则为9180字节。IP的上一层可能会要求传送比这些MTU更多字节的数据,因此必须在线路上传送比包长还要小的MTU。

      为了解决这个问题,IP进行分片处理(IP Fragmentation),所谓分片,就是讲较大的IP包分成多个较小的IP包。分片的包到了对端目标地址后再被组合起来传给上一层。从IP的上层看,它完全可以忽略数据包在途中的各个数据链路上的NTU,而只需要按照源地址发送的长度接收数据包。IP以这种方式抽象化了数据链路层,使得从上层更不容易看到底层网络构造的细节。

4.2.4 IP属于面向无连接型

      IP面向无连接。即在发包之前,不需要建立与对端目标地址之间的连接。上层如果遇到需要发送给IP的的数据,该数据会立即被压缩成IP包发送出去。

      面向有连接的情况下,需要事先建立连接。一个没有建立连接的主机也不能发送数据过来。

      面向无连接的情况不同,即使对端主机关机或不存在,数据包还是会被发送出去。反之,对于一台主机来说,它会何时从哪里收到数据也是不得而知的。

为什么IP要采用面向无连接呢?

      主要有两点原因: 一是为了简化,二是为了提速。 面向连接比起面向无连接处理相对复杂。甚至管理每个连接本身就是一个相当繁琐的事情。 此外,每次通信之前都要实现建立连接, 又会降低处理速度。需要有连接时,可以委托上一层提供此项服务。因此,IP为了实现简单化与高速化采用面向无连接的方式。

为了提高可靠性,上一层的TCP采用面向有连接型
       IP提供尽力服务(Best Effort),意指”为了把数据包发送到最终目标地址,尽最大努力。”
      然而,它并不做”最终收到与否的验证”。 IP数据包在途中可能会发生丢包、错位以及数据量翻倍等问题。
      如果发送端的数据未能真正发送到对端目标主机会造成严重问题。
      例如,发送一封电子邮件,如果邮件内容中很重要的一部分丢失,会让收件方无法及时获取信息。
      因此提高通信的可靠性很重要。TCP就提供这种功能。如果说IP只负责将数据发给目标主机,那么TCP则负责保证对端主机确实收到数据。
      那么,有人可能会提出疑问:为什么不让IP具有可靠传输的功能,从而把这两种协议合并到一起呢?
      这其中的缘由就在于,如果要一种协议规定所有的功能和作用, 那么该协议的具体实施和编程就会变得非常复杂,无法轻易实现。相比之下,按照网络分层,明确定义每层协议的作用和责任以后,针对每层具体的协议进行编程会更加有利于该协议的实现。
      网络通信中如果能进行有效分层,就可以明确TCP与IP各自协议的最终目的,也有利于后续对这些协议进行扩展和性能上的优化。分层也简化了每个协议的具体实现。互联网能够发展到今天,与网络通信的分层密不可分。

4.3 IP地址基础知识

      在用TCP/IP通信时,用IP地址识别主机和路由器。为了保证正常通信,有必要为每个设备配置正确的IP地址。在互联网通信中,全世界都必须设定正确的IP地址。否则,根本无法实现正常的通讯。 因此,IP地址就像是TCP/IP通信的一块基石。

4.3.1 IP地址的定义

      IP地址(IPv4)由32位正整数来表示。TCP/IP通信要求将这样的IP地址分配给每一个参与通信的主机。IP地址在计算机内部都以二进制方式被处理。 然而,由于人类社会并不习惯于采用二进制方式,需要采用一种特殊的标记方式。那就是将32位的IP地址以每8位为一组,分成4组,每组以”.”隔开,再将每组数转换为十进制数。下面举例说明这一方法。

这里写图片描述
      实际上,IP地址并非是根据主句台数来配置的,而是每台主机上的每一块网卡(NIC)都要设置IP地址。通常一块网卡只设置一个IP地址,其实一块网卡也可以配置多个IP地址。此外,一台路由器通常都会配置两个以上的网卡,因此可以设置两个以上的IP地址。

4.3.2 IP地址由网络和主机两部分标识组成

      IP地址由“网络标识(网络地址)”和“主机标识(主机地址)”两部分组成。

      网络标识在数据链路的每个段配置不同的值。网络标识必须保证相互连接的每个段的地址不相重复。而相同段内相连的主机必须有相同的网络地址。IP地址的“主机标识”则不允许在同一个网段内重复出现。

      可以通过设置网络地址和主机地址,在相互连接的整个网络中保证每台主机的IP地址都不会相互重叠,即IP地址具有了唯一性。

      IP包被转发到途中某个路由器,正是利用目标IP地址的网络标识进行路由。因为就是不看主机标识,只要一见到网络标识就能判断出是否为该网段内的主机。
这里写图片描述

4.3.3 IP地址的分类

      IP地址分为四个级别,A、B、C、D类(还有一个一直未使用的E类)。它根据IP地址中从第1位到第4位的比特列对其网络标识和主机标识进行区分。

A类地址

      A类IP地址是首位以“0”开头的地址,从第1位到第8位(去掉分类位剩下7位)是它的网络标识。用十进制表示的话,0.0.0.0-127.0.0.0是A类网络地址。A类地址的后24位相当于主机标识。因此,一个网段内可容纳的主机地址上限为16,777,214个。

B类地址

      B类地址是前两位为“10”的地址,从第1位到第16位是它的网络标识,用十进制表示,128.0.0.1-191.255.0.0是B类网络地址,B类地址的后16位相当于主机地址。因此,一个网段内可容纳主机地址上限为65,534个。
这里写图片描述

C类地址

      C类IP地址是前三位为“110”的地址。从第1位到第24位是它的网络标识。用十进制表示的话,192.168.0.0-239.255.255.0是C类的网络地址。C类地址的后8位相当于主机标识。因此,一个网段内可容纳主机地址上限为254个。

D类地址

      D类IP地址是前四位为“1110”的地址。从第1位到第32位是它的网络标识,用十进制表示,224.0.0.0-239.255.255.255是D类的网络地址。D类没有主机标识,常被用于多播。

关于分配IP主机地址的注意事项

      要用比特位表示主机地址时,不可以全部为0或全部为1。因为全部为0在标识对应的网络地址或IP地址不可获知的情况下才使用。全部为1的主机通常作为广播地址。

      因此,在分配过程中,应该去掉这两种情况。这也是为什么C类地址每个网段最多只能有254(2的8次方-2=254)个主机地址的原因。

4.3.6 子网掩码

分类造成浪费?

      一个IP地址只要确定了其分类,也就确定了它的网络标识和主机标识。例如A类地址前8位(除首位“0”还有7位)、B类地址前16位(除首位“10”还有14位)、C类地址前24位(除首位“110”还有21位)分别是它们各自的网络标识部分。

由此,按照每个分类所表示的网络标识的范围如下所示:
这里写图片描述
      用“1”表示IP网络地址的比特范围,用“0”表示IP主机的地址范围。
    将它们以10进制表示,如下图所示。其中“1”的部分是网络地址部分,“0”的部分是主机地址部分。
这里写图片描述
    网络标识相同的计算机必须同属同一个链路。例如,架构B类IP网络时,理论上一个链路内允许6万5千多台计算机连接。然而,在实际网络架构当中,一般不会有在同一个链路上连接6万5千多台计算机的情况。因此,这种网络结构实际上市不存在的。

    因此,直接使用A类或B类地址,确实有些浪费。随着互联网的覆盖范围逐渐增大,网络地址会越来越不足以应对需求,直接使用A类、B类、C类地址就更显的浪费资源。为此,人们已经开始一种新的组合方式以减少这种浪费。

子网和子网掩码

    现在,一个IP地址的网络标识和主机标识已不再受限于该地址的类别,而是一个叫做“子网掩码”的识别码通过子网网络地址细分出比A、B、C更小粒度的网络。这种方式实际上就是将原来A、B、C类等分类中的主机地址部分用作子网地址,可以将原网络分为多个物理网络的一种机制。

    子网划分实际上就是将原来的两级IP地址转变为三级IP地址,表示如下:

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

    从上面的表示可以看出,子网划分就是在32位中借了几位用来表示子网号,注意,这里的网络号的位数是不变的,子网号是从主机号中借走的,子网划分实际上就是减少了主机数,分配到不同的子网,每个子网包含一定的主机数。

    子网的概念也就可以理解为,将一个大的网络在其内部划分成几个小的子网,但是需要注意的是,对于该网络的外层来看,还是一个大的网络,只有该网络内部才可以看到其进行了子网划分。例如:某个机构给某高校分配了一个大的网络,而该高校内部又进行了子网划分,将不同的子网分配给不同的学院,此时对于该机构来说,该高校还是一个大的网络,在其看来并没有变化,只有该高校自己才知道自己内部又进行了子网划分。

    自从引入子网后,一个IP地址就有了两种识别码。一是IP地址本身,另一个是标识网络部的子网掩码。那么什么是子网掩码呢?在传输的过程中,路由器是怎么识别子网划分后的IP地址中的网络地址的?如果不提供任何信息,路由器肯定还是傻傻分不清楚,所以就出现了子网掩码。

    子网掩码用二进制标识,也是一个32位的数字。它对应IP地址网络标识部分的位全部是“1”,对应IP地址主机标识的部分全部为“0”。由此,一个IP地址可以不再受限于自己的类别,而是可以用这样的子网掩码自由的定位自己的网络标识长度。当然,子网掩码必须是IP地址的首位开始连续的“1”。

    对于子网掩码,目前有两种表示方法。以172.20.100.52的前26位是网络地址的情况为例,以下是其中一种表示方法,它将IP地址与子网掩码地址分别用两行来表示。
这里写图片描述

    另一种标识方式如下。它在每个IP地址后面追加网络地址的位数用“/”隔开。
这里写图片描述

    不难看出,在第二种方式下记述网络地址时可以省略后面的“0”。例如172.20.0.0/16跟172.20/16其实是一个意思。

子网掩码可以灵活指定网络标识的长度:
这里写图片描述

4.4 路由控制

      发送数据包时所使用的地址是网络层的地址,即IP地址。然而仅仅有IP地址还不足以实现将数据包发送到对端目的地址,在数据发送过程中还需要类似于“指明路由器或主机”的信息,以便真正发往目标地址。保存这种信息的就是路由控制表(Routing Table)。实现IP通信的主机和路由器都必须持有一张这样的表,它们也正是在这个表格的基础上才得以进行数据包发送的。

      路由控制表的形成方式有两种:一种是管理员手动设置,另一种是路由器与其他路由器相互交换信息时自动刷新。前者叫静态路由控制,后者叫动态路由控制。为了让动态路由即时刷新路由表,在网络上互连的路由器之间必须设置好路由协议,保证正常读取路由控制信息。

      IP协议始终认为路由表是正确的。然而,IP本身并没有定义制作路由控制表的协议。即IP没有制作路由控制表的机制。该表是由一个叫做“路由协议”的协议制作而成。

4.4.1 IP地址与路由控制

      IP地址的网络地址部分用于进行路由控制。

      路由控制表中记录着网络地址与下一步应该发送至路由器的地址。在发送IP包时,首先要确定IP包首部中的目标地址,再从路由控制表中找到该地址具有相同网络地址的记录,根据该记录将IP包转发给相应的下一个路由器。如果路由控制表中存在多条相同网络地址的记录,就选择一个最为吻合的网络地址。最为吻合是指相同位数最多的意思。

默认路由

      如果一张路由表中包含所有的网络及其子网的信息,将会造成浪费。这时,默认路由(Default Route)是不错的选择。默认路由是指路由表中任何一个地址都能与之匹配的记录。

      默认路由一般标记为0.0.0.0/0或default。这里的0.0.0.0/0并不是指地址是0.0.0.0.由于后面是“/0”,所以没有标识IP地址。它只是为了避免人们误以为0.0.0.0是IP地址。

      默认路由是一种特殊的静态路由,指的是当路由表中与包的目的地址之间没有匹配的表项时路由器能够做出的选择。如果没有默认路由,那么目的地址在路由表中没有匹配表项的包将被丢弃· 默认路由在某些时候非常有效,当存在末梢网络时,默认路由会大大简化路由器的配置,减轻管理员的工作负担,提高网络性能。

4.5.3 路径MTU发现

      为了应对路由器的负荷加重,只要允许,是不希望由路由器进行IP数据包的分片处理的。且分片处理中,一旦某个分片丢失,则会照成整个IP数据报作废。

      为了应对以上问题,产生了一种新的技术“路径MTU发现”(Path MTU Discovery)。所谓路径MTU(Path MTU)是指从发送端主机到接收端主机之间不需要分片时最大MTU的大小。即路径中存在的所有数据链路中最小的MTU。而路径MTU发现从发送主机按照路径MTU的大小将数据报分片后进行发送。进行路径MTU发现,就可以避免在中途的路由器上进行分片处理,也可以在TCP中发送更大的包。

路径MTU发现机制(UDP情况下)
这里写图片描述

路径MTU发现机制(TCP情况下)

这里写图片描述

4.7 IPv4首部

      通过IP进行通信时,需要在数据的前面加入IP首部信息。IP首部中包含着用于IP协议进行发包控制时所有的必要信息。
这里写图片描述

版本(Version)

      由4比特构成,表示标识IP首部的版本号。IPv4的版本号即为4,因此在这个字段上的值也是“4”。

首部长度(IHL:Internet Header Length)

      由4位构成,表明IP首部的大小,单位为4字节(32比特). 对于没有可选项的IP包,首部长度则设置为5. 也就是说,当没有可选项时,IP首部的长度为20字节(4*5 = 20). 如果有可选项,这里设置为6, 即24字节。

区分服务(TOS:Type Of Service)

      由8比特构成,用来表明服务质量。每一位的具体含义如下:

  • 0,1,2位 优先度
  • 3 最低延迟
  • 4 最大吞吐
  • 5 最大可靠性
  • 6 最小代价
  • 3~6 最大安全
  • 7 未定义

      这个值通常由应用指定。而且现在也鼓励这种结合应用的特性设定TOS的方法。然而在目前,几乎所有的网络都无视这个字段。这不仅仅是因为在符合质量要求的情况下按其要求发送本身的功能实现起来十分困难,还因为若不符合质量要求就可能会产生不公平的现象。因此实现TOS控制变得极其复杂。这也导致TOS整个互联网几乎就没有被投入使用。不过已有人提出将TOS字段本身再划分未DSCP和ECN两个字段的建议。

DSCP段与ECN段

这里写图片描述

      DSCP(Differential Services Codeponit,差分服务代码点)是TOS(Type Of Service)的一部分。现在统称为DiffServ,用来进行质量控制。

      ECN(Explicit Congestion Notification,显式拥塞通告)。

总长度(Total Length)

      表示IP首部与数据部分合起来的总字节数。该字段长16比特。因此IP包的最大长度为65535(2^16)字节。

      目前还不存在能够传输最大长度的65535字节的IP包的数据链路。不过,由于有IP分片处理,从IP的上一层角度看,不论底层采用何种数据链路,都可以认为能够以IP的最大包长传输数据。

标识(ID:Identification)

      由16比特构成,用于分片重组。用以分片的标识值相同,不同分片的标识值不同。通常,每发送一个IP包,它的值也逐渐增长。此外,即使IP相同,如果目标地址、源地址或协议不同的话,也会被认为是不同的分片。

标志(Flags)

      由3比特构成,表示包被分片的相干信息。每一位具体含义:
这里写图片描述

片偏移(FO :Fragment Offset)

      由13比特构成,用来标识被分片的每一个分段相对于原始数据的位置。

生成时间(TTL:Time To Live)

      由8比特构成,它最初的意思是以秒为单位记录当前包在网络上应该生存的期限。然而,在实际中它是指可以中转多少个路由器的意思。每经过一个路由器,TTL会减少1,直到变成0则丢弃该包。

4.8 IPv6首部格式

      IPv6中为了减轻路由器压力,省略了首部校验和字段(因为TCP和UDP在做校验和计算的时候使用伪首部,所以可以验证IP地址或协议是否正确。因此,即使在IP层无法提供可靠传输,在TCP或UDP层也可以提供可靠传输的服务)。用词路由器不再需要检验和,从而也挺高了包的转发效率。

      此刻外,分片处理所用的标识码称为可选项。为了让64位CPU计算处理起来方便,IPv6首部及可选项都由8字节构成。
这里写图片描述

《图解TCP/IP:第5版》下载地址:
http://download.csdn.net/download/xunzaosiyecao/10245906

个人微信公众号:
这里写图片描述

作者:jiankunking 出处:http://blog.csdn.net/jiankunking

相关推荐
©️2020 CSDN 皮肤主题: 成长之路 设计师:Amelia_0503 返回首页