美文网首页
02.开启网络线程到发出一个完整的http请求 - 2023-

02.开启网络线程到发出一个完整的http请求 - 2023-

作者: 勇敢的小拽马 | 来源:发表于2023-02-12 17:01 被阅读0次

    dns查询,tcp/ip请求构建,五层因特网协议栈等

    DNS查询得到IP

    如果输入的是域名,需要进行dns解析成IP,大致流程:

    • 如果浏览器有缓存,直接使用浏览器缓存,否则使用本机缓存,再没有的话就是用host
    • 如果本地没有,就向dns域名服务器查询(当然,中间可能还会经过路由,也有缓存等),查询到对应的IP

    注意,域名查询时有可能是经过了CDN调度器的(如果有cdn存储功能的话)

    而且,需要知道dns解析是很耗时的,因此如果解析域名过多,会让首屏加载变得过慢,可以考虑dns-prefetch优化

    tcp/ip请求

    http的本质就是tcp/ip请求

    需要了解3次握手规则建立连接以及断开连接时的四次挥手

    tcp将http长报文划分为短报文,通过三次握手与服务端建立连接,进行可靠传输

    三次握手的步骤:(抽象派)

    客户端:hello,你是server么?
    服务端:hello,我是server,你是client么
    客户端:yes,我是client

    建立连接成功后,接下来就正式传输数据

    然后,待到断开连接时,需要进行四次挥手(因为是全双工的,所以需要四次挥手)

    四次挥手的步骤:(抽象派)

    主动方:我已经关闭了向你那边的主动通道了,只能被动接收了
    被动方:收到通道关闭的信息
    被动方:那我也告诉你,我这边向你的主动通道也关闭了
    主动方:最后收到数据,之后双方无法通信

    get和post的区别

    get和post虽然本质都是tcp/ip,但两者除了在http层面外,在tcp/ip层面也有区别。

    get会产生一个tcp数据包,post两个

    具体就是:

    • get请求时,浏览器会把headersdata一起发送出去,服务器响应200(返回数据),
    • post请求时,浏览器先发送headers,服务器响应100 continue,浏览器再发送data,服务器响应200(返回数据)。

    再说一点,这里的区别是specification(规范)层面,而不是implementation(对规范的实现)

    五层因特网协议栈

    从客户端发出http请求到服务器接收,中间会经过一系列的流程

    简括就是:

    从应用层的发送http请求,到传输层通过三次握手建立tcp/ip连接,再到网络层的ip寻址,再到数据链路层的封装成帧,最后到物理层的利用物理介质传输。

    五层因特网协议栈其实就是:

    1.应用层(dns,http) DNS解析成IP并发送http请求
    2.传输层(tcp,udp) 建立tcp连接(三次握手)
    3.网络层(IP,ARP) IP寻址
    4.数据链路层(PPP) 封装成帧
    5.物理层(利用物理介质传输比特流) 物理传输(然后传输的时候通过双绞线,电磁波等各种介质)

    当然,其实也有一个完整的OSI七层框架,与之相比,多了会话层、表示层。

    OSI七层框架:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层

    表示层:主要处理两个通信系统中交换信息的表示方式,包括数据格式交换,数据加密与解密,数据压缩与终端类型转换等
    会话层:它具体管理不同用户和进程之间的对话,如控制登陆和注销过程

    相关文章

      网友评论

          本文标题:02.开启网络线程到发出一个完整的http请求 - 2023-

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