zoukankan      html  css  js  c++  java
  • 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!!!
  • 相关阅读:
    MFC Windows 程序设计>WinMain 简单Windows程序 命令行编译
    AT3949 [AGC022D] Shopping 题解
    CF643D Bearish Fanpages 题解
    CF643C Levels and Regions 题解
    CF241E Flights 题解
    CF671C Ultimate Weirdness of an Array 题解
    CF1592F Alice and Recoloring 题解
    GYM 102452E 题解
    CF494C Helping People 题解
    P5556 圣剑护符
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/15008012.html
Copyright © 2011-2022 走看看