一、TCP概述
1、TCP的由来
传输控制协议(TCP,Transmission Control Protocol)是互联网(Internet)上的第一个可靠的传输协议。我们知道,互联网(Internet)最早源自于美国国防部(称之为DARPA INTERNET)。在互联网(Internet)民用后,互联网工程任务组 (IETF)在其相关国防部标准的TCP等标准的基础上编制了传输控制协议(TCP),即1980年1月发布的RFC 761。后在1981年9月进行了第一次更新,被发布为RFC 793,并代替了RFC 761。RFC 793描述传输控制协议要执行的功能、实现该协议的程序、以及它与需要其服务的程序或用户之间的接口。
欲更多了解IETF及RFC文档情况介绍的请进入。
2、TCP简述
TCP协议是一个端对端、面向连接的协议,旨在支持多网络的协议分层层次结构的应用;其目的是在分组交换计算机通信网络中,特别是在这种网络的互联系统中,作为主机之间高度可靠的主机对主机协议使用。使得在“尽力而为”的互联网上实现可靠的数据传输,包括信令信息。
TCP符合一个分层的协议架构,就在一个基本的互联网协议(IP)之上,如下图1-2所示。IP为TCP提供了一种方式来发送和接收包含在互联网数据报“信封”中的可变长度的信息段。TCP提供了一种在不同网络中因特网数据报的源和目标的寻址方法。IP协议还处理通过多个网络和互连网关实现传输和交付所需的TCP段的任何碎片或重组。IP协议还携带有关TCP段的优先级、安全分类和划分的信息,因此这些信息可以跨多个网络进行端到端通信。
图 1-2:互联网的协议分层
然而,TCP该协议弥补了IP协议(RFC 760)的某些不足之处,这是因为:
首先,IP只解决了不同网络主机的通信问题,但该协议不能检测IP数据报的丢失。而TCP能够保证在IP数据报丢失时进行重发,能够删去重复收到的IP数据报,还能保证精确地按原发送端的发送顺序重新组装数据。
其次,IP只负责按目的IP地址传送数据报,但不能区别属于同一应用报文的一组IP数据报以及所传送的应用报文的性质。而TCP能区别属于同一应用报文的一组IP数据报,并能鉴别应用报文的性质。以使某些具有4层协议功能的高端路由器可以对IP数据报进行流量、优先级、安全管理、负荷分配、复用等智能控制。
二、TCP的相关功能
1、TCP保证传输可靠性的功能
TCP是面向连接的。所谓连接,是指在进行通信之前,通信双方必须建立连接才能进行通信,而在通信结束后,终止其连接。还有一种无连接的,指双方在进行通信之前,不需要建立好连接。IP是面向无连接的协议,而TCP面向连接,故TCP的特点是具有高可靠性。
TCP面向连接主要体现在:发起连接的源主机内有一个程序发出连接请求;在目的主机内,有一个程序接受该连接请求,于是建立了源主机与目的主机的连接。建立连接后,两台主机即可互相发送数据。最后,有一方发出终止通信的请求,待对方确认后,双方结束通信。
当目的主机接收到由源主机向目的主机发送的IP数据报后,目的主机需要向源主机回送一个确认消息。这是依靠目的主机的TCP完成的。TCP中还有一个重传记时器(RTO),当源主机发送IP数据报时就开始记时,如在超时之前收到确认信号,则记时器回零。如果记时器超时,则说明该IP数据报已丢失,源主机进行重传。对重传记时器,确定合适的记时时长是十分重要的,它由往返时间来决定。TCP能根据不同情况自动调节记时时长。
需要说明的是,TCP所建立的连接是端到端的连接,即源主机与目的主机间的连接Internet中的转接节点(路由器)对TCP段透明传输。
TCP的主要功能是保证端到端可靠地传输数据信息,为保证端到端传输的可靠性,TCP主要采取了如下表2-1所列的5项技术与措施。
表 2-1:TCP保证可靠性连接所具有的技术与措施
总之,IP不提供差错报告和差错纠正机制,而TCP向应用层提供了面向连接的服务,确保了网络上所传送的数据报完整、正确、可靠的接收。一旦数据有损伤或丢失,则由TCP负责重传,而应用层不参与解决。
2、TCP提供部分应用层信息的功能
IP只解决了单个数据报的传输问题,而在某些情况下,需要在传输过程中对应用报文数据流进行控制。TCP携带了部分应用层信息,能够区别同一报文数据流的一组IP数据报及其性质。
TCP之上是应用层协议,如FTP、SMTP、Telnet等,最终是依靠它们实现主机间的通信的。TCP对这些应用层协议规定了整数标志符,称为端口号,TCP端口号对应的应用协议这里搜集了9种详见下表2-2。这些规定的端口号成为保留端口,其值在0~1023范围内,从0~255都是预先定义的(不能由网络管理员定义),而任何大于255的端口号可以由网络管理员来定义。此外还有自由端口号,供个人程序使用,或用它来区分两主机间相同应用层协议的多个通信,即两台主机间复用多个用户会话连接。
表 2-2:常用的TCP端口号
插口号由主机的IP地址和端口号组成,正在进行通信的每台主机的每个用户会话连接,都有一个插口号。插口号对整个Internet是唯一的,一对插口号唯一地标志了每个端口的连接,其中:
发端插口号 = 源主机IP地址+源端口号;
收端插口号 = 目的主机IP地址+目的端口号;
利用插口号可在目的主机中区分不同源主机对同一目的主机的相同端口号的多个用户会话连接。在TCP段的头部各域中具有“码位”一项。其中SYN码位为应用数据流的开始位,SYN置“1”表示该IP数据报为某一应用报文的第一份数据报。而码位中的FIN码位为应用数据流的结束位。FIN置“1”表示此时数据报为上述应用报文的最后一份数据报。故可利用SYN/FIN两个码位来确定某一应用报文(或某一应用数据流)的开始与结束。
综上所述,我们可利用端口号和SYN/FIN码位来区分应用数据流,并判断其性质,从而使具有四层功能的高端路由器具有某些对应用数据流的控制功能。
三、TCP段格式
TCP传输数据的基本单位是段,每段又可分为段头部与数据区两大部分,TCP段格式如下图3所示;段格式中的有关各部分的含义详见下表3-1。其中“码位”一项有6种控制,在置“1”时的含义详见下表3-2。
图 3:TCP段格式
表 3-1:TCP段格式中的有关各部分的含义
表 3-2:TCP段格式中“码位”的具体内容及含义
四、总述
上述仅对传输控制协议(TCP)给出了一些简要的介绍,若要详细了解该协议具体内容的请查阅下附件。
附件:RFC 793(09/1981)《Transmission Control Protocol》
综上,TCP的主要目的是提供可靠的数据进程对之间的安全逻辑电路或连接服务。在不太可靠的互联网通讯系统上提供这项服务,TCP需要提供如下表4所述的关键操作。
表 4:TCP需要提供的关键操作
然而,随着互联网技术的发展,越来越多的应用发现TCP限制太大。 因此,需要开发一种新的互联网传输协议来绕过这些限制,于是,IETF就又推出了流量控制传输协议(SCTP,Stream Control Transmission Protocol),特别适用于在IP网中传送公用交换电话网(PSTN)的信令消息和IP网内的信令消息。
欲进一步了解流量控制传输协议(SCTP)介绍的请进入。