声明:本博客参考《TCP/IP详解卷一:协议》
1.背景介绍
TCP/IP起源于6 0年代末美国政府资助的一个分组交换网络研究项目,到 9 0年代已发展成为计算机之间最常应用的组网形式。它是一个真正的开放系统,因为协议族的定义及其多种实现可以不用花钱或花很少的钱就可以公开地得到。它成为被称作“全球互联网”或“因特网(Internet)”的基础。
2.网络分层
上面左图,是通常认为的TCP/IP四层协议系统,在该系统中未考虑物理层。右图展示了OSI七层模型与TCP/IP协议族模型之间的关系。下面详细介绍每一层的功能:
(1)链路层:有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。
(2)网络层:有时也称作互联网层,处理分组在网络中的活动,例如分组的选路。常见的协议有IP协议(网际协议),ICMP协议(Internet互联网控制报文协议),以及IGMP协议(Internet组管理协议)。
(3)运输层主要为两台主机上的应用程序提供端到端的通信。在TCP/IP协议族中,主要有两个不同的协议:TCP(传输控制协议)、UDP(用户数据协议)。其中UDP速度快,不安全。TCP速度慢,使命必达。
(4) 应用层负责处理特定的应用程序细节。主要的协议有:Telnet远程登陆、FTP文件传输协议、SMTP简单邮件传输协议、SNMP简单网络管理协议。
使用较多的都是C/S(client/server)模型,这里就拿C/S模型来举例说明,协议分层的意义
①单网络(局域网LAN)
关于图片的说明
1>这是一个FTP客户端程序和另一个FTP服务器程序的示例。
2>我们注意到应用程序通常是一个用户进程,而下三层则一般在(操作系统)内核中执行。但这不是必须的,要依照操作系统而定。
3>每一帧数据的传输的顺序都是(假定是从客户端到服务器的数据):应用层->运输层->网络层->链路层->链路层->网络层->运输层->应用层。
②互联网(广域网WAN)
相比于上图,本图加了一个路由器。构造互连网最简单的方法是把两个或多个网络通过路由器进行连接。是一种特殊的用于网络互连的硬件盒。路由器的好处是为不同类型的物理网络提供连接:以太网、令牌环网、点对点的链接和FDDI(光纤分布式数据接口)等等。
连接网络的另一个途径是使用网桥。网桥是在链路层上对网络进行互连,而路由器则是在网络层上对网络进行互连。网桥使得多个局域网(LAN)组合在一起,这样对上层来说就好像是一个局域网。TCP /IP倾向于使用路由器而不是网桥来连接网络,因此我们将着重介绍路由器。
互联网的目的之一是在应用程序中隐藏所有的物理细节。虽然这一点在上图由两个网络组成的互联网中并不很明显,但是应用层不能关心(也不关心)一台主机是在以太网上,而另一台主机是在令牌环网上,它们通过路由器进行互连。随着增加不同类型的物理网络,可能会有2 0个路由器,但应用层仍然是一样的。物理细节的隐藏使得互联网功能非常强大,也非常有用。
在TCP/IP协议族中,不同的协议在不同的层,下图简单说明了这一点。
3.IP地址
互联网上的每个接口必须有一个唯一的Internet地址(也称作IP地址)。IP地址长32 bit(IPv4)。下图展示了五类不同的IP地址
需要注意的是多接口主机具有多个IP地址,其中每个接口都对应一个IP地址。
说到IP地址就不得不提到域名,我们平时访问网络都是使用域名,没有人会去记住晦涩的IP地址,这就要归功于DNS(域名系统)的功劳了,DNS是一个分布式的数据库。我在后面的博客中会进行介绍。
4.数据封装和分用
数据通过互联网传输的时候不可能是光秃秃的不加标识,如果这样数据就会乱。所以数据在发送的时候需要进行封装,加上特定标识。在数据使用的时候再去掉标识,去掉标识的过程就叫做分用。
用户数据经过各层都会打上标识,添加上头部。其中IP首部会标识数据的协议类型:TCP、UDP、ICMP、IGMP中的一种。 IP在首部中存入一个长度为8 b i t的数值,称作协议域。 1表示为ICMP协议,2表示为IGMP协议,6表示为TCP协议,17表示为UDP协议。类似地,许多应用程序都可以使用 T C P或U D P来传送数据。运输层协议在生成报文首部时要存入一个应用程序的标识符。 T C P和U D P都用一个1 6 b i t的端口号来表示不同的应用程序。T C P和U D P把源端口号和目的端口号分别存入报文首部中。网络接口分别要发送和接收 I P、A R P和R A R P数据,因此也必须在以太网的帧首部中加入某种形式的标识,以指明生成数据的网络层协议。为此,以太网的帧首部也有一个 16 bit的帧类型域。
上图展示了数据的分用,这是封装的一个逆过程。
5.端口号
前面已经指出过,TCP和UDP采用16 bit的端口号来识别应用程序。服务器一般都是通过知名端口号来识别的。例如:FTP:21(TCP),Telnet:23(TCP),TFTP:69(UDP)。注意TCP和UDP端口是独立的,即一个端口TCP使用了,UDP仍然可以用。任何T C P / I P实现所提供的服务都用知名的 1~1 0 2 3之间的端口号。这些知名端口号由Intenet号分配机构来管理。大于1024的端口可以让用户来使用。但是这种规则只是对大多数操作系统而言,也会有例外。一些服务进程使用端口示例: