| |
TCP三次握手及原理 |
责任编辑:leelee |
| [04-8-18 10:50]
| 作者:佚名
| - 当前段变量 SEG.SEQ : 段序列号 SEG.ACK : 段确认标记 SEG.LEN : 段长 SEG.WND : 段窗口 SEG.UP : 段紧急指针 SEG.PRC : 段优先级 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连接中发送的字节都有一个序列号。因为编了号,所以可以确认它们的收到。对序列号的确认是累积性的。TCP必须进行的序列号比较操作种类包括以下几种: ①决定一些发送了的但未确认的序列号。 ②决定所有的序列号都已经收到了。 ③决定下一个段中应该包括的序列号。 对于发送的数据TCP要接收确认,确认时必须进行的:
SND.UNA = 最老的确认了的序列号。 SND.NXT = 下一个要发送的序列号。 SEG.ACK = 接收TCP的确认,接收TCP期待的下一个序列号。 SEG.SEQ = 一个数据段的第一个序列号。 SEG.LEN = 数据段中包括的字节数。 SEG.SEQ+SEG.LEN-1 = 数据段的最后一个序列号。 如果一个数据段的序列号小于等于确认号的值,那么整个数据段就被确认了。而在接收数据时下面的比较操作是必须的: RCV.NXT = 期待的序列号和接收窗口的最低沿。 RCV.NXT+RCV.WND:1 = 最后一个序列号和接收窗口的最高沿。 SEG.SEQ = 接收到的第一个序列号。 SEG.SEQ+SEG.LEN:1 = 接收到的最后一个序列号.
ad
|