【3】TCP/IP协议族详解——IP协议
声明:本书参考自《TCP/IP详解卷一:协议》
1.概述
IP协议是TCP/IP协议族中最核心的协议。所有的TCP、UDP、ICMP、IGMP数据都以IP数据报个数传输。IP提供的是不可靠、无连接的服务。
不可靠指的是它不保证将数据报送往目的地。但是当发生错误的时候一般会发送ICMP消息报给信源,通报信源错误的类型。
无连接指的是IP并不维护任何关于后续数据报状态信息。每个数据报都是相互独立的。这就导致同一信源发送的消息到达的顺序可能会不同。
2.IP首部
如上图所示,最高位在左边,记为0bit;最低位在右边,记为3bit。
4个字节的32bit值以下面的次序传输:首先0~7bit,其次8~15bit,然后16~23bit,最后是24~31bit。这种传输次序称为大端序。
各个字段说明:
①4位版本:目前协议版本号是4,因此称为IPv4。目前IPv6也已全部部署。。。
②首部长度:指的是首部占32bit字的数目,包括任何选项。因此首部最长为32*15/8 = 60字节。
③服务类型(TOS):该字段包括一个3bit的优先权子字段(现在已被忽略),4bit的TOS子字段和1bit未用位(置为0)。 4bit分别代表最小延时、最大吞吐量、最高可靠性和最低费用。4bit只能置其中1bit。
下图给出了不同应用的TOS值
根据应用程序对延时、吞吐量、可靠性和费用的要求而设置不同的TOS值。
④总长度指的是IP数据报的总长度,以字节为单位。利用首部长度字段和总长度字段,就可以知道IP数据报中数据内容的起始位置和总长度了。由于该字段长16bit,故IP数据报的最大可达长度为65535。注意将这个值和MTU区分开来,MTU是链路层的限制。而这个值是IP层的限制。在上份博客中,我们了解到链路层传输有个最小的长度,以太网这一长度是46,此字段可以帮助我们识别IP数据报的位置。
⑤标识字段唯一标识主机发送的数据报。通常每发送一份数据报其程度加1。
⑥标志字段和片偏移字段涉及到IP数据报的分片内容。
⑦TTL(time-to-live)字段设置数据报最多经过的路由,通常每经过一层路由这个字段的值-1,设置这个字段可以防止网络的环路。注意在防火墙中可以让TTL字段不减,所以防火墙可以在网络中隐形,这样别人就不能探测有防火墙网络的拓扑了。到TTL为1或者0的时候,路由器会将该数据报丢弃,并发送ICMP报文给信源。
⑧协议字段用来标志IP后面的协议类型,UDP、TCP、ICMP、IGMP等。
⑨首部检验和用来检验IP首部的内容是否出现错误。注意其只计算首部,不计算IP数据报中的其它内容。
⑩源IP地址和目的IP地址。
最后是选项部分。这些内容主要的定义如下:
① 记录路径
②宽松的源站选路
③严格的源站选路
3.子网
从上图可以看出A和B类地址分配了相等多的主机号,但是人们在一个网络中并不会用到这么多的主机,所以人们把主机号再分成一个子网号和一个主机号。(注:全0或1的主机地址无效)
下面是一种子网示例
采用字节划分的方式很容易确定子网号,但是子网的划分并不是一定以字节为单位。子网的划分对外部路由器来说隐藏了内部的细节,有利于保证网络的安全性。
子网中一个很重要的概念就是子网掩码,子网掩码是一个32bit的值,其中全1的bit留给网络号,其它的留给主机号。下图给出了B类地址的两种不同的子网掩码格式:
给定I P地址和子网掩码以后,主机就可以确定 I P数据报的目的是:(1)本子网上的主机;
(2)本网络中其他子网中的主机;(3)其他网络上的主机。
几组特殊的IP地址
-1表示255,注意子网号和主机号不一定是8个字节,所以140.252.13.63也可能是广播地址。
4.两个重要的指令
(1)ifconfig命令:查看主机上的IP以及网卡接口信息。windos下是ipconfig
(2)netstat命令:打印系统上的接口信息