一.总述

         IP(internet protocol)是TCP/IP协议簇的基础,在链接层中封装的IP datagram是网络间数据传输的一个基本单元,包括传输层的TCP,UDP等协议都是基于IP协议的。IP协议有个特点:IP协议是无连接的。我们知道,TCP是面向连接的,是可靠的传输协议;而UDP是无连接的,相应的也就不可靠,无法保证数据确实传输到了目的地。TCP面向连接,需要经过3次握手才能建立起可靠的数据传输的全双工的通道,这就导致了需要保存连接的状态等信息,增加实现的复杂程度。UDP无连接,自然也就更容易实现,维护起来也就更简单些。在现在的应用中,UDP与TCP都应用地很广泛,所以IP协议并不需要面向连接,因为需要可靠性的TCP自身去实现可靠性就行了。

        IP协议还有一个特点:IP datagram是独立的。这也是因为IP协议的无连接性。所以,IP datagram的传输顺序也不会确定。
        关于IP header的内容在此省略,读者可以很容易就从网上找到相关资料。我一直觉得这些比较死的东西不是重点。
二.IP 路由选路
         1.提到路由选路,就不得不提到路由表。每个路由表都包含以下内容:
        (1)网络ID。路由器的作用是连接不同的网络,进程有pid,线程有thread id,自然,网络也有网络ID。其实我们每天都在与网络ID打交道,比如B类IP地址的从左边开始的第3位到第16位都是网络ID(IP地址由网络ID与主机ID构成)。从原始的网络ID,到划分子网而产生的主机ID的数量会非常大,如果在路由表中保存主机ID,那么势必会导致路由表变得非常大,而这显然不是我们愿意看到的。而在路由表中只保存网络ID,通过路由器或网关来选路(选择把IP datagram发送到当前路由器所储存的某个网络ID),就可以在实现相同功能的同时大大缩小路由表的大小。
        (2)next hop.  当IP datagram的目的地址不在当前路由的网络ID中时,路由器就将IP datagram转发由next hop指示的下一个路由器。
        了解了路由表的内容,就很容易理解路由选路的过程了。当路由器接收到一个IP datagram,先判断这个datagram的目的地址是否在当前路由器所存储的网络ID中,如果在,就直接将datagram发送过去;如果不在,这时路由器就需要将datagram转发到next hop所指示的下一个路由器,然后再进行相同的操作,直到该datagram到达目的地或者被舍弃。(IP header中有个字段是TTL,规定了一个IP datagram的生命周期。每当datagram经过一个路由器时,TTL的值就减去1,直TTL==0时,就将其舍弃)。
        2.还有一个比较重要的概念:网关。这个概念是我一直比较模糊的。网关被称作IP路由器,网关的IP地址是具有路由功能的设备的IP地址。路由器就是一种具有路由功能的设备,所以简单的说,路由器的IP地址就是网关。
三.  子网划分
         A类地址有7位网络号,24位主机号。对应A类地址,每个网络号有个主机。除去无效的全0bits主机号与全1bits主机号。
        B类地址有14位网络号,16位主机。对应B类地址,每个网络号有个主机。除去无效的全0bits主机号与全1bits主机号。
        一个A类地址,就可以有个主机,但是一般情况下一个局域网内不可能有如此多的主机,所以为了避免浪费IP地址,就应该给这些主机分类,即划分子网。这就好比进行知识管理的时候用标签或者类别给知识分类,有着便于管理等优点。但要注意,进行子网划分并不会增大总的IP地址的数量,仅仅是分类而已,这也类似于进行知识管理后知识的总量不会增加。
       下面用一个例子来说明子网划分的具体方法。
        一个B类地址:130.160.xxx.xxx(B类地址的范围是:128.0.0.0到191.255.255.255)。除了网络号后,后面的16bits是主机号;子网划分的基本目标是减少每个网络的主机数量,所以就把主机号分一部分成为子网号(可以把子网号也想像成为网络号的一部分,因为在功能上子网号与网络号是相同的)。这里我把主机号中的8位划分为子网号。那么,每个网络ID就会有个子网,每个子网,也会有个主机。这就达到了子网划分的目的了。
        还有一个概念,子网掩码:在进行子网划分后,将主机号置为0bit,将其他位置为1bit,那么上面那个例子的子网掩码就是:255.255.255.0。通过子网掩码,可以很轻易就看出每个子网的主机的数量。
四.Loopback Address
         这本是个很简单的point,但我有时就是对一些看似简单的概念不理解,而有时又通过某一个point就把之前很久都没有理解的概念给弄懂了,就好像捅破了一层窗户纸。这是不是“灵感”?嘿嘿。
        之前我一直没有理解这个回路地址是什么意思,通过本章的一个习题,我终于明白了。回路地址被置为127.0.0.1,localhost.比如本机的标号是A,对于A来说,127.0.0.1是localhost,本机A访问127.0.0.1就形成了一个回路。而机器B访问127.0.0.1是无法访问到A的。
参考资料:《TCP/IP详解卷1:协议》第一版 英文版
如果你觉得我的文章对你有帮助,请赞一下,非常感谢!