TCP/IP-IP

  A contented mind is a perpetual feast.html

  "满足长乐"网络

 

参考资料TCP/IP入门经典 (第五版)并发

        TCP/IP详解 卷一:协议工具

 

1、简介

  IP(Internet Protocol,网际协议),是TCP/IP协议族中最核心的协议,位于协议栈的网络层spa

  既然位于网络层,因此IP最主要的功能就是 提供独立于硬件的逻辑寻址 和 支持网间数据传递的路由选择,咱们将在后面的部分介绍这两个功能,下面先来分析一下IP首部3d

2、IP首部

  咱们在 TCP/IP-入门 中说到:当传输层的TCP分段或UDP数据报传送到网络层时,IP将会为分段或数据报封装上IP首部,接下来咱们分析一下IP首部,IP数据报格式以下code

 

其中各字段的含义以下:router

  ● 4位版本:目前的协议版本号是4,即IPv4htm

  ● 4位首部长度:咱们注意到上图中每一行的长度是32 bit,即4个字节,首部长度指的就是首部占32 bit的数目,即行数。因为首部长度只有4位,因此IP首部的最大长度为(24-1)*4=60个字节blog

  ● 8位服务类型(TOS):包括一个3 bit的优先权子字段(如今已经被忽略),4 bit的TOS子字段和1 bit未用位但必须置0。4 bit的TOS分别表明:最小时延、最大吞吐量、最高可靠性和最小费用,4 bit中只能置其中1 bit,若是4 bit都为0,就意味着是通常服务

  ● 16位总长度:总长度指的是整个IP数据报的字节数,用总长度-首部长度,咱们就能够知道数据部分的长度,这个字段占用16 bit,因此IP数据报的最大长度为216-1=65535字节。虽然最大长度能够达到65535,可是因为链路层的MTU限制,通常不会达到那么大

  ● 16位标识:标识字段惟一地标识主机发送的每一份数据报。在讨论分片和重组时,再详细讨论16位标识、3位标志和13位片偏移

  ● 8位生存时间(TTL):TTL设置了数据报能够通过的最多路由器数,它指定了数据报的生存时间。其初始值由源主机设置,每通过一个处理它的路由器,它的值就减1,当该字段为0时,数据报就被丢弃,并发送ICMP报文通知源主机

  ● 8位协议:协议字段也称做协议域,用来标记数据来自上层的哪个协议:1表示ICMP协议,2表示为IGMP协议,6表示为TCP协议,17表示为UDP协议

  ● 16位首部检验和:检验和字段是根据IP首部计算的检验和码,计算方法为:首先把该字段设置为0,而后对首部中(不包括数据部分)每一个16 bit进行反码求和,最后将结果存在该字段中。当接收方收到IP数据报时,一样对首部的每一个16 bit进行反码求和,这一次由于包含了以前计算好的检验和,因此若是没有发生任何差错,那么接收方计算的结果应该为全1。若是不为全1,IP将会丢弃收到的数据报,但不生成错误报文,由上层去发现并处理

  ● 源IP地址和目的IP地址就比较直观了

  ● 选项:这个字段是数据报中一个可变长的可选信息,因为这些选项不多被使用,并不是全部主机都支持,因此这里不作更详细的介绍,可参考相关RFC文档

 由上面易知,当选项不存在时,IP首部的长度是固定的20字节

