您的位置:首页 > 理论基础 > 计算机网络

TCP状态迁移以及三次握手

2013-10-19 11:43 302 查看
TCP状态转换的图表如下:



1. TCP建立连接三次握手

Client Server

Send SYN(seq==j) ----------> Receive SYN(seq==j)

Receive SYN(seq==k,ACK==j+1) <---------- Send SYN(seq==k,ACK==j+1)

Send ACK(ACK==k+1) ----------> Receive ACK(ACK==k+1)

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),待发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

其中,这三次握手的过程中,包含了下面的这些概念:

1).未连接队列

在TCP建立连接的过程中,服务器会维护一个未连接队列。该队列会为每一个客户端的SYN包(syn==j)开辟一个条目,表示服务器已经收到SYN包,并向客户端发出了确认,正在等待客户端的确认包。这些条目所代表的连接在服务器中处于SYN_RECV状态,当服务器收到客户端ACK时,这些条目被删除,服务器进入ESTABLISHED状态。

2).Backlog参数

这个参数用来表示未连接队列的最大容纳数目。SYA+ACK重传次数。服务器发送完SYN+ACK后,如果没有收到客户端的ACK,服务器进行首次重传。如果等待一段时间后,任然没有收到客户端ACK, 则进行第二次重传。以此类推,如果重传次数超过了系统规定的最大重传次数,系统会将该连接信息从半连接队列中删除。另外,每次重传等待时间不一定相同。

3).半连接存活时间

表示半连接队列的条目存活的最长时间,也即服务器从收到SYN包到确认这个报文无效的最长时间,该时间值是所以重传请求包的最长等待时间总和。也称之为Timeout时间、SYN_RECV存活时间。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: