售前电话
135-3656-7657
售前电话 : 135-3656-7657
由于互联网各个组成网络的特性有很大差异,要在网络层提供面向连接服务就需要很复杂的互通能力和信令协议,为了简化网络互联实现,Internet在网络层只提供简单的无连接服务,而将保证可靠传送的任务交给了运输层的TCP。TCP的设计目的就是动态适配互联网络的变化特性,在不可靠的网络上提供一条可靠的端到端的传输通道。这条通道就是TCP连接。
TCP连接是点到点的双向连接,对应源主机和目的主机应用进程之间的逻辑联系。它不支持多播和广播。任一方发起建立连接后,双方都可以在此连接上向对端发送信息。信息发送为双工方式,也就是说,双向数据流发送互相独立,在发送数据的报文中也可捎带传送控制信息,以提高带宽利用率。
作为一个点到点连接,TCP连接应该由二端的端点地址对来标识:{端点1地址,端点2地址}用分层协议结构中的服务接人点(SAP)概念来描述,端点地址应为:(主机地址,NSAP,TSAP) 其中,主机地址就是IP地址,NSAP为网络层SAP,也就是TCP协议,已在IP数据报头部标明,TSAP指明是哪一个应用进程,在TCP中将其称为端口(Port),因此,一个TCP连接的标识应为:(IP地址1,端口l),(IP地址2,端口2),每个端口可用一个整数表示,称为端口号,TCP协议规定端口号可占16比特。原则上,一个应用进程和端口号没有固定的对应关系。当一个进程创建后需要和远端建立联系或准备接受远端的联系请求时,该进程可通过系统调用请求操作系统为其随机分配一个端口号,其后即用该端口号代表该进程。当通信关系结束时,就将该端口号归还系统。这称为端口动态绑定技术。但随之而来的一个问题就是源主机如何才能获知目的进程的端口号。
为了解决这一问题,ARPANET专门提出了一个初始连接协议。考虑到计算机网络应用采用的基本上都是客户机/服务器工作模式,之所以要建立TCP连接一般是客户机需要从服务器获得某项信息,进行某项运算或共享某项资源,因此TCP连接建立也采用客户机/服务器模式,发起连接请求的主机叫客户,接受连接请求的则是服务器。初始连接协议要求所有服务器主机装备一个后台进程,叫进程服务器。该进程随系统一起启动,常驻内存,并和一个固定的端口号绑定(静态绑定),该端口号为互联网中的公开号码,称为“公认端口”(WE1l-knownport)。客户按服务器的IP地址和此公认端口发出连接请求,由进程服务器负责建立一条临时连接。然后,客户通过此临时连接向进程服务器发送一个报文,告之它希望得到的服务,进程服务器负责创建一个运行指定服务程序的进程,并给它分配一个端口号。最后,进程服务器向客户告之该端口号,并释放临时连接。其后,客户即可通过该端口号和指定服务程序建立连接,获得所需要的服务。
初始连接协议对于那些可以按需随时创建的服务进程是有效的,但是有许多情况,服务进程必须独立于进程服务器存在,例如文件服务器必须在专门的硬件上运行,不能在某客户需要用到时才创建。为此,又提出了一种名字服务器方案。该服务器独立设置,也与一个公认端口绑定。每当一个新的服务进程创建时,必须向名字服务器登记,告之其端口号。客户要和该服务进程建立联系时就向名字服务器查询,获得该进程的端点地址。名字服务器的作用犹如电话网中的查号台,因此也称为目录服务器。
TCP协议结合静态绑定和动态绑定技术,将端口分为两类,一类为公认端口,固定分配给一些标准的服务进程,另一类为自由端口,可由操作系统自行分配。客户进程要与远程服务进程通信之前,先申请一个自由端口,然后根据公认端口和远程服务器建立联系。不常用的服务进程可通过名字服务器建立联系。
TCP规定小于256的端口号为公认端口号,例如,FIP为21,TE1NEr为23等。公认端口分配表可见RFC1700。
从协议角度说,端口是运输层的服务接人点;从软件结构来说,端口对应为应用程序和通信程序之间的接口,包括一定容量的数据缓冲区和数据结构,端口操作类似于一般的1/0操作,可以用读写原语对其询问。需要指出的是,TCP/IP并没有对应用程序接口标准化。实际中,应用最为广泛的是UNIX关于TCP的插口(SOCKEf)原语。它包括8个原语,如表2.3所示。
服务器侧启动后,先调用SOCKEf原语,请求在TCP实体中分配缓冲区空间,执行后返回一个文件描述符,其方式和open调用相同;然后再用BIND原语绑定端口号,多为公认端口号;接着调用USTEN,分配队列,以便处理数个客户同时请求建立连接的情况;最后调用ACCF.Pf,使进程挂起,等待连接请求到来。当客户发来连接请求报文时,TCP实体创建一个和原先插口特性相同的新的插口,并返回一个文件描述符,服务器创建一个进程或线程来处理该新插口上的连接,然后退回等待原接口上的下一个连接。