TCP/IP协议原理学习笔记(1)

类别:软件工程 点击:0 评论:0 推荐:
    最近学习了网络的原理,在此做一个学习小结。
     要知道为什么会出现IP协议首先必须明白两个概念:1,什么是网络。2,什么是互联网。
     什么是网络?我的理解是,在网络中的主机做一个帧的发送,帧不通过路由转发就能到达的主机的集合组成一个网络。简单点就是所有主机都是两两相连的。
     什么是互联网?简单一点说就是网络的互连。几个网络联起来,就是互联网。
     为了形象表示,用下图来说明区别:

图一表示网络,而图二表示网络互连。他们的区别在哪呢?
     图一里面的如果主机1发出帧,需要主机3做出响应,那么2,3,4主机都会收到这个帧。这些主机收到帧后,把帧里面的目标物理地址与本地的物理地址相比较,如果是就做出响应。不是就不做任何答复。这样就只有主机3做出响应。
     在图二里面,就完全不一样了。主机1要到达主机3,就不能发送帧,而是要发送IP数据包。因为只有主机2和路由器才收到主机1发的帧,但是路由器并不提供帧的转发。所以路由器和主机2都丢掉了帧,这样主机3就无法收到主机1的呼叫。那么IP数据包怎么就能达到呢?又要引入一个概念,ARP映射,其实就是IP地址和网卡物理地址的绑定。(这里假设10.0代表网络1网络的号,10.1代表网络2的网络号)主机1发往主机3的步骤:(1),判断主机3是否在同一网络里面。结果不在。(2),找到路由器的IP(一般路由器都设置成了网关)作出ARP映射,就找到了路由器的物理地址。(3)把找到的路由器的物理地址填到帧的首部,把IP数据包放在帧的数据部分,而后发出。(4)路由器收到消息并做出响应。(5)路由器提出IP数据包查找目的IP地址。(6)路由器里面有主机3的IP地址 ,所以能够做出ARP映射,找到主机3的物理地址,。(7)用主机3的物理地址填写帧的首部,把收到IP包放入帧的数据部分。发送帧。注意,这时主机1,2,3,4都能收到路由器发送的帧,但只有主机3才做出响应。这样主机1的消息就能达到主机3了。是不是有点惊奇。我就是这么觉得的。
     现在再来看,帧是基于物理线路的,所以必须两两相连才能互发帧。那么Internet为什么不做成网络,而是以互联网的形式出现呢?是不是因为世界上所有的计算机不可能两两相连,所以必须是互联网呢?
     答案其实并不是这样!
     这里又要引出一个概念:网络的类型。(注意是网络的类型,而不是互联网的类型。网络和网络互联是决然不同的。我原来出现的错误理解经常就是出现在这里)网络可分为:以太网,令牌网,等等(我只记得这两个)。他们都是对帧的发送时间做的规定。 以太网中,主机检测网络是否在闲置状态,如果是就发送帧,如果不是就等待一段时间再检测。而令牌则是对令牌的传递,有令牌的才能发送。这样就避免了冲突。大家风水轮流转,这是个平均主意。
     现在再来回答刚才的问题,在Internet里面有很多不同类型的网络,这些不同类型的网络决不可能在一个网络里面。还有另外一个主要原因:如果Internet在一个网络里面,并且假设是以太网。那么Internet上的几十亿个主机都来抢这一个总线。那么,管他什么10M光纤,就算是10MMM光纤都不顶用。这样就出现了网络互连的概念。网络互联,可以让不同的网络自己传递自己的信息。而不干扰其他的网络.。只有某个网络里面的主机要访问另一个网络里面的主机时,才需要跨越网络。
     讲完了互联网的概念,就要开始讲讲IP协议了。帧是在网络里面传播的单位,而IP包则是在互联网里面传播的单位。帧是用物理地址做为门牌号码,而IP包则用IP地址作为门牌号码。IP地址是用4个八位组(4个字节)点分来表示,例:10.1.0.11。
    那么是不是每个主机的IP地址可以随意设定呢?在互联网里面是不行的,这里又两个原因:一个是二义性,另一个是无法实现传递。当IP可以随意设定的时候来看下面一个图:


    主机1如果想要发送数据包给主机3。那么数据包就先发送给路由器1,通过路由器1转发给路由器2,路由器2再发给主机3。这是理想情况,但有个问题。就是路由器1怎么知道把数据包是发给路由器2,而不发给路由器3呢?这里有两种办法:
