• TCP三次握手 四次挥手


    三次握手过程

    就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。

    syn是同步报文。  SYN(SYNchronization) : 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1. 因此,  SYN置1就表示这是一个连接请求或连接接受报文。

    几个必须知道的缩写

    syn是同步报文。 

    seq是数据包本身的序列号; 

    ACK为1表示确认号有效,为0表示报文中不包含确认信息,忽略确认号字段

    ack是期望对方继续发送的那个数据包的序列号。 

    三次握手图解

    1. 第一次握手:(当SYN=1而ACK=0时,表明这是一个连接请求报文。)Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
    2. 第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
    3. 第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

    总结

    (第一次)左边发个J,等右边接受

    (第二次)右边收到J 回个J+1,并右边也发个K,给左边。

    (第三次)如果左边接收到了,就回个K+1,发给右边

    TCP三次握手机制中的seq和ack的值到底是什么意思?

    TCP连接的三次握手:

    第一次(A--->B),SYN=1,ACK=0,seq=x
    第二次(B--->A),SYN=1,ACK=1,seq=y,ack=x+1 //seq为什么是y,ack为什么是x+1?
    第三次(A--->B),               ACK=1,seq=x+1,ack=y+1 //seq为什么是x+1,ack为什么是y+1?

    解释: 

    seq是序列号,这是为了连接以后传送数据用的,ack是对收到的数据包的确认,值是等待接收的数据包的序列号。
    在第一次消息发送中,A随机选取一个序列号作为自己的初始序号发送给B;第二次消息B使用ack对A的数据包进行确认,因为已经收到了序列号为x的数据包,准备接收序列号为x+1的包,所以ack=x+1,同时B告诉A自己的初始序列号,就是seq=y;第三条消息A告诉B收到了B的确认消息并准备建立连接,A自己此条消息的序列号是x+1,所以seq=x+1,而ack=y+1是表示A正准备接收B序列号为y+1的数据包。

     syn是同步报文, seq是数据包本身的序列号;ack是期望对方继续发送的那个数据包的序列号。

    TCP报文格式中的控制位由6个标志比特构成,其中一个就是ACK

    四次挥手

    简单示意图

    作者:天禾裕
    链接:https://www.nowcoder.com/discuss/76933?type=2&order=3&pos=18&page=1
    来源:牛客网

    关闭连接时,当收到对方(客户端)的FIN报文时,仅仅表示对方(客户端)不再发送数据了但是(客户端)还能接收数据,己方(服务端)也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方(客户端)来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。

    关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文,因此不能一起发送。故需要四步握手。

  • 相关阅读:
    sql 2008 r2
    js压缩反压缩
    .NET调用Java写的WebServices(可能会碰到的问题)
    ecshop
    Chrome插件
    Unity3d ShaderLab之WorldNormalVector
    Unity 3d中Shader是什么,可以吃吗?
    java,类的继承
    java,关于POJO,查阅资料
    java,编写一个汽车类
  • 原文地址:https://www.cnblogs.com/volvane/p/9455869.html
Copyright © 2020-2023  润新知