志在指尖
用双手敲打未来

tcp三次握手(tcp三次握手四次挥手图解)

tcp三次握手

所谓三次握手(Three-wayHandshake),是指树立一个TCP衔接时,需要客户端和服务器一共发送3个包。
三次握手的意图是衔接服务器指定端口,树立TCP衔接,并同步衔接两边的序列号和承认号并交流TCP窗口大小信息.在socket编程中,客户端执行connect()时。将触发三次握手。
第一次握手:
客户端发送一个TCP的SYN标志位置1的包指明客户计划衔接的服务器的端口,以及初始序号X,保存在包头的序列号(SequenceNumber)字段里。
第二次握手:
服务器发回承认包(ACK)应对。即SYN标志位和ACK标志位均为1同时,将承认序号(AcknowledgementNumber)设置为客户的ISN加1以.即X+1。
第三次握手.
客户端再次发送承认包(ACK)SYN标志位为0,ACK标志位为1.而且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.而且在数据段放写ISN的+1

tcp三次握手四次挥手图解

tcp三次握手
最开端的时分客户端和服务器都是处于CLOSED状况。主动打开衔接的为客户端,被动打开衔接的是服务器。
TCP服务器进程先创立传输操控块TCB,时间准备接受客户进程的衔接恳求,此刻服务器就进入了LISTEN(监听)状况;
TCP客户进程也是先创立传输操控块TCB,然后向服务器宣布衔接恳求报文,这是报文首部中的同部位SYN=1,一起选择一个初始序列号seq=x,此刻,TCP客户端进程进入了SYN-SENT(同步已发送状况)状况。TCP规则,SYN报文段(SYN=1的报文段)不能带着数据,但需要消耗掉一个序号。
TCP服务器收到恳求报文后,假如赞同衔接,则宣布承认报文。承认报文中应该ACK=1,SYN=1,承认号是ack=x+1,一起也要为自己初始化一个序列号seq=y,此刻,TCP服务器进程进入了SYN-RCVD(同步收到)状况。这个报文也不能带着数据,可是相同要消耗一个序号。
TCP客户进程收到承认后,还要向服务器给出承认。承认报文的ACK=1,ack=y+1,自己的序列号seq=x+1,此刻,TCP衔接树立,客户端进入ESTABLISHED(已树立衔接)状况。TCP规则,ACK报文段能够带着数据,可是假如不带着数据则不消耗序号。
当服务器收到客户端的承认后也进入ESTABLISHED状况,尔后双方就能够开端通信了。四次挥手
数据传输完毕后,双方都可释放连接。最开始的时候,客户端和服务器都是处于ESTABLISHED状态,然后客户端主动关闭,服务器被动关闭。
客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。
服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。
客户端收到服务器的确认请求后,此时,客户端就进入FIN-WAIT-2(终止等待2)状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。
服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了LAST-ACK(最后确认)状态,等待客户端的确认。
客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2??MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。
服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。

未经允许不得转载:IT技术网站 » tcp三次握手(tcp三次握手四次挥手图解)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载