跟我学TCP/IP系列3

    跟我学TCP/IP系列的前面两篇文章介绍了一些网络基础知识以及数据链路的部分内容,现在开始会学习到IP协议以及与IP协议有关的一些技术,虽然知识点有点枯燥,但学习是一个坚持的过程,做别人不能做的事,这样才会得到锻炼,成长。

1

IP协议

IP(Internet Protocol,网际协议)作为整个TCP/IP中至关重要的协议,它主要是负责将数据包发送给最终的目标计算机,从而实现通信连接。

    IP相当于OSI参考模型的第三层,也就是网络层,网络层和数据链路层都是基于目标地址将数据发送给接收端的;两层之间有什么联系和区别呢?

    首先,从作用上看,网络层的主要作用是“实现终端节点之间的通信”,这种终端节点的通信也叫做“点对点(end-to-end)”的通信。从前面的文章可知,数据链路层的主要作用是在互连同一种数据链路的节点之间进行包传递,而一旦跨越多种数据链路,就需要借助网络层,网络层可以跨越不同的数据链路,即使是在不同的数据链路上也可以实现两端节点之间的数据包传输。

    其次,从通信功能上看,数据链路层提供直连两个设备的通信功能,与之相比,作为网络层的IP则负责在没有直连的两个网络之间进行通信。进一步来说,数据链路层只负责某一区间之间的通信传输,而IP负责将数据包发给最终的目标地址,即点对点通信。

    最后,从发送数据的角度来说,网络层负责将整个数据发送给最终目标地址,而数据链路层则只负责发送一个分段内的数据。


1

什么是主机与节点?

    准确来说,主机的定义是指“配置有IP地址,但是不进行路由控制”的设备。既配有IP地址又具有路由控制能力的设备叫做“路由器”,跟主机有所区别。而节点是指主机与路由器的统称。


2

IP基础知识

    IP大概分为三大作用模块,一是IP寻址,路由以及IP分包与组包。


1

IP 寻址

   

    IP地址属于网络层地址,前面说过的数据链路层的MAC地址正是用来标识同一链路中不同计算机的一种识别码。

    IP地址用于在“连接到网络中的所有主机中识别出进行通信的目标地址”,因此在TCP/IP中所有主机或路由器必须设定自己的IP地址。

    在网桥或交换集线器等物理层或数据链路层数据包转发设备中,不需要设置IP地址。因为这些设备只负责将IP地址包转发为0、1比特流转发给数据链路帧的数据部分进行转发,而不需要对应IP协议。


2

路由控制


    路由控制是指将分组数据发送到最终目标地址的功能。即使网络非常复杂,也可以通过路由控制确定到达目标地址的通路。

    先来说说Hop,其中文译名为“跳”,它是指网络中的一个区间。IP包正是在网络中的一个个跳区间被转发,因此IP路由也叫做多跳路由。并且在每一个区间决定着包在下一跳被转发的路径。

    一跳是指利用数据链路层以下分层的功能传输数据帧的一个区间。以太网等数据链路层中使用MAC地址传输数据帧,此时的一跳是指从源MAC地址到目标MAC地址之间传输帧的区间,也就是说它是主机或路由器网卡不经由其他路由器而能直接到达的相邻主机或者路由器网卡之间的一个区间。

跟我学TCP/IP系列3

    多跳路由    

    多跳路由是指路由器或主机在转发IP数据包时指定下一个路由器或主机,而不是将最终目标地址为止的所有通路直接指定出来。因为每一个区间在转发IP数据包时会分别指定下一跳的操作,直至包到达最终的目标地址。

路由控制表是一种为了将数据表发送给目标主机,所有主机都维护着的一张表,该表记录IP数据在异步应该发给哪个路由器。IP包将根据这个路由表在各个数据链路成传输。

跟我学TCP/IP系列3

路由控制表


3

