《TCP/IP详解 卷1:协议》 读书笔记 第三章 IP:网际协议

时间:2022-02-07 10:32:02

第三章 IP:网际协议

1.引言

IP提供的是不可靠,无连接的数据报传递服务。

不可靠是说它不能保证IP数据报能成功地到达目的地,它仅提供最好的传输服务。可靠性必须由上层来提供。

无连接则是说IP并不维护任何关于后续数据报的状态信息,每个数据报都是独立的。所以IP数据报可以不按序接收,每个数据报独立地进行路由。

2.IP首部

IP数据报格式:


《TCP/IP详解 卷1:协议》 读书笔记 第三章 IP:网际协议

普通的IP首部为20字节.除非包含选项字段。

网络字节序,也被称为big endian字节序。TCP/IP首部中的所有二进制整数在网络中传输都要求这种字节序——4个字节的32bit值的传输顺序:0~7bit,8~15bit,16~23bit,24~31bit。

版本目前大部分为4,也称为IPV4。

首部长度指首部占32 bit的数目,因此IP首部最长为60 Byte,且为4 Byte的倍数。
比如:首部为20 Byte,则首部长度为5。(所以一般情况下这个字段值是5)

服务类型(TOS)字段包括一个3bit的优先权子字段(现在已被忽略),4 bit的TOS子字段和1 bit未用位但必须置0,4 bit的TOS分别代表:最小时延,最大吞吐量,最高可靠性和最小费用。

总长度字段指整个数据报的长度,以Byte为单位。该字段16 bit,所以IP数据报的最大长度可达65535 Byte。

标识字段唯一地标识主机发送的每一份数据,标志位和片偏移字段与分片重组有关。

TTL(time-to-live)生存时间字段设置了数据报可以经过的最多路由器数。

协议字段表示那个协议向IP传送数据报.1为ICMP协议,2为IGMP协议,6为TCP协议,17为UDP协议。

首部检验和字段是根据【IP首部】计算的检验和码。它不对首部后面的数据进行计算。
××计算方法:首先,检验和字段置0,然后对首部的每个16bit进行二进制反码求和,结果存在检验和字段中。当收到一份IP数据报时,同样对首部中每个16bit进行二进制反码求和(此时检验和字段不是0了,它已经计算过并存入首部),因此,如果没有差错,接收方计算结果应该是全1。如果不是全1,IP就丢弃该数据报,但不生成差错报文,而是由上层去发现丢失的数据报并要求重传。

选项字段是一个可变长的可选信息,但必须为32 bit的倍数(首部长度字段所要求)。

IP地址为32 bit。

3.IP路由选择

简单的IP路由选择机制:如果源和目的直接相连或者在同一个共享网络中,则直接发送到目标主机,否则发到默认的路由器,由路由器进行转发。

一般情况下,IP可以从TCP,UDP,ICMP和IGMP接收数据报(即本地生成的数据)并进行发送,或者从其他接口接收数据(待转发的数据)进行转发或接收。

IP层在内存中有一个路由表,每收到一份数据报,它都会对该表进行一次搜索。当数据报来自某个接口时:

(1)IP首先判断IP地址是否为本地地址或者广播地址,如果是就送到首部协议段所指定的协议模块进行处理;

(2)如果不满足,且IP层设置为了路由功能,那么就对数据进行转发,否则数据报被丢弃;

【IP并不知道到达目的地的完整路径,它提供下一站路由器的IP地址】!

IP路由选择顺序:

(1)搜索路由表,寻找与目地IP完全匹配的表目;(网络号和主机号)

(2)搜索路由表,寻找与目地IP网络号相同的表目;

(3)搜索路由表,寻找默认(default)表目。

以上3步依次执行,成功即跳出,如果都不成功,该数据报就不能被转发。

××为一个网络指定一个路由器,而不必为每个主机指定一个路由器,这是IP路由选择机制的另一个基本特性。

××在路由传输过程中,数据报的目的IP地址始终不变(所有路由决策都是基于这个地址的!),而链路层的目的地址(如果有的话)始终指的是下一站的链路层地址。

