• tcp握手协议,四次挥手


    1、三次握手

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

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

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

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

    2、四次挥手

      所谓四次挥手就是终止TCP的链接,就是指断开一个TCP连接时候,需要客户端和服务端总共发送4个包已确认链接的断开。在socket编程中,这一过程有客户端或者服务器端任一方执行close来触发。

      由于TCP链接时候是全双工的,因此每个方向都必须要单独进行关闭,这一原则是当乙方完成数据发送任务后,发送一个fin来种植这一方向的链接,收到一个fin只是意味着这一方向上没有数据流动了,就不会再收到数据了,但是在这个TCP连接上任然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的乙方将执行主动关闭,而另一方则执行被动关闭,上图描述的就是这样!

    (1)第一次挥手:client发送一个fin来关闭client到server的数据传送,client进入fin_wait_1状态。

    (2)第二次挥手:server收到fin后,发送一个ack给client,确认序号为收到序号+1(与syn相同,一个fin占用一个序号),server进入close_wait状态。

    (3)第三次挥手:server发送一个fin,用来关闭server到client的数据传送,server进入last_ack状态。

    (4)地四次挥手:client收到fin后,client进入time_wait状态,接着发送一个ack给server,确认序号为收到序号+1,server进入close状态,完成四次挥手。、

    上面是一方主动关闭,另一方被动关闭的情况,实际中还会出现同时发起主动关闭的情况,具体流程如下图:

    流程和状态在上图中已经很名显了。

    注意:

    1、三次握手是什么或者流程?四次挥手那?

    2、为什么建立连接是三次握手,而关闭连接确实四次挥手那?

    这是因为服务端在listen状态下,收到建立连接请求的syn报文后,吧ack和syn放在一个报文里发送给客户端。儿关闭连接时候,当受到对方的fin保温时候,仅仅表示对方不在发送数据了但是还能接受数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送fin报文给对方来表示同意现在关闭链接,因此,己方ack和fin一般都会分开发送。

  • 相关阅读:
    JavaScript技巧大全
    rs.open sql,conn 与conn.execute(sql)的区别
    ASP.NET中常用的优化性能的方法(1)
    JavaScript实现图片的不间断连续滚动
    Windows下安装和配置netbeans以使用C/C++全过程
    hdu Hat's Fibonacci
    hdu Big Number
    hdu Buy the Ticket
    acm steps chapter3总结
    如何从U盘引导安装win7/xp
  • 原文地址:https://www.cnblogs.com/yjds/p/8729004.html
Copyright © 2020-2023  润新知