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

TCP的连接建立(三次握手)

2017-06-16 21:50 381 查看
TCP是面向连接的协议。运输连接是用来传送TCP报文的。TCP运输连接的家里和释放是每一次面向连接的通信中必不可少的过程。因此,运输连接就有三个阶段,即:连接建立、数据传输和连接释放。

TCP位于传输层,提供可靠的字节流服务。

所谓字节流服务(Byte Stream Service)是指,为了方便传输,将大块数据分割成以报文段(segment)为单位的数据包进行管理,而可靠的传输服务是指,能够把数据准确可靠的传给对方。一言以蔽之,TCP协议为了更容易传送大数据才把数据分割,而且TCP协议能够确认数据最终是否发送达到对方。

为了准确无误地将数据送给对方,TCP协议采用三次握手(three-way handshaking)策略。用TCP协议把数据包发送出去后,TCP不会对传输后的情况置之不理,它一定会向对方确认是否成功送达。握手过程中采用TCP的标志(flag)—-SYN(synchronize)和ACK(acknowledgement)



请注意:发送端A主动打开连接,而B是被动打开连接。

三次握手传送的内容:

第一次

第一次握手:建立连接时,客户端A向服务端B发送请求报文段,这时首部中的同步位SYN =1,同时选择一个初始序号seq= x.TCP规定SYN=1报文段不能携带数据,但是要消耗一个序号。这时,TCP客户进程进入SYN-SENT(同步已发送)状态,等待服务器确认。

第二次

第二次握手:服务器收到请求报文后,如同意连接,则向A发送确认,同时自己也发送一个确认报文段,确认报文段中SYN和ACK都置1,确认号ack = x+1,同时自己也为自己选择一个初始序号seq =y。注意,这个报文段也不能携带数据,但同样要消耗掉一个序号。这时TCP服务器进程进入SYN-RCVD(同步收到)状态。

第三次

第三次握手:客户端A收到B的确认后,还要向B给出确认报文段。确认报文段的ACK=1,确认号ack =y+1,而自己的序号seq=x+1.此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

完成三次握手,客户端与服务器开始传送数据。

为什么客户端A还要发送一次确认呢?主要是为了防止已失效的连接请求报文段突然又传送到了服务端B,因而产生错误。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息