的问题,那就发送RST信号然后进入CLOSED状态。
RST过程
除了SYN-SENT状态外的其它状态中,所有的RST数据段可以通过检查SEQ域查明。如果序
列号在接收窗口中,RST是有效的。当连接处于SYN-SENT状态时,如果ACK域确认SYN,那
么RST也是合法的。
RST的接收方首先确认它的合法性,然后进行状态转换。如果接收方处于LISTEN状态,它
就忽略RST包。如果接收方处于SYN-RECEIVED状态,而且以前处于LISTEN状态,接收方返
回LISTEN状态,否则接收方关闭连接进入CLOSED状态。当接收方处于其它状态时,直接
关闭连接回到CLOSED状态。
3.5. 关闭连接
CLOSE是一个操作,它的意思就是“本方已经有数据发送”。由于是全双工的,所以会造
成一些麻烦,因为接收方对于处理接收方的连接有点麻烦。我们以一种简单的方式对待
CLOSE,发送CLOSE的一方在接收到对方的CLOSED之前,还要继续接收数据。因此程序可
以在一个CLOSE之后初始化几个SEND,然后开始RECEIVE,直到接收到对方的CLOSED而RE
CEIVE失败为止。我们假设TCP可以通知用户连接关闭,即使仍在RECEIVE也可以,这样用
户就可以正常关闭了。这样,TCP可以在连接关闭前可靠地发送数据。下面列举了三种基
本情况:
情况1:本地用户关闭
这种情况下,可以建立一个FIN段放入发送队列。TCP不再接收用户的SEND指令,TCP进入
FIN-WAIT-1状态。RECEIVE在这种状态下是允许的。所有数据段和FIN在未接收到确认以
前会一直发送。当另一个TCP确认FIN,并发送自己的FIN后,本地的TCP可以确认这个FI
N了。请注意,TCP也可以在确认FIN时不返回自己的FIN,直到用户关闭连接时再返回自
己的FIN。
情况2:TCP从网络上接收到一个FIN
如果在没有请求的情况下收到FIN,TCP可以返回ACK并通知用户连接已经关闭。用户可以
以CLOSE响应,TCP在发送完剩下的数据后发送自己的FIN,然后TCP等待对这个FIN的确认
,在接收到后,它关闭连接。如果确认超时,可以关闭连接并通知用户完事。
情况3:双方同时关闭
双方同时关闭会导致交换FIN。双方会在收到对自己FIN的确认后关闭连接。
3.6. 优先和安全
TCP的操作必须在两个优先级相同的端口间进行。TCP使用的优先和安全参数在IP协议中
定义。我们这里所说的安全/间隔就是指的IP中定义的优先,用户组和处理规定。如果不
符合则发送RST。这些内容请大家看上一节中的叙述。TCP在操作过程中也会检查接收数
据段的优先级,还可以在操作中提高优先级。虽然运行在无安全环境中,主机也必须能
够处理安全参数。
3.7. 数据通信
建立了连接以后就是传送数据了,TCP通过重新传送保证每个数据段到达对方,因为有了
重新传送,所以对方可能接收到两个相同的包,那就必须根据内部的序列号判断哪个数
据段是可以接收的。发送方通过使用SND.NXT跟踪下一个要发送的数据段,而接收方则跟
踪RCV.NXT来知道下一个要接收的数据段。发送方要还未确认的最老的序列号保存于SND
.UNA。
当发送方形成数据段并发送它后SND.NXT增大;当接收方接收到数据段后RCV.NXT增大并
发送确认;当发送方接收到确认后SND.UNA增大。它们三者在不同的时间增大,这是因为
传送时延造成的。而增大多少则由数据段中数据的大小决定。注意:连接进入ESTABLIS
HED状态后,所有的段必须包括当前的确认信息。而CLOSE用户操作的性质类型于推操作
,这和在接收到的数据段中的FIN标记一样。
重传超时
因为网络中有不类型的网络,而使用TCP的范围又很广,因此重传超时必须动态决定。下
面给出一个例子,通过例子可以看出确定重传超时的过程。下面有两个变量说明时延的
问题,一个是环路时间(RTT),它是由一个序列码得到的,这个序列码在发送时给出,
在接收到确认时被覆盖;另一个平滑环路时间(SRTT):
SRTT = ( ALPHA * SRTT ) ((1-ALPHA) * RTT)
通过上面的式子,可以得到重传超时(RTO):
RTO = min[UBOUND,max[LBOUND,(BETA*SRTT)]]
其中UBOUND是超时的上界(如1分钟),LBOUND是超时的下界(如1秒钟),ALPHA是平滑
因子(如0.8到0.9),BETA是延时变量(如1.3到2.0)。
传送紧急消息
TCP的紧急机制是允许发送者使接收者接收一些紧急消息,并让接收方在接收到这一消息
后立刻通知用户。这种机制是在数据流是加入一个点,指出这是紧急数据的结束点,当
接收方要接收到这个点之前,它会通知用户进入紧急状态,在接收到这个点的数据后,
它会通知用户进入通常状态。如果这个紧急点在用户进入紧急状态时更新,这个更新必
须对用户透明。
应用一个紧急域的方法可以达到上述目的,而URG控制标记则指明紧急域是否被使用,而
且在数据段中必须加入指示紧急点的序列号,如果没有这个标记则说明没有紧急点。如
果需要发送紧急数据,发送方必须起码发送一个字节。
本新闻共2页,当前在第1页 1 2
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




