TCP的连接建立——三报文握手

三报文握手的理解 三报文握手(three way handshake)以前都称为三次握手,其实这是一次握手过程中交换中交换了三个报文,而并不是进行了三次握手。handshake使用的是单数并不是复数,表明只是一次握手。 三报文握手图解 图片1.png 部分概念梳理 1.SYN_SENT SYN_SENT表示请求连接,当你要访问其它的计算机的服务时首先要发个同步信号给该端口,此时状态为SYN_SENT,如果连接成功了就变为ESTABLISHED,此时SYN_SENT状态非常短暂。 2.ACK ACK (Acknowledgement)即是确认字符,在数据通信中,接收站发给发送站的一种传输类控制字符。表示发来的数据已确认接收无误。 3.SYN_RCVD(同步收到) 4.ESTAB_LISHED(已建立连接) 5.传输控制模块TCB 传输控制模块TCB(Transmission Control Block)存储了每一个连接中的一些重要信息。 三报文握手过程详解 一开始,B的PCP服务器进程先创建传输控制模块TCB,准备接受客户进程的连接请求。然后服务器进程就处于LISTEN(收听)状态,等待客户的连接请求。 1.SYN=1,seq=x A的TCP客户进程也是首先创建传输控制模块TCB,然后,在打算建立TCP连接时,向B发出请求报文段,这时首部中的同步位SYN=1,同时选择一个初始序号seq=x。即SYN=1,seq=x。TCP规定,SYN报文段(即SYN=1的报文段)不能携带数据,但要消耗一个序号。这时,TCP客户进程进入SYN_SENT(同步已发送)状态。 2.SYN=1,ACK=1,seq=y,ack=x+1 B收到连接请求报文段后,如同意建立连接,则向A发送确认。在确认报文段中应把SYN位和ACK位都置1,确认号是ack=x+1,同时也为自己选择一个初始号seq=y。即SYN=1,ACK=1,seq=y,ack=x+1 请注意:这个报文段也不能携带数据,但同时要消耗一个序号。这时TCP服务器进程进入SYN_RCVD(同步收到)状态。 3.ACK=1,seq=x+1,ack=y+1 TCP客户进程收到B的确认后,还要向B给出确认。确认报文段的ACK置1,确认号ack=y+1,而自己的序号seq=x+1。即ACK=1,seq=x+1,ack=y+1TCP的标准规定,ACK报文段可以携带数据。但如果不携带数据则不消耗序号,在这中情况下,下一个数据报文段仍然是seq=x+1。这时。TCP连接已经建立,A进入ESTAB_LISHED(已建立连接)状态。 4.当B收到A的确认后,也进入ESTAB_LISHED状态。

本文章由javascript技术分享原创和收集

发表评论 (审核通过后显示评论):