TCP/IP详解卷一:IP:网际协议

414 阅读7分钟

引言

关于IP协议:

  • 所有的 TCP、UDP、ICMP及 IGMP 数据都以IP数据报格式传输
  • IP 提供不可靠、无连接的数据报传送服务
  • 不可靠(unreliable)的意思是它不能保证 IP 数据报能成功地到达目的地,任何要求的可靠性必须由上层来提供(如 TCP)
  • 无连接(connectionless)这个术语的意思是I P并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的

学习内容:

  • IP 首部中的各个字段
  • IP路由选择和子网
  • ifconfig 和 netstat

RFC 791[Postel 1981a]是I P的正式规范文件

IP首部

TCP / IP首部中所有的二进制在网络中都要求以big endian字节序传输时,因此它又称作网络字节序。以其他形式存储二进制整数的机器,如little endian格式,则必须在传输数据之前把首部转换成网络字节序.

  • 目前的协议版本号是4,因此 IP 有时也称作 IPv4
  • 首部长度为 首部占 以 32 bit 为单位的 数目,因为长度4位,所以可以表示最长长度为 (2^4-1)*(32/8)=60(字节)。普通 IP 数据报(没有任何选择项)字段的值是 5
  • 服务类型(TOS)字段包括一个3 bit的优先权子字段(现在已被忽略),4 bit的TOS子字段和1 bit未用位但必须置0。4 bit的TOS分别代表:最小时延、最大吞吐量、最高可靠性和最小费用。4 bit中只能置其中1 bit。如果所有4 bit均为0,那么就意味着是一般服务。

  • 总长度字段是指整个I P数据报的长度,以字节为单位。I P数据报最长可达2 ^ 16 -1 = 65535字节
  • 标识字段唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加 1
  • TTL(time - to - live)生存时间字段设置了数据报可以经过的最多路由器数。TTL的初始值由源主机设置(通常为32或64).
  • 首部检验和字段是根据 IP 首部计算的检验和码。

IP路由选择

  • 在一般的体制中,I P可以从 TCP、UDP、ICMP和 IGMP 接收数据报文并进行发送,或者从一个网络接口接收数据报并进行发送。
  • IP层在内存中有一个路由表。当收到一份数据报并进行发送时,它都要对该表搜索一次

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

  • 目的 IP 地址。它既可以是一个完整的主机地址
  • 下一站(或下一跳)路由器( next-hop router)的IP地址,或者有直接连接的网络 IP 地址
  • 标志。其中一个标志指明目的 I P地址是网络地址还是主机地址,另一个标志指明下一站路由器是否为真正的下一站路由器,还是一个直接相连的接口
  • 为数据报的传输指定一个网络接口

IP 路由选择是逐跳地(hop - by - hop)进行的:

  1. 搜索路由表,寻找能与目的 IP 地址完全匹配的表目(网络号和主机号都要匹配)。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值)
  2. 搜索路由表,寻找能与目的网络号相匹配的表目。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值)。目的网络上的所有主机都可以通过这个表目来处置。例如,一个以太网上的所有主机都是通过这种表目进行寻径的。
  3. 搜索路由表,寻找标为“默认( default)”的表目。如果找到,则把报文发送给该表目指定的下一站路由器。

如果上面这些步骤都没有成功,那么该数据报就不能被传送。如果不能传送的数据报来自本机,那么一般会向生成数据报的应用程序返回一个“主机不可达”或“网络不可达”的错误。

子网寻址

现在所有的主机都要求支持子网编址( RFC 950 [Mogul and Postel 1985])。不是把I P地址看成由单纯的一个网络号和一个主机号组成,而是把主机号再分成一个子网号和一个主机号。

使用子网寻址可以缩小 Internet 路由表的规模

子网掩码

除了IP地址以外,主机还需要知道有多少比特用于子网号及多少比特用于主机号。这是在引导过程中通过子网掩码来确定的。这个掩码是一个 32 bit的值,其中值为1的比特留给网络号和子网号,为0的比特留给主机号

尽管IP地址一般以点分十进制方法表示,但是子网掩码却经常用十六进制来表示,特别是当界限不是一个字节时,因为子网掩码是一个比特掩码。

给定IP地址和子网掩码以后,主机就可以确定 IP 数据报的目的IP是:

  1. 此子网上的主机
  2. 本网络中其他子网中的主机
  3. 其他网络上的主机

特殊情况的IP地址

经过子网划分的描述,现在介绍 7个特殊的 IP 地址,如图3-9所示。在这个图中, 0表示所有的比特位全为0;-1表示所有的比特位全为1;netid、subnetid和hostid分别表示不为全0或全1的对应字段。子网号栏为空表示该地址没有进行子网划分。

ifconfig 命令

ifconfig ( 8 )命令一般在引导时运行,以配置主机上的每个接口。

netstat 命令

netstat( 1 )命令也提供系统上的接口信息。 - i参数将打印出接口信息, - n参数则打印出 IP 地址,而不是主机名字。

小结

3.1 环回地址必须是 127.0.0.1 吗

不必须是 127.0.0.1,任何网络号是127的地址

3.2 在图3 - 6中指出有超过两个网络接口的路由器。

kpno:5个;3个点对点和2个以太网 R10 :4个以太网 gateway :3个,2个点对点和一个以太网 netb :3个;1个以太网+2点对点

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

子网掩码相同,为 255.255.255.0

3.4 阅读RFC 1219 [Tsuchiya 1991],学习分配子网号和主机号的有关推荐技术。

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

此为不连续子网掩码(noncontiguous subnet mask )根据子网掩码可知道子网号与主机号之间的分界线,因为前面16位为1与后面的0分割开来,因此有效。

3.6 你认为为什么3 . 9小节中打印出来的环回接口的 MTU 要设置为 1536?

历史遗留。该值为1024 + 512,但是打印的MTU值包括任何需要的头。

3.7 T C P / I P协议族是基于一种数据报的网络技术,即 I P层,其他的协议族则基于面向连接的网络技术。阅读文献[Clark 1988],找出数据报网络层提供的三个优点。

  • 数据报消除了路由器对连接状态的需要。
  • 数据报提供了基本的构建块,在此基础上可以构建不可靠(UDP)和可靠(TCP)传输层。
  • 数据报表示最小的网络层假设,允许广泛的数据链接层被使用。