美文网首页
可靠传输TCP

可靠传输TCP

作者: xxttw | 来源:发表于2023-06-18 10:44 被阅读0次

    HTTP是基于TCP协议传输的, 所以在这我们先了解下TCP协议

    TCP包头格式

    我们先看看TCP报文头部的格式:


    image.png

    首先 源端口号和目标端口号是必不可少的, 没有没有这两个端口,数据就不知道应该发给哪个应用
    序号: 是为了解决发送包的乱序问题
    确认号: 是为了确认发出去的包对象是否有收到, 如果没有收到,就应该重新发送, 直到送到为止, 这就是为了解决丢包问题

    接下来就是状态位. TCP是面向连接的, 因而双方需要维护连接的状态, 这些带状态的数据包发送, 会引起双方的连接状态变更
    SYN 发起一个连接,
    ACK回复,
    RST重新连接,
    FIN结束连接

    窗口大小: TCP要做流量控制, 通信双方各生成一个窗口(缓存大小), 标识自己当前能够处理的数据的能力, 别发送的太快, 撑死我, 也别发送的太慢, 饿死了

    拥塞控制: 对于真正的道路堵不堵车, 它无能为力, 唯一能做的就是控制自己, 也及控制发送的速度,

    TCP传输数据之前,要先建立三次握手

    在HTTP传输数据之前, 首先需要TCP连接, TCP连接建立, 通常称为三次握手
    这个所谓的[连接] 只是双方计算机里维护一个状态, 在连接建立的过程中, 双方的状态变为时序图就想这样

    image.png
    • 一开始, 客户端服务端都处于close状态, 服务端主动监听某个端口,变为LISTEN状态
    • 客户端发起来一个syn连接请求, 之后处于syn_send状态
    • 服务端收到客户端的连接请求会回复一个 syn + ack的确认请求给客户端, 然后状态变为,syn_rcvd
    • 客户端收到服务器的确认后,也会发一个ACK确认给服务端告诉他, 收到了你的ACK确认,然后状态变为ESTABLISHED,连接已建立 , 因为它一发一收成功
    • 服务端收到ACK后 也会变为ESTABLISHED连接已建立状态, 因为它也一发一收成功
      所以三次握手是保证双方都有发送和接收的能力

    相关文章

      网友评论

          本文标题:可靠传输TCP

          本文链接:https://www.haomeiwen.com/subject/adhqcdtx.html