分组与重装


      IP是实现多个数据链路之间通信的协议,数据链路根据种类的不同各有特点。不同数据链路有个最大的区别就是他们各自的最大传输单位MTU(Maximun Transmission Unit)不同。

    MTU的值在以太网中是1500字节,在FDDI中是4352字节,在ATM中是9180字节。IP的上一层可能要求传送比这些MTU更多字节的数据,因此必须在线路上传送比包长还要小的MTU。为解决这个问题,IP将进行分片处理,将较大的IP包分割成较小的IP包。分片的包到了对端目标地址再被重组起来传送给上一层。


    IP是面向无连接的,即在发送报文之前,不需要建立与对端目标之间的连接,即使对端主机关机或者不存在,数据包还是会被发送出去。对于主机来说,它会何时从哪里接收到数据也是不确定的,因此需要进行网络监控,让主机只接受发给自己的数据包。

IP采用面向无连接的好处:简化了发送数据之前复杂的建立连接的过程。因为是无连接的,继而提高了处理速度。由此可见,IP也是一种不可靠的传输方式。


3

IP地址详解

    IP地址(IPv4)由32bit正整数来表示,TCP/IP通信要求将这样的IP地址分配给每一个参与通信的主机,IP地址在计算机内部以二进制方式被处理。将表示IP地址的数字整体计算,会得到如下数值:2^32=4,294,967,296(约43亿),也就是说,最多可以允许43亿计算机连接网络。IP地址并非根据主机台数来配置,而是根据每一台主机上的每一块网卡NIC都得设置IP地址。



1

IP地址的组成


    IP地址由网络和主机两部分标识组成:IP地址=网络标识+主机标识。

    网络标识在数据链路的每个段配置不同的值,网络标识必须保证相互连接的每个段的地址不相重复。而相同段内相连的主机必须相连的主机必须有相同的网络地址;

    IP地址的主机标识则不允许在同一个网段内重复出现。也就是说通过设置网络地址和主机地址可以保证在相连的整个网络中每个主机的IP地址不会重叠,即保证IP地址的唯一性。

现在基本是以子网掩码来区分网络标识和主机标识,稍后会给出子网掩码的相关知识。


2

IP地址的分类


    IP地址分为4个级别,分别是A类,B类,C类,D类(E类一直未使用,在此就不说E类地址了)。它根据IP地址中从第一位到第四位的比特列对其网络标识和主机标识进行区分。

    A类地址:首位以"0"开头的地址,第1~8位(去掉分类位剩下7位)是它的网络标识,用十进制表示的话,0.0.0.0~127.0.0.0是A类地址的范围;A类地址后24位相当于主机标识,故一个网段中可容纳的主机地址上限为16,777,214个。

    B类地址:前两位地址以"10"开头,从第1~16是(去掉2位分类位剩下14位,以下类推)网络标识,十进制表示为128.0.01~191.255.0.0是B类地址。后16位是主机标识,一个网段可容纳主机地址为2^16(65534)个。

    C类地址:前三位以"110"开头,从第1~24是网络标识,用十进制表示为,192.168.0.0~239.255.255.0是C类地址。后8位是主机标识,一个网段内可容纳的主机上限为254(2^8 - 2)台。

    D类地址:前四位以"1110"开头,从第1~32是网络标识,用十进制表示为,224.0.0.0~239.255.255.255是D类地址。D类地址无主机标识因而常用于多播。


    用比特位表示主机地址时,不可以全部为0或全部为1。因为全部为0只有在表示对应的网络地址或IP地址在不可获知的情况下才使用。全为1的主机地址通常作为广播地址。


3

广播地址


    广播地址用于在同一个链路中相互连接的主机之间发送数据,IP地址中的主机地址部分全设为1,就成为了广播地址。广播分为本地广播和直接广播两种:

    在本网络内的广播叫做本地广播,例如网络地址为192.168.0.0/24的情况下,广播地址是192.168.0.255。因为这个广播地址的IP包会被路由器屏蔽,所有不会到达192.168.0.0/24以外的其他链路上。

跟我学TCP/IP系列3

    本地广播

    在不同网络之间的广播叫做直接广播。例如网络地址为192.168.0.0/24的主机向192.168.1.255/24的目标地址发送IP包。收到这个包的路由器将数据转发给192.168.1.0/24,从而使得所有192.168.1.1~192.168.1.254的主机都能接收到这个包。

