TCP/IP详解读书笔记--IP:网际协议

2015/05/05

IP协议是TCP/IP协议族中最核心的协议。它提供不可靠、无连接的数据传送服务。

*不可靠(unreliable)*的意思是它不能保证IP数据包能成功到达目的地。IP仅提供最好的传输服务。如果发生某种错误时,如某个路由器暂时用完了缓冲区,IP有一个简单的错误处理算法:丢弃数据包,然后发送ICMP消息报给信源端。任何要求的可靠性必须由上层来提供(如TCP)。

*无连接(connectionless)*这个术语的意思是IP并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。这也说明,IP数据报可以不按发送顺序接收。如果一信源向相同的信宿发送两个连续的数据报(先是A,然后是B),每个数据报都是独立地进行路由选择,可以选择不同的路线,因此B可能在A到达之前先到达。

##IP首部 IP数据报的格式如图3-1所示。普通的IP首部长为20个字节,除非含有选项字段。

IP数据报

分析首部,最高位在左边,记为0bit;最低位在右边,记为31bit。

4个字节的32 bit 值以下面的次序传输:首先是 0~7 bit ,其次8~ 15 bit,然后1 6 ~23 bit,最后是24~31 bit。这种传输次序称作big endian字节序。由于TCP/IP首部中所有的二进制整数在网络中传输时都要求以这种次序,因此它又称作网络字节序。以其他形式存储二进制整数的机器,如 little endian格式,则必须在传输数据之前把首部转换成网络字节序。

目前的协议版本号是4,因此IP有时也称作IPv4。

首部长度指的是首部占32bit字的数目,包括任何选项。由于它是一个4比特字段,因此首部最长为60个字节。(1byte = 8bits;4比特字段,大小为2^4-1 = 15;字节数目为15*32/8 = 40)

服务类型(TOS)字段包括一个3 bit的优先权子字段(现在已被忽略),4 bit的TOS子字段和1 bit未用位但必须置0。4 bit的TOS分别代表:最小时延、最大吞吐量、最高可靠性和最小费用。4 bit中只能置其中 1bit。如果所有4 bit均为0,那么就意味着是一般服务。

图3 - 2列出了对不同应用建议的TOS值。在最后一列中给出的是十六进制值,因为这就是在后面将要看到的tcpdump命令输出。

TOS值

Telnet和Rlogin这两个交互应用要求最小的传输时延,因为人们主要用它们来传输少量的交互数据。另一方面,FTP文件传输则要求有最大的吞吐量。最高可靠性被指明给网络管理(SNMP)和路由选择协议。用户网络新闻(Usenet news, NNTP)是唯一要求最小费用的应用。

注:现在大多数的TCP/IP实现都不支持TOS特性

总长度字段是指整个IP数据报的长度,以字节为单位。利用首部长度字段和总长度字段,就可以知道I P数据报中数据内容的起始位置和长度。由于该字段长16比特,所以IP数据报最长可达65535字节(2^16 - 1 = 65535)当数据报被分片时,该字段的值也随着变化。标识字段唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1。

TTL(time-to-live生存时间字段设置了数据报可以经过的最多路由器数。它指定了数据报的生存时间。TTL的初始值由源主机设置(通常为32或64),一旦经过一个处理它的路由器,它的值就减去 1。

首部检验和字段是根据IP首部计算的检验和码。它不对首部后面的数据进行计算。

最后一个字段是任选项,是数据报中的一个可变长的可选信息。目前,这些任选项定义 如下:

  • 安全和处理限制(用于军事领域)
  • 记录路径(让每个路由器都记下它的IP地址)
  • 时间戳(让每个路由器都记下它的IP地址和时间)
  • 宽松的源站选路(为数据报指定一系列必须经过的IP地址)
  • 严格的源站选路(与宽松的源站选路类似,但是要求只能经过指定的这些地址,不能 经过其他的地址)。

这些选项很少被使用,并非所有的主机和路由器都支持这些选项。

##IP路由选择 如果目的主机与源主机直接相连(如点对点链路)或都在一个共享网络上(以太网或令牌环网),那么I P数据报就直接送到目的主机上。否则,主机把数据报发往一默认的路由器上,由路由器来转发该数据报。

在一般的体制中,IP可以从TCP、UDP、ICMP和IGMP接收数据报(即在本地生成的数据报)并进行发送,或者从一个网络接口接收数据报(待转发的数据报)并进行发送。IP层在内存中有一个路由表。当收到一份数据报并进行发送时,它都要对该表搜索一次。当数据报来自某个网络接口时,IP首先检查目的IP地址是否为本机的IP地址之一或者IP广播地址。如果确实是这样,数据报就被送到由IP首部协议字段所指定的协议模块进行处理。如果数据报的目的不是这些地址,那么(1)如果IP层被设置为路由器的功能,那么就对数据报进行转发(也就是说,像下面对待发出的数据报一样处理);否则(2)数据报被丢弃。

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

  • 目的I P地址。
  • 下一站(或下一跳)路由器(next-hop router)的IP地址,或者有直接连接的网络I P地 址。
  • 标志。
  • 为数据报的传输指定一个网络接口。

IP路由选择主要完成以下这些功能:

1)搜索路由表,寻找能与目的IP地址完全匹配的表目(网络号和主机号都要匹配)。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值)。

