zoukankan      html  css  js  c++  java
  • 学习http协议的三次握手和四次挥手 ~~笔记

      http协议是基于tcp协议的  所以应该说是tcp协议的三次握手和四次挥手

        SYN:请求建立连接,并在其序列号的字段进行序列号的初始值设定。建立连接,设置为1

        FIN:用来释放一个连接。FIN=1表示:此报文段的发送方的数据已经发送完毕,并要求释放运输连接

         序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。

      三次握手:

        客户端A向服务器发送报文段,报文段携带SYN=1码和初始序列号seq=x(客户端随机生成的), 告诉服务器我想建立连接

        服务器收到报文,因SYN=1知道客户端A是想建立连接,发送报文段给客户端A,报文携段带 SYN=1,ACK=seq(客户端A发送的seq)+1,和序列号seq=x(服务器随机生成的),告诉客户端可以建立连接

        客户端A收到服务器的报文段后验证ACk码,如果正确向服务器发送报文段,携带SYN=1,ACK=seq(服务器发送过来的序列号)+1,告诉服务器建立连接开始、

      四次挥手:

        客户端A向服务器发送报文段携带FIN=1和seq=x(客户端随机生成的),告诉服务器数据传输完毕请求关闭连接,

        服务器收到报文段因FIN=1得知关闭连接请求,发送客户端A报文携带ACK=seq(客户端A发送的seq)+1,和序列号seq=x(服务器随机生成的),告诉客户端可以关闭与服务器的单向连接,(这时候服务器如果有数据客户端依然要接收)

        客户端A(进入等待状态)等待服务器数据发送完毕,服务器数据传输完毕,服务器会向客户端发送报文段携带ACK=seq+1,和序列号seq=x,(这里的序列号和ack和上一步数据一样)告诉客户端服务器数据传输完毕,请请求关闭连接,进入等待状态等待客户端确认关闭连接。

        客户端A收到服务器的关闭连接验证ack码,确认后发送报文段携带ACK=seq(服务器发送过来的序列号)+1和seq=客户端A第一次发送请求关闭连接时的seq+1,然后进入等待状态,等待2MSL的时间后关闭连接。

      在说四次挥手时最后一个步骤  客户端等待2MSL时间,是因为 如果服务器如果没有收到最后的   客户端发送确认服务器关闭连接的报文段,服务器会一直向客户端发送报文段(关闭服务器连接请求),这个2MSL时间是 报文存在的最大时间。

      试想:如果 客户端发送确认服务器关闭连接的报文段丢失,使得服务器处于等待状态的服务器收不到客户端已发送的确认服务器关闭连接的报文段,服务器因超时重传报文段,而 客户端能在2MSL时间内收到这个重传的报文段,接着客户端重传一次确认关闭连接,重新启动2MSL计时器,最后A和B都进入到关闭连接状态,若客户端不等待一段时间,而是发送完报文段后立即释放连接,则无法收到服务器重传的报文段,所以不会再发送一次确认报文段,则服务器无法正常进入到关闭连接状态。

  • 相关阅读:
    The Quad
    将OrCAD Capture CIS的设计文件(.dsn)导入到PADS Logic VX.2.3
    OrCAD Capture CIS 16.6 将版本16.6的设计文件另存为版本16.2的设计文件
    Eclipse IDE 添加jar包到Java工程中
    PADS Logic VX.2.3 修改软件界面语言
    切换Allegro PCB Editor
    Allegro PCB Design GXL (legacy) 将brd文件另存为低版本文件
    Allegro PCB Design GXL (legacy) 设置自动保存brd文件
    Could not create an acl object: Role '16'
    windows 下apache开启FastCGI
  • 原文地址:https://www.cnblogs.com/sxldy/p/11058855.html
Copyright © 2011-2022 走看看