P协议是TCP/IP协议的核心,所有的TCP,UDP,IMCP,IGMP的数据都以IP数据格式传输。要注意的是,IP不是可靠的协议,这是说,IP协议没有提供一种数据未传达以后的处理机制,这被认为是上层协议:TCP或UDP要做的事情。
IP(IPv4、IPv6)相当于 OSI 参考模型中的第3层——网络层。网络层的主要作用是“实现终端节点之间的通信”。这种终端节点之间的通信也叫“点对点通信”。
网络的下一层——数据链路层的主要作用是在互连同一种数据链路的节点之间进行包传递。而一旦跨越多种数据链路,就需要借助网络层。网络层可以跨越不同的数据链路,即使是在不同的数据链路上也能实现两端节点之间的数据包传输。
IP 大致分为三大作用模块,它们是 IP 寻址、路由(最终节点为止的转发)以及 IP 分包与组包。
二、IP基础知识
在计算机通信中,为了识别通信对端,必须要有一个类似于地址的识别码进行标识。在数据链路中的 MAC 地址正是用来标识同一个链路中不同计算机的一种识别码。
作为网络层的 IP ,也有这种地址信息,一般叫做 IP 地址。**IP 地址用于在“连接到网络中的所有主机中识别出进行通信的目标地址”。**因此,在 TCP/IP 通信中所有主机或路由器必须设定自己的 IP 地址。
不论一台主机与哪种数据链路连接,其 IP 地址的形式都保持不变。
IP 地址(IPv4 地址)由32位正整数来表示。IP 地址在计算机内部以二进制方式被处理。然而,由于我们并不习惯于采用二进制方式,我们将32位的 IP 地址以每8位为一组,分成4组,每组以 “.” 隔开,再将每组数转换成十进制数。如下:
IP地址由网络和主机两部分组成
网络标识在数据链路的每个段配置不同的值。网络标识必须保证相互连接的每个段的地址不相重复。而相同段内相连的主机必须有相同的网络地址。IP 地址的“主机标识”则不允许在同一个网段内重复出现。由此,可以通过设置网络地址和主机地址,在相互连接的整个网络中保证每台主机的 IP 地址都不会相互重叠。即 IP 地址具有了唯一性。
IP地址的主机标识
如下图,IP 包被转发到途中某个路由器时,正是利用目标 IP 地址的网络标识进行路由。因为即使不看主机标识,只要一见到网络标识就能判断出是否为该网段内的主机。
IP 地址的分类
广播地址
广播地址用于在同一个链路中相互连接的主机之间发送数据包。将 IP 地址中的主机地址部分全部设置为 1,就成了广播地址。
广播分为本地广播和直接广播两种。在本网络内的广播叫做本地广播;在不同网络之间的广播叫做直接广播。P127
IP 多播(同时发送提高效率)
多播用于将包发送给特定组内的所有主机。由于其直接使用 IP 地址,因此也不存在可靠传输。
相比于广播,多播既可以穿透路由器,又可以实现只给那些必要的组发送数据包。
多播使用 D 类地址。因此,如果从首位开始到第 4 位是 “1110”,就可以认为是多播地址。而剩下的 28 位可以成为多播的组编号。
此外, 对于多播,所有的主机(路由器以外的主机和终端主机)必须属于 224.0.0.1 的组,所有的路由器必须属于 224.0.0.2 的组。
子网掩码
现在一个 IP 地址的网络标识和主机标识已不再受限于该地址的类别,而是由一个叫做“子网掩码”的识别码通过子网网络地址细分出比 A 类、B 类、C 类更小粒度的网络。这种方式实际上就是将原来 A 类、B 类、C 类等分类中的主机地址部分用作子网地址,可以将原网络分为多个物理网络的一种机制。
子网掩码用二进制方式表示的话,也是一个 32 位的数字。它对应 IP 地址网络标识部分的位全部为 “1”,对应 IP 地址主机标识的部分则全部为 “0”。由此,一个 IP 地址可以不再受限于自己的类别,而是可以用这样的子网掩码自由地定位自己的网络标识长度。当然,子网掩码必须是 IP 地址的首位开始连续的 “1”。
对于子网掩码,目前有两种表示方式。第一种是,将 IP 地址与子网掩码的地址分别用两行来表示。以 172.20.100.52 的前 26 位是网络地址的情况为例,如下:
第二种表示方式是,在每个 IP 地址后面追加网络地址的位数用 “/ ” 隔开,如下:
CIDR与VLSM
全局地址与私有地址
三、路由控制
发送数据包时所使用的地址是网络层的地址,即 IP 地址。然而仅仅有 IP 地址还不足以实现将数据包发送到对端目标地址,在数据发送过程中还需要类似于“指明路由器或主机”的信息,以便真正发往目标地址。保存这种信息的就是路由控制表。
该路由控制表的形成方式有两种:一种是管理员手动设置,另一种是路由器与其他路由器相互交换信息时自动刷新。前者也叫做静态路由控制,而后者叫做动态路由控制。
IP 协议始终认为路由表是正确的。然后,IP 本身并没有定义制作路由控制表的协议。即 IP 没有制作路由控制表的机制。该表示由一个叫做“路由协议”的协议制作而成。
IP地址与路由控制
IP 地址的网络地址部分用于进行路由控制。
路由控制表中记录着网络地址与下一步应该发送至路由器的地址。
在发送 IP 包时,首先要确定 IP 包首部中的目标地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将 IP 包转发给相应的下一个路由器。如果路由控制表中存在多条相同网络地址的记录,就选择一个最为吻合的网络地址。
默认路由:是指路由表中任何一个地址都能与之匹配的记录
主机路由:多被用于不希望通过网络地址路由的情况。
环回地址:是在通一台计算机上的程序之间进行网络通信时所使用的一个默认地址
路由控制表的聚会
四、 IP分割处理与再构成处理
每种数据链路的最大传输单元(MTU)都不尽相同,因为每个不同类型的数据链路的使用目的不同。使用目的不同,可承载的 MTU 也就不同。
IP属于数据链路上一层,它必须不受限于不同数据链路的MTU大小
IP报文的分片与重组
任何一台主机都有必要对 IP 分片进行相应的处理。分片往往在网络上遇到比较大的报文无法一下子发送出去时才会进行处理。
经过分片之后的 IP 数据报在被重组的时候,只能由目标主机进行。路由器虽然做分片但不会进行重组。原因P140
路径MTU发现
分片机制也有它的不足。如路由器的处理负荷加重之类。因此,只要允许,是不希望由路由器进行 IP 数据包的分片处理的。
为了应对分片机制的不足,“路径 MTU 发现” 技术应运而生。路径 MTU 指的是,从发送端主机到接收端主机之间不需要分片是最大 MTU 的大小。即路径中存在的所有数据链路中最小的 MTU 。
路径MTU发现从发送主机按照路径MTU的大小将数据报分片后进行发送。
进行路径 MTU 发现,就可以避免在中途的路由器上进行分片处理,也可以在 TCP 中发送更大的包。图P142
路径MTU发现的工作原理
五、 IP首部
普通的I P首部长为2 0个字节,除非含有选项字段。首部最长为6 0个字节。
服务类型(TO S)字段包括一个3 bit的优先权子字段(现在已被忽略),4 bit的TO S子字
段和1 bit未用位但必须置0。4 bit的TO S分别代表:最小时延、最大吞吐量、最高可靠性和最小费用。
总长度字段是指整个 I P数据报的长度,以字节为单位。利用首部长度字段和总长度字段,
就可以知道 I P数据报中数据内容的起始位置和长度。由于该字段长 1 6比特,所以 I P数据报最长可达 6 5 5 3 5字节。尽管可以传送一个长达 6 5 5 3 5字节的I P数据报,但是大多数的链路层都会对它进行分片。 而且,主机也要求不能接收超过 5 7 6字节的数据报。由于 T C P把用户数据分成若干片,因此一 般来说这个限制不会影响 T C P。
标识字段唯一地标识主机发送的每一份数据报。通常每发送一份报文它的值就会加 1。
T T L(t i m e - t o - l i v e)生存时间字段设置了数据报可以经过的最多路由器数。它指定了数据 报的生存时间。T T L的初始值由源主机设置(通常为 3 2或6 4),一旦经过一个处理它的路由器,它的值就减去 1。当该字段的值为 0时,数据报就被丢弃,并发送 I C M P报文通知源主机。
首部检验和字段是根据I P首部计算的检验和码。它不对首部后面的数据进行计算。 I C M P、
I G M P、U D P和T C P在它们各自的首部中均含有同时覆盖首部和数据检验和码。
每一份I P数据报都包含源 I P地址和目的 I P地址。它们都是 32 bit的值。
选项字段一直都是以 32 bit作为界限,在必要的时候插入值为 0的填充字节。这样就保证
I P首部始终是32 bit的整数倍(这是首部长度字段所要求的)。
后续有待总结补充(对图解TCP/IP一书IP章节的