2)搜索路由表,寻找能与目的网络号相匹配的表目。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值)。目的网络上的所有主机都可以通过这个表目来处置。例如,一个以太网上的所有主机都是通过这种表目进行寻径的。这种搜索网络的匹配方法必须考虑可能的子网掩码。关于这一点我们在下一节中进行讨论。

3)搜索路由表,寻找标为“默认(default)”的表目。如果找到,则把报文发送给该表目指定的下一站路由器。

如果上面这些步骤都没有成功,那么该数据报就不能被传送。

关键点:

  1. 事实上,大多数主机和一些路由器可以用默认路由来处理任何目的,除非它在本地局域网上。

  2. 数据报中的目的I P地址始终不发生任何变化。

  3. 每个链路层可能具有不同的数据帧首部,而且链路层的目的地址(如果有的话)始终指的是下一站的链路层地址。

##子网寻址 现在所有的主机都要求支持子网编址。不是把IP地址看成由单纯的一个网络号和一个主机号组成,而是把主机号再分成一个子网号和一个主机号。

这样做的原因是因为A类和B类地址为主机号分配了太多的空间,可分别容纳的主机数为2^24-2和2^16-2。由于全0或全1的主机号都是无效的,因此我们把总数减去2。

在InterNIC获得某类I P网络号后,就由当地的系统管理员来进行分配,由他(或她)来决定是否建立子网,以及分配多少比特给子网号和主机号。例如,这里有一个B类网络地址(140.252),在剩下的16bit中,8bit用于子网号,8bit用于主机号,格式如图3-5所示。这样就允许有254个子网,每个子网可以有254台主机。

子网编址

子网对于子网内部的路由器是不透明的。

##子网掩码 除了IP地址以外,主机还需要知道有多少比特用于子网号及多少比特用于主机号。这是在引导过程中通过子网掩码来确定的。

这个掩码是一个32bit的值,其中值为1的比特留给网络号和子网号,为0的比特留给主机号。

图3-7是一个B类地址的两种不同的子网掩码格式。 B类地址掩码

如图所示,子网号和主机号都是8bit宽。

第二个例子是一个B类地址划分成10bit的子网号和6 bit的主机号。

如果知道本机的IP地址,那么就知道它是否为A类、B类或C类地址从IP地址的高位可以得知),也就知道网络号和子网号之间的分界线。而根据子网掩码就可知道子网号与主机号之间的分界线。

举例 假设我们的主机地址是140.252.1.1(一个B类地址),而子网掩码为255.255.255.0(其中8bit为子网号,8bit为主机号)。

  • 如果目的IP地址是140.252.4.5,那么我们就知道B类网络号是相同的(140.252),但是子网号是不同的(1和4)。用子网掩码在两个IP地址之间的比较如图3-8所示。
  • 如果目的IP地址是140.252.1.22,那么B类网络号还是一样的(140.252),而且子网号也是一样的(1),但是主机号是不同的。
  • 如果目的IP地址是192.43.235.6(一个C类地址),那么网络号是不同的,因而进一步的比较就不用再进行了。

两个IP地址比较

给定两个IP地址和子网掩码后, IP路由选择功能一直进行这样的比较。

##特殊情况的 IP地址 7个特殊的IP地址,如图3-9所示。 特殊的IP地址

在这个图中,0表示所有的比特位全为0;-1表示所有的比特位全为1;netid、subnetid和hostid分别表示不为全0或全1的对应字段。子网号栏为空表示该地址没有进行子网划分。

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

##题目

###环回地址必须是127.0.0.1吗?

不一定,如图3-9所示,环回地址格式是以127开头的就可以了。

###子网号为16bit的A类地址与子网号为8bit的B类地址的子网掩码有什么不同?

这两个的子网掩码一样,但是子网数目不同。前者为2^16 - 2,后者为2^8 - 2。

###子网掩码255.255.0.255是否对A类地址有效?

根据掩码的定义:掩码是一个32bit的值,其中值为1的比特留给网络号和子网号,为0的比特留给主机号。这是个不合法的掩码,对A类地址无效。



通过赞赏码赞助此文