传输控制协议(Transmission Control Protocol, TCP)
传输把持协议(Transmission Control Protocol, TCP)
TCP协议主为了在主机间实现高可靠性的包交换传输协议。本文将描写协议标准和实现的一些方法。因为电脑网络在现代社会中已经是不可缺乏的了,TCP协议重要在网络不可靠的时候完成通信,对军方可能特别有用,但是对于政府和商用部门也实用。TCP是面向连接的端到端的可靠协议。它支撑多种网络利用程序。TCP对下层服务没有多少恳求,它假定下层只能供给不可靠的数据报服务,它可以在多种硬件构成的网络上运行。下面的图是TCP在层次式结构中的地位,它的下层是IP协议,TCP可以根据IP协议供给的服务传送大小不定的数据,IP协议负责对数据进行分段,重组,在多种网络中传送。
TCP的上面就是利用程序,下面是IP协议,上层接口包含一系列类似于操作系统中断的调用。对于上层利用程序来说,TCP应当能够异步传送数据。下层接口我们假定为IP协议接口。为了在并不可靠的网络上实现面向连接的可靠的传送数据,TCP必须解决可靠性,流量把持的问题,必须能够为上层利用程序供给多个接口,同时为多个利用程序供给数据,同时TCP必须解决连接问题,这样TCP才干称得上是面向连接的,最后,TCP也必须能够解决通信安全性的问题。
网络环境包含由网关(或其它设备)连接的网络,网络可以是局域网也可以是一些城域网或广域网,但无论它们是什么,它们必须是基于包交换的。主机上不同的协议有不同的端口号,一对过程通过这个端口号进行通信。这个通信不包含电脑内的I/O操作,只包含在网络上进行的操作。网络上的电脑被看作包传送的源和目标结点。特别应当注意的是:电脑中的不同过程可能同时进行通信,这时它们会用端口号进行差别,不会把发向A过程的数据由B过程吸收的。
过程为了传送数据会调用TCP,将数据和相应的参数传送给TCP,于是TCP会将数据传送到目标TCP那里,当然这是通过将TCP包打包在IP包内在网络上传送达到的。吸收方TCP在吸收到数据后会通信上层利用程序,TCP会保证吸收数据次序的正确性。虽然下层协议可能不会保证次序是正确的。这里需要阐明的是网关在吸收到这个包后,会将包解开,看看是不是已经到目标地了,如果没有到,应当走什么路由达到目标地,在决定后,网关会根据下一个网络内的协议情况再次将TCP包打包传送,如果需要,还要把这个包再次分成几段再传送。这个落地检查的过程是一个耗时的过程。从上面,我们可以看出TCP传送的基础过程,当然具体过程可能要复杂得多。
在实现TCP的主机上,TCP可以被看成是一个模块,和文件系统差别不大,TCP也可以调用一些操作系统的功效,TCP不直接和网络打交道,把持网络的任务由专门的设备驱动模块完成。TCP只是调用IP接口,IP向TCP供给所有TCP需要的服务。通过下图我们可以更明确地看到TCP协议的结构。
上面已经说过了,TCP连接是可靠的,而且保证了传送数据包的次序,保证次序是用一个序号来保证的。响应包内也包含一个序列号,表现吸收方筹备好这个序号的包。在TCP传送一个数据包时,它同时把这个数据包放入重发队列中,同时启动记数器,如果收到了关于这个包的确认信息,将此包从队列中删除,如果计时超时则需要重新发送此包。请注意,从TCP返回的确认信息并不保证最终吸收者吸收到数据,这个责任由吸收方负责。
每个用于传送TCP的通道都有一个端口标记,因为这个标记是由每个TCP终端断定的,因此TCP可能不唯一,为了保证这个数值的唯一,要利用网络地址和端口号的组合达到唯一标识的目标,我们称这个为了套接字(Socket),一个连接由连接两端的套接字标识,本地的套接字可能和不同的外部套接字通信,这种通信是全双工的。
通过向本地端口发送OPEN命令及外部套接字参数建立连接,TCP返回一个标记这个连接的名称,以后如果用户需要利用这个名称标记这个连接。为了保存这个连接的信息,我们假设有一个称为传输把持块(Transmission Control Block,TCB)的东西来保存。OPEN命令还指定这个连接的建立是主动恳求还是被动等候恳求。下面我们要涉及具体的功效了,TCP段以internet数据报的情势传送。IP包头传送不同的信息域,包含源地址和目标地址。TCP头跟在internet包头后面,供给了一些专用于TCP协议的信息。下图是TCP包头格式图:
源端口:16位;
目标端口:16位
序列码:32位,当SYN涌现,序列码实际上是初始序列码(ISN),而第一个数据字节是ISN+1;
确认码:32位,如果设置了ACK把持位,这个值表现一个筹备吸收的包的序列码;
数据偏移量:4位,教唆何处数据开始;
保存:6位,这些位必须是0;
把持位:6位;
窗口:16位;
校验位:16位;
优先指针:16位,指向后面是优先数据的字节;
选项:长度不定;但长度必须以字节记;选项的具体内容我们联合具体命令来看;
填充:不定长,填充的内容必须为0,它是为了保证包头的联合和数据的开始处偏移量能够被32整除;
我们前面已经说过有一个TCB的东西了,TCB里有存储了包含发送方,吸收方的套接字,用户的发送和吸收的缓冲区指针等变量。除了这些还有一些变量和发送吸收序列号有关:
发送序列变量
SND.UNA - 发送未确认
SND.NXT - 发送下一个
SND.WND - 发送窗口
SND.UP - 发送优先指针
SND.WL1 - 用于最后窗口更新的段序列号
SND.WL2 - 用于最后窗口更新的段确认号
ISS - 初始发送序列号
吸收序列号
RCV.NXT - 吸收下一个
RCV.WND - 吸收下一个
RCV.UP - 吸收优先指针
IRS - 初始吸收序列号
下图会援助您懂得发送序列变量间的关系:
![]() |
![]() |
当前段变量
SEG.SEQ - 段序列号
SEG.ACK - 段确认标记
SEG.LEN - 段长
SEG.WND - 段窗口
SEG.UP - 段紧急指针
SEG.PRC - 段优先级
连接过程是通过一系列状态表现的,这些状态有:LISTEN,SYN-SENT,SYN-RECEIVED,ESTABLISHED,FIN-WAIT-1,FIN-WAIT-2,CLOSE-WAIT,CLOSING,LAST-ACK,TIME-WAIT和 CLOSED。CLOSED表现没有连接,各个状态的意义如下:
LISTEN - 侦听来自远方TCP端口的连接恳求;
SYN-SENT - 在发送连接恳求后等候匹配的连接恳求;
SYN-RECEIVED - 在收到和发送一个连接恳求后等候对连接恳求的确认;
ESTABLISHED - 代表一个打开的连接,数据可以传送给用户;
FIN-WAIT-1 - 等候远程TCP的连接中断恳求,或先前的连接中断恳求的确认;
FIN-WAIT-2 - 从远程TCP等候连接中断恳求;
CLOSE-WAIT - 等候从本地用户发来的连接中断恳求;
CLOSING - 等候远程TCP对连接中断的确认;
LAST-ACK - 等候本来发向远程TCP的连接中断恳求的确认;
TIME-WAIT - 等候足够的时间以确保远程TCP吸收到连接中断恳求的确认;
CLOSED - 没有任何连接状态;
TCP连接过程是状态的转换,促使产生状态转换的是用户调用:OPEN,SEND,RECEIVE,CLOSE,ABORT和STATUS;传送过来的数据段,特别那些包含以下标记的数据段SYN,ACK,RST和FIN;还有超时,上面所说的都会时TCP状态产生变更。
下面的图表现了TCP状态的转换,但这图中没有包含弊病的情况和弊病处理,不要把这幅图看成是总阐明了。
本消息共4页,当前在第1页 1 2 3 4