• 7.13一次完整的Http请求过程


    7.13一次完整的Http请求过程

    一次完整请求的图解

    逐层来拆解

    TCP/IP协议三次握手

    首先根据OSI七层模型--->实际应用是四层,这两个协议分别位于传输层(TCP)和网络层(IP)

    TCP/IP协议模型(Transmission Control Protocol/Internet Protocol),包含了一系列构成互联网基础的网络协议,是Internet的核心协议

    数据进入协议栈以后每一层都会封装对应的头部或者尾部信息:

    数据的封装和解封装的过程

    TCP三次握手

    TCP的特点:

    • 面向连接的:--->无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。

    • 连接的进行:

      • 三次握手进行初始化

      • 三次握手的目的:

        • 同步连接双方的序列号和确认号并交换 TCP窗口大小信息。

    一次详细的TCP三次握手过程:

    TCP的报文段分析

    暂时需要的信息:

    • ACK:TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1

    • SYN(synchronization):连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,SYN置1就表示这是一个连接请求或连接接受报文。

    • FIN(finish):终结,用来释放一个连接。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并要求释放连接。

    什么是序号?

    TCP是面向字节流的,在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。其特点是

    • 整个要传送的字节流的起始序号必须在连接建立啥时设置

    三次握手的整个过程:

    • 由Client发出请求连接即 SYN=1 ACK=0 , TCP规定SYN=1时不能携带数据,但要消耗一个序号,因此声明自己的序号是 seq=x--->理解为:告诉服务器需要同步,所以syn=1,但是没有建立连接。所以ack=0

    • Server 进行回复确认,即 SYN=1 ACK=1 seq=y, ack=x+1.--->这时在服务端已经收到了syn同步请求,所以回应syn=1告诉Client已经同步。然后由Server向Client建立TCP连接。所以ack=1。

    • Client 再进行一次确认,但不用SYN 了,这时即为 ACK=1, seq=x+1, ack=y+1.--->为什么需要第三次握手?因为在Server端看来已经建立了连接,所以ack=1如果Client没收到ack=1这个返回信号则默认没有连接成功,所以Client要告诉Server自己的ack也已经=1建立了连接了。

    (可以理解为ACK=1是确保双方都能够发送信息和接收信息,syn是确保Client和Server的状态是同步的)

    这样Client和Server就建立起了一个套接字接口通道(socket)

    It's a lonely road!!!
  • 相关阅读:
    Python 爬虫
    Web 前端编程运维必备
    Docker 运维高级应用管理
    Python 运维之路
    Linux 运维之路
    8086汇编 中断
    8086汇编 rep 指令
    8086汇编 cmp 指令
    8089汇编 标志寄存器
    8086汇编 call 指令
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/15008012.html
Copyright © 2020-2023  润新知