1. 主机1的IP数据包里面包涵所有到达主机3所经过的路由器IP地址。
2. 路由器1的选路表中包涵要到达主机3所要投递的路由器地址。
这两种办法在小型的局域网中,还是可行的。但是放在Internet中,那将代表Internet的末日到来了。
    为了适应Internet的需要,IP地址有了新的解释。IP地址可分为网络段和主机段。IP的网络可分为A,B,C三类。A类中IP的第一个bit为0,用前8位表示网络号。B类中第一个bit为1,第二个为0,用前16位表示网络号。C类中第一个bit为1,第二个为1,用前24位表示网络号。这样路由器在分析IP地址时就先提出前两位bit,判断出应该提出IP中的多少位来表示网络号,然后根据路由表中网络号对应的另一个路由器的IP地址来发送该数据包。再来看和上面类似的图,不过这次的IP地址是按照网络段和主机段来划分的。


    现在如果主机1要发送数据包给主机2。首先路由器2受到数据包,并分析目的IP地址2.0.0.2,2.0.0.2是个A类地址,第一个点号前面的代表网络号,得到网络号为2。路由器1的路由表中包涵了网络号为2所要发送的路由器2的IP地址。则路由器1把该数据包发送给路由器2。路由器2收到IP数据包,查找目的IP并分析IP的网络号,发现该网络号和自己的网络号相同,则再分析IP地址的全段。发现和主机2的IP地址一致,就把该数据包发给主机2。
    这样,一个数据包的传递就成功了。一切是那么自然。但随着网络的增加(注意是网络的增加,不是主机的增加),又会出现问题。看下图:

在这样的网络中,再来看主机1发送IP数据包给主机2的经过。前几个步骤和上面是一样的,但当数据包到达路由器2后就不同了。路由器2发现已经在本网了,但没有一个和它相连的主机IP号和目的号码一样。这样它就不能再转发了,数据包将被丢掉。那么该怎么办呢?
     一般的做法是把主机2和主机6组成的网络作为路由器2所在网络的一个子网。为路由器4分配一个网络号。但在Internet上IP地址中只有一个网络号,并且这个网络号已经分配路由器2中,哪来另一个网络号?这里又出现了一个新的概念,子网掩码。子网掩码和IP地址一样,由32位组成,用点分发表示。在子网掩码中为1的位表示网络号。在图中,路由器2把子网掩码设置为255.255.0.0。这样,使得在路由器2的网络中,网络号又有了新的解释,它是以第二个点号前面的两个字节表示网络号。那么在路由器2就可以为路由器4分配一个网络地址就是2.1。
     在这里先提个问题,路由器4的子网掩码是不是也必须设置成255.255.0.0呢?这个问题的答案是否定的。看看数据传递的过程就知道了。当路由器2收到发网本网的IP后,再用子网掩码来找到网络号为2.1。然后在路由表中找到网路号2.1所对应的路由器4的IP地址。这样就会把数据包发给路由器4。路由器4收到数据包后,就会遇到一个问题,路由器4的本网地址是2,还是2.1?答案是2。每个路由器的本地网址的设定都是按照IP地址中规定的网络段来设定的。所以当路由器4收到数据包后,首先按照IP地址的网络分类方法提出IP地址为2.1.0.2的网络号2,发现和本地的网络号相同,然后就提出IP地址的全段,在路由表中查到2.1.0.2地址所对应的主机2。这样就把数据包发给了主机2。
     从上个例子中可以得到一个结论:子网掩码并不能增加IP地址的数量,只能增加网络的数量。增加网络的数量优点是明显的,它可以降低网络的负荷并且使得组网更加灵活。但它又有一个很大的缺点:降低了IP地址的可移动性。网络越多,IP地址的可移动性就越差。你不可能把属于一个网络里面的主机移动到另一个网络里面,并且不改变它的IP地址。如果这样做了,那么就永远都接收不到要发给自己的数据包。
    还有一个只得一提的问题就是共享IP上网。在Internet中不仅仅只有IP的网络号可以代表一个网络,一个IP地址其实也可以代表一个网络(只不过不是很合法)。在现实生活中,经常都遇到这样的情况。一个ADSL,连上几家用户,共享上网。这里面用到了一个NAT(网络地址转换)技术。这个技术把数据的传递分为两个部分,一个是数据的向内传,另一个是数据的向外传。


    当主机1发送一个数据包给服务器时,服务器首先检查目的IP网络段是不是内部网络。如果是就不向外部发送,直接在内部网络查找IP地址进行发送。如果部是外部网络,就向电信发送数据包,但这时要做2个操作:1,在NAT转换表中填入一个记录。NAT转换表中有两列:一列是内Internet上的主机IP地址,另一列是内网的主机IP地址。把主机1的请求的IP填入前一列,把主机1的IP填入后一列。 2,改变IP数据包中源IP的地址,把外部IP地址(219.139.206.157)填入数据包中源IP地址部分。然后发出。
    当数据外网的数据传进来时,服务器先检查IP数据包是从哪里发进来的。然后对照NAT转换表找到网内目的IP的地址。再把目的IP的地址填入IP数据包中,发给目的主机。NAT原理就是这样。但其实现并不这么简单,包涵许多控制来维护网络的突发性意外。
    这是我对IP协议的一个小结,讲的都是我原来比较困惑的地方。把它放到网络上,希望对一些朋友有点帮助。另外,如果其中有错误的地方,也可以提出来,大家共同进步。下次再写第二篇,小结TCP协议和它对上层应用提供的服务。

本文地址:http://com.8s8s.com/it/it34165.htm