3、逻辑寻址

  接下来咱们就来讨论一下IP的主要功能,首先是逻辑寻址,在 TCP/IP-入门 中咱们已经介绍了一些相关的概念,下面咱们来回顾一下

    ● IP地址:IP为网络中的设备提供的身份标识,长32 bit

    ● 子网掩码:相似于IP地址,用于识别网络号(包括子网号)和主机号

  了解了IP地址和子网掩码,咱们就能够讨论子网划分了 

 子网划分

  因为网络系统是由无数台网络设备经过传输介质互联在一块儿的,因此网络中的全部设备都在同一个集合中。当把数据从一台主机发送给另外一台主机时,若是两台主机不是直接相连的话,须要通过中间设备,当网络中的设备数量太大时,传输效率会大大下降。若是把整个网络系统分红不少个子网,那么经过区别不一样子网就能够增长传输的效率。子网划分的思想就是:将网络系统分红许多的大型网络,每一个大型网络又包含许多子网,而每一个子网内又包含许多主机

  IP经过将IP地址分红不一样的部分来标识网络号、子网号以及主机号。上一篇文章咱们已经讨论了五类IP地址(并无给出子网号部分),这里的大型网络的划分,就是依据五类IP地址来决定网络号的长度。而对于子网部分,子网号的长度由具体的网络配置来决定,也就是说子网号的长度不是固定的。网络号和子网号都肯定之后,剩下部分就是主机号了。每一个子网维护一个子网掩码,子网掩码由两部分组成,为1的位是网络号和子网号的部分,为0的部分是主机号的部分。经过地址类型、网络号、子网掩码和子网号,咱们就能够知道一个IP地址是否是属于本子网。

  举个栗子,假设本机所在网络使用B类地址,网络号是224.224.0.0,子网号是0.0.192.0,子网掩码是255.255.255.0。如今我就能够判断一个IP地址是否是跟本机在同一个子网内。好比IP地址 192.192.192.192,由于使用的是B类地址,因此我知道它的网络号是192.192.0.0,跟本机所在的网络不是同一个网络,就不继续判断了。好比IP地址224.224.132.22,它的网络号是224.224.0.0,跟本机在同一个网络,而后用子网掩码跟它作与运算,获得224.224.132.0,发现它的子网号是0.0.132.0,与本机所在的子网0.0.192.0不相同,说明不是在同一个子网。若是IP地址是224.224.192.23,跟前面的方法同样,我已经知道它跟本主机在同一个网络,而且它的子网号是0.0.192.0,因此它跟本机在同一个子网,只要再对比一下主机号,就能够知道这个IP地址是否是本机IP地址了

  一般,判断一个IP地址是否是在本地网络就是直接用它跟子网掩码作与运算,而后对比网络号和子网号就能够获得答案

 CIDR:无类型域间选路

  IP地址是用32个bit来表示的,因此IP地址的数量是有限的,最多232-1个IP地址,而且其中有不少是不可用的。当网络中的设备达到必定数量时,IP地址将不够用了!一种解决方案是:使用更多个bit来表示IP地址,好比128个bit,这就是IPv6,这里暂不讨论。另一种方法是:根据网络号的长度不一样来用同一个IP地址表示不一样的主机,这就是无类别域间路由

  前面咱们讲到一个IP地址惟一地标识网络中的一台设备,CIDR的思想就是用一个IP地址标识多台主机。其思路就是使用一个斜线(/)做为分隔符,在IP地址后面跟一个十进制数值来表示地址中网络号所占的位数。例如:在CIDR地址205.123.196.183/25中,前25个bit是网络号(包括子网号),后面7个bit是主机号,这实现了IP地址的重用

 特殊的IP地址

  前面讲到,有一些IP地址是不可用的,具体有哪些呢?见下表

  说明:0表示全部bit全为0;-1表示全部bit全为1;netid、subnetid和hostid分别表示不为全0或全1的对应字段。子网号栏为空表示该地址没有进行子网划分

 

  这个表分为三个部分:头两项是特殊的源地址,中间项是特殊的环回地址,最后四项是广播地址

4、路由选择

  咱们先来了解几个概念

 路由器(router)

  前面一直在说路由器,到底什么是路由器?路由器是负责根据逻辑地址对通讯流量进行过滤的设备,“又称网关设备(Gateway)是用于链接多个逻辑上分开的网络”  --百度百科。简单来讲,路由器就是为IP数据包进行导向的工具,告诉数据报下一站应该去哪

 路由表(routing table)

  路由表就是一张存储指向特定网络地址路径的表,其中保存着网络周边的拓扑信息.

  路由器工做时,若是每次转发时都将数据报发送到任意的路由器或者某特定的路由器,那么传输的效率将会很是低下,由于每次发送都要从新路由(就像你去一个地方,历来不记住路线,每次去那个地方都要问路)。若是能在每次传输完以后记录一下本次传输的目的地址信息,那么下一次再须要发送给这个地址时,我就能够根据记录的信息找一条最短的路发送给它,而不用经过其余路由来转发(就是记住去这个地方的路线,下次本身就能够直接走过去),路由表就是用来保存这些传输路径的相关信息的

  路由表中的每一项都包含下面这些信息:

    ● 目的IP地址:它既能够是一个完整的主机地址,也能够是一个网络地址,由标志字段来指定下一站路由器的IP地址,或者有直接相连的网络IP地址

    ● 下一站路由器:是指一个在直接相连网络上的路由器,经过它能够转发数据报。它不是最终目的地,可是它能够将数据报转发到最终目的地

    ● 标志:其中一个标志指明目的IP地址是网络地址仍是主机地址,另外一个标志指明下一站路由器是否真正的下一站路由器,仍是一个直接相连的接口,为数据报的传输指定一个网络接口

 路由选择

  对于主机来讲,路由选择是一件简单的事,若是目的主机与源主机直接相连,那么直接发送就能够了;若是没有直接相连,那么只要发送给默认路由,让路由器来转发就好了。

  对于路由器来讲,则要完成更多的功能,具体以下:

    ①搜索路由表,寻找能与目的IP地址彻底匹配的表目(网络号和主机号都要匹配)。若是找到,则把报文发送给该表目指定的下一站路由器或直接相连的网络接口

    ②搜索路由表,寻找能与目的网络号匹配的表目。若是找到,则把报文发送给该表目指定的下一站路由器或直接相连的网络接口。目的网络上的全部主机均可以经过这个表目来处置

    ③若是上面两步都没有找到,那么寻找标为“默认(default)”的表目。若是找到,则把报文发送给该表目指定的下一站路由器

  若是以上三步都没有成功,那么该数据报就不能发送。

  如此循环,直到到达目的地或者TTL减为0.

5、查看接口和网络的有关信息

  查看本机网络接口信息(包含物理地址、IP地址、子网掩码、MTU等信息): $ ifconfig 

  查看路由表信息: $ route  

   或者  $ netstat -rn 

:本文仅仅对IP作了一个大概的介绍,更多更细节的问题没有涉及,如当数据报发送失败时怎么处理等等。更详细的内容请参考RFC文档或者其余资料

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息