1. 前言
本文用于介绍TCP/IP协议的最基本内容,十分简单,也十分基本,如果希望了解详细的内容,请参阅其它资料,这只是给初学者用的。
2. TCP/IP介绍
TCP/IP通常指的是关于TCP和IP的任何东西,它是一个统称,它既可以包括其它协议,其它应用程序,还可以包括网络介质。
2.1 基本结构
为了理解这个技术,最好称理解下图:
这个结构存在于Internet中计算机之中,它决定了计算机在网络上的动作。
2.2 名词
数据块的名称会因为它处于不同的协议栈而不同。这里给出一个总结:在以太网时,它称为一个以太网帧,在IP上时,它称为IP包,如果数据在IP和UPD之间一般称为UDP数据报,而数据如果在IP和TCP之间,则称为TCP段(或消息),而数据在应用程序中时,则称为应用程序消息。这种定义不是绝对的,不同的文章会有不同的说法。
2.3 数据流
数据流从应用程序流向TCP或UDP,我们通常知道的FTP是应用TCP协议的,而SNMP协议却是使用UDP协议的。数据由不同协议模块流向同一个以太网适配器。由适配器将数据传送到网络介质上去。上面的过程在接收方反向发生。
以太帧传送到ARP或IP模块中,而以太帧中的数据决定此数据是由IP还是由ARP处理。如果是供IP处理的包,则由IP模块直接传送给TCP或UPD,具体传送给谁这由IP包头决定。而UDP包内的数据决定了应该由UPD协议上层的哪一个应用程序接收这个数据,这一点和TCP是一致的。数据在从应用程序下传到网络时,过程比较简单,各层把在数据上加入自己的包头信息,然后传送给下一层就行了。虽然Internet支持多种网络介质,但是一般我们都拿以太网范例。这里我们需要记住的是以太地址是唯一的,全球唯一的。计算机同时也拥有一个四个字节的IP地址,这个地址用于标记IP模块的地址,但对于Internet来说,IP地址不见得是唯一的。一台运行着的计算机通常知道自己的IP地址和以太地址。
2.4 两个网络接口
下图中一台计算机连接了两个以太网。
请注意:上图中的计算机拥有两个IP地址和以太地址。这时IP模块将对应于多个物理适配器。
多个IP模块对应多个物理适配器时,情况要复杂一些。
上图说明了IP转发的过程,专用于转发IP包的计算机我们称为IP路由器。从上图中我们可以看出,IP转发的时候根本不需要TCP和UDP,所以有些IP路由器的实现中根本没有TCP和UPD模块。
2.5 IP创建信号逻辑网络
数据在从应用程序向网络介质传送的过程中,被各种协议加上包头,而由网络介质向应用程序传送时,这些加入的包头被一个个取消,而IP层加入的信息构成了一个逻辑网络,这个逻辑网络是相对于多个物理网络而言的。多个物理网络相互连接,就是我们现在经常听到的Internet的由来。
2.6 物理网络独立性
IP将下层的网络结构对上层的应用程序隐藏起来,如果您发明了一种新的网络,您只需要实现一种驱动程序,让它能够和IP进行通信就可以使您的网络连接入Internet。
2.7 互连性
如果Internet上的两台计算机能够进行通信,我们称它们互连了。我们的计算机一般都具有互连性,因此我们购买的计算机一般都可以在网络上相互通信。
3. Ethernet
下面我们看看以太技术,一个以太帧包括源地址,目的地址,类型域和数据。一个以太地址6个字节,每个以太适配器都有唯一的以太地址,而地址"FF-FF-FF-FF-FF-FF"代表一个广播地址。以太网使用CSMA/CD技术,这个技术使设备共享一条传输介质,某一时刻只能一台设备传送数据,如果两台同时传送就会产生冲突,而解释这种冲突的办法就是两个设备停一会儿(一个随机的时间)再传送数据。
我们可以把以太技术想成许多人在一个黑屋子里说话,如果每次只有一个人说,那么对这个话感兴趣的人就会听到,记录下来,而不感兴趣的人就不管它就是了。如果两个人同时说,两个人就会听到自己在说话的时候还有另外一个人也在说,于是就停下来,过一会儿再说,这样来达到传送消息的目的。这里需要注意的是,屋子里的每个人有一个唯一的名字,这个名字就是以太地址,而如果某个人想对所有人说话,它就应用那个广播地址传送消息就可以了。
4. ARP
ARP是为了解决IP包发出后,目的以太地址如何确定的问题。ARP是用来将IP地址解释为以太地址的协议,这个协议只对由IP传出的数据有用。
4.1 ARP地址翻译表
这个翻译的过程中通过查询一张表进行的,每个机器的IP地址和以太网卡号就在这个表中,如果我想向一个IP地址发送消息,只需要查询一下这张表,知道目的以太地址是什么就可以了。下面就是一张这个的ARP表:
IP地址在机器内部是一个4字节数,而人类的表示是如上表中的表示方法,这种方法称为点为十进制。这种翻译表是必须的,因为IP地址的选择和以太地址的选择是独立进行的。以太地址是生产厂商根据分配给它的地址空间直接烧结在网卡上的。
4.2 经典的翻译过程
在通常网络操作进行时,应用程序发送消息到TCP(或UDP),由TCP(或UDP)传送消息到IP模块,目的IP地址是已知的,在将这个包传送到以太适配器时一定要查找这个翻译表知道目的以太地址是什么。而这时ARP就管用了。
4.3 ARP请示/响应对
但是,ARP表如何从空变得那么充实呢?这是由ARP协议来完成填充工作的,它工作的基本过程是“需时再取”的原则。当ARP不能用于查询以太地址时,会发生下面两件事情:
1. ARP用以太广播地址发送一个以太包到网络上,所有的计算机都会接收到这个包;
2. 将需要发送的IP包放入发送队列中;
发出的那个以太包就象一个问路的人一样,它带有如下信息:“如果您的IP地址和我想找的IP地址一样,请告诉我您的以太地址”,下面是一个ARP请示包的例子:
表2. ARP请示包例子 每台计算机的ARP模块检查自己的IP地址是不是和这个包内的IP地址一致,如果不一致,就什么也不干,如果一致,则返回一个响应,其中包括的信息指出了这个IP地址的以太地址。下面是一个响应包的例子:
表3. ARP响应包例子 这个响应由原来发出请求的计算机接收,ARP就将相应的IP地址和以太地址加入ARP表中,这个过程不断地发生,这个表也就不断地加大了,更新过的ARP表如下图所示:
表4. 更新后的ARP表 这个请求与响应的过程十分迅速,放入队列的IP包现在可以取出发送了,因为所需要的以太地址已经有了,可以发送了。如果没有目的主机,发出的请求就不会有回应,IP层抛弃需要发送的IP包,而上层协议也不清楚是网络断了,还是不存在目的主机,IP层不负责报告错误类型。
5. Internet协议 IP模块是Internet技术的核心,而它的路由技术是它成为核心的基础。了解路由需要也解互连是什么。
5.1 直接路由
下图是一个只有三台计算机的小网络,每台计算机有运行一个TCP/IP协议栈,每个计算机配有以太适配器,每个计算机都被指定一个独立的IP地址。
当A发送IP包到B时,IP包头包括A的IP地址(这是源地址)和A的以太地址(这是源以太地址);同时这个包也包括B的IP地址和以太地址作为目的地址。