跟我学TCP/IP系列3

直接广播

IP多播

同时发送提高效率:多播用于将包发送给特定组内的所有主机,由于其是直接直接使用IP协议,因此也不存在可靠的传输。

跟我学TCP/IP系列3

单播、广播与多播

    IP多播与地址:多播使用D类地址,因此如果从首位开始到第4位是"1110",就可以认为是多播地址。剩下的28bit可以成为多播的组编号。从224.0.0.到239.255.255.255都是多播地址的可用范围。其中224.0.0.0到224.0.0.255的范围不需要路由控制,在同一个链路内也能实现多播,而在这个范围之外设置多播地址会给全网所有组内成员发送多播的包。

    对于多播,所有的主机(路由器以外的主机合作终端主机)必须属于224.0.0.1的组,所有的路由器必须属于224.0.0.2的组。


4

子网与子网掩码

   

     现在,一个IP地址的网络标识和主机标识已不再受限于该地址的类别,而是由一个叫做子网掩码的识别码通过子网网络地址细分出比A,B,C类更小粒度的网络。实际上就是将分类中主机地址部分用作子网地址,可以将原网络分成多个物理网络的一种机制。

    子网掩码用二进制表示的话,也是一个32bit的数字,它对应IP地址网络标识部分的位全为1,对应IP地址主机标识标识的部分全为0。由于一个IP地址可以不再受限于自己的类别,而是可以用这样的子网掩码*定位自己的网络标识长度,当然子网掩码必须是IP地址的首部开始连续的1。

跟我学TCP/IP系列3

跟我学TCP/IP系列3

    子网掩码的计算

    子网掩码的计算只需要根据上述给出的规则:对应IP地址网络标识部分的位全为1,对应IP地址主机标识标识的部分全为0。化为二进制然后转为十进制表示即可。


全局地址和私有地址

    全局IP地址基本上要在整个互联网范围内保持唯一,但私有地址不需要。只要在同一个域里保证唯一即可。在不同的域里出现相同的私有IP不会影响使用。

跟我学TCP/IP系列3

全局IP与私有IP


5

路由控制表

    

    为了将数据表发送给目标主机,所有主机都维护着一张路由控制表,该表记录IP数据在异步应该发给哪个路由器。IP包将根据这个路由表在各个数据链路成传输。

    发送数据包时所使用的地址就是网络层的地址,即IP地址。然而仅仅有IP地址还不足以实现将数据包发送到对端目标地址,在数据发送过程中还需要类似于“指明路由器或主机”的信息,以便真正发送目标地址,保存这些信息的就是路由控制表。

    路由控制表的形成:一是由管理员手动设置,另一种是路由器与其他路由器相互交换信息时自动刷新,前者也叫做静态路由控制,后者叫做动态路由控制。

跟我学TCP/IP系列3

路由控制表

上图中包含了丰富的路由控制以及转发过程,希望读者认真理解。

    路由控制表中记录着网络地址与下一步应该发送至路由器的地址,在发送IP包时,首先要确定IP包首部中的目标地址,再从路由控制表中找到与该地址具有相同网络地址的记录,根据该记录将IP包发送给相应的下一个路由器。如果路由控制表中存在多条相同的网络地址的记录,就选择一个最为吻合的网络地址。即匹配相同位数最多的地址。


路由控制表的聚合

利用网络地址的比特分布可以有效地进行分层配置,对内即使有多个子网掩码,对外呈现出的也是用一个网络地址。根据这一原理,可以有效地减少路由表的条目,下面看个路由控制表聚合的例子。

跟我学TCP/IP系列3跟我学TCP/IP系列3

路由控制表聚合例子

    以上就是所有的有关IP协议的知识点,虽然没有具体讲怎么计算IP地址以及在不同网段传输和同网段传输时主要注意的事情,还有子网掩码的计算等,希望读者自行去找写题目来分析一下就可以很容易地明白,其实掌握了那些规律,计算都不是什么难事。