4.子网寻址

前面我们讲过,IP可以分为网络号和主机号,进一步的,我们可以对主机号进行划分,得到子网号和新的主机号,这样子,就可以把我们的网络进一步划分为更小的网络了。

子网对外部路由器来说隐藏了内部网络组织。

子网的划分缩小了路由表的规模,使得许多网络通过单个表目九可以访问了。

5.子网掩码

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

子网的划分,实际上就是设计子网掩码的过程。

子网掩码主要是用来区分IP地址中的网络ID和主机ID,它用来屏蔽IP地址的一部分,从IP地址中分离出网络ID和主机ID。

通过将IP地址与子网掩码进行”与”逻辑操作,得出网络号。

例如,假设IP地址为192.160.4.1,子网掩码为255.255.255.0,则网络ID为192.160.4.0,主机ID为0.0.0.1。计算机网络ID的不同,则说明他们不在同一个物理子网内,需通过路由器转发才能进行数据交换。

每类地址具有默认的子网掩码:A类为255.0.0.0,B类为255.255.0.0,C类为255.255.255.0。

除了使用上述的表示方法之外,还有使用子网掩码中”1”的位数来表示的,在默认情况下,A类地址为8位,B类地址为16位,C类地址为24位。例如,A类的某个地址为 12.10.10.3/8,这里的最后一个”8”说明该地址的子网掩码中的”1”有8位,即255.0.0.0,而199.42.26.0/28表示网络199.42.26.0的子网掩码中“1”的位数有28位。

如果希望在一个网络中建立子网,就要在这个默认的子网掩码中加入一些位,它减少了用于主机地址的位数。加入到掩码中的位数决定了可以配置的子网。因而,在一个划分了子网的网络中,每个地址包含一个网络号、一个子网号和一个主机号。

给定IP地址和子网掩码,我们就可以确定IP数据报的目的是:
1.本子网上的主机;
2.本网络中其他子网的主机;
3.其他网络上的主机。

(从IP地址的高位,我们可以知道网络号和子网号的分界,从子网掩码,我们可以知道子网号和主机号的分界)

子网划分的好处:

1.广播只能在子网中传播,而常常接受者只有一台主机,如果网络太大,消耗很大,而子网划分可以减少这个消耗。

2.虽然划分子网后,可用ip减少了(因为对于每个子网,都要占用本机地址和广播地址),但是对于小型网络来说,划分子网后可节省大量IP地址资源。因为几个小网络可以共用一个大的网络地址范围,而且同样可以取到隔离的作用。如果没有子网划分的功能,那么可能我们需要取几个C类的网段,但是每个网段却只用了及其少一部分,从而造成浪费。

3.不同子网间是不能直接通信的,这提高了安全性,便于管理。

6.ifconfig命令

这个命令可以查询主机上的每个接口,包含了大量的信息,比如inet地址,硬件地址,掩码,MTU等等。

7.netstat命令

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

此外,它还有很多其他功能,此处暂不讨论。

8.IP分类

A类
1.0.0.0 到126.0.0.0
0.0.0.0 和127.0.0.0保留

B类
128.1.0.0到191.254.0.0
128.0.0.0和191.255.0.0保留

C类
192.0.1.0 到223.255.254.0
192.0.0.0和223.255.255.0保留

D类
224.0.0.0到239.255.255.255用于多点广播

E类
240.0.0.0到255.255.255.254保留
255.255.255.255用于广播

9.CIDR(Classless Interdomain Routing)

CIDR为无类别的域间路由选择,是一种为解决地址耗尽而提出的一种措施。

基本思想:适当分配多个合适的IP地址,使得这些地址能够进行聚合,减少这些地址在路由表中的表项数。如,给某个网络分配16个C类地址,采用适当的方法分配这些地址,使得16个地址能够聚合成一个地址。

“无分类”指不考虑IP地址所属的类别,路由的策略完全基于整个32bit IP地址的掩码来操作。