博客
关于我
学妹问我:当打开 CSDN,到网页显示,其间发生了什么?
阅读量:770 次
发布时间:2019-03-24

本文共 1994 字,大约阅读时间需要 6 分钟。

HTTP请求背后的网络奥秘:从解析URL到数据包的漫长旅程

在浏览器中输入一个网址(比如Google),它看似简单的动作背后其实是一个精密的网络通信过程。这一过程涉及多个协议和技术的协同工作,包括HTTP、DNS、TCP/IP等。让我为你揭开这一复杂过程的帷帐。


01 它的第一课:解析URL

浏览器的第一课就是解析URL。当你输入一个网址时,浏览器首先需要解析这个URL的各个部分。URL通常由域名、路径、端口号等组成。例如,https://www.google.com/search?q=coding中的各个部分分别代表:

  • **域名(domain):**www.google.com
  • **协议(scheme):**https
  • **查询参数(query):**q=coding

解析URL的过程非常重要,因为它决定了浏览器需要请求的文件资源。如果没有路径名,浏览器默认会请求服务器上的index.html文件,以此避免混乱。


02 探访真实地址:DNS解析

解析完URL后,浏览器需要知道Web服务器的IP地址。但IP地址难以记忆,所以我们需要借助DNS(Domain Name System,域名系统)查询。DNA服务器就像电话本一样,它保存了域名与对应IP地址的映射关系。

DNA服务器的结构是分层的,类似于电话directories:

  • 根DNS服务器:最顶层的DNS服务器。
  • 顶级域DNS服务器:如.com.org等顶级域。
  • 权威DNS服务器:负责具体域名如server.com的解析。

When you type a URL like www.server.com, your local DNS server asks根DNS服务器、顶级域服务器,直到找到权威DNS服务器才能获取到真实IP地址。


03 协议栈:- TCP/IP协议

通过DNS获取到的IP地址后,浏览器需要将HTTP请求交给协议栈。协议栈由多个协议组成,包括TCP、UDP、IP等。这些协议负责将HTTP数据包拆分成可传输的网络包。

  • TCP协议:负责可靠传输,建立连接。
  • IP协议:负责数据包的路由。
  • UDP协议:负责快速数据传输(但不保证可靠性)。

TCP在传输前会进行三次握手,确保连接的可靠性。握手过程包括SYN、ACK等状态位,确保双方能够顺利通信。


04 可靠传输:TCP协议

TCP协议的核心在于建立连接和数据传输。连接建立需要三次握手。例如,当你访问网络资源时,客户端(浏览器)和服务器之间需要完成以下步骤:

  • 客户端发送SYN包。
  • 服务器返回SYN-ACK包。
  • 客户端发送ACK包,主动建立连接。
  • TCP协议还支持窗口大小和拥塞控制,确保数据传输的高效性。


    05 远程定位:IP协议

    一旦TCP连接建立,IP协议会将数据包拆分成多个网络包进行传输。每个网络包的格式包括:

    • 源地址和目标地址:IP协议。
    • 协议类型:如TCP(协议号0x06)。
    • 传输数据:包括HTTP请求或响应。

    IP协议还负责路由选择。通过路由表,IP协议可以判断数据包应经哪条路由发送。


    06 两点传输:MAC地址

    IP包的传输需要依赖MAC地址。MAC地址用于标识网络接口卡(网卡)。每个网卡都有唯一的MAC地址,当发送数据包时,会增加MAC头部。

    当需要找到目标设备的MAC地址时,ARP协议会发送广播查询,获取目标设备的MAC地址。


    07 接口控制:网卡

    网卡是数据传输的执行者。它将数字信号转换为电信号并通过网线传输。在传输中,网卡会添加起始帧分界符和帧校验序列(FCS),确保数据完整。


    08 转发中转:交换机

    通过交换机,数据包会被转发到目标网络。交换机基于MAC地址转发数据包。如果找不到目标设备的MAC地址,交换机会广播查询所有设备,看看是否有噪声包回应。


    09 城外路由:路由器

    路由器负责将数据包从一个子网转发到另一个子网。它通过查找路由表来确定下一跳的路由器地址。路由器的每个端口都有固定的MAC地址和IP地址,完成转发。


    10 数据包的终点:服务器与客户端

    当数据包抵达服务器或客户端后,它们会解析数据包的内容。服务器会处理HTTP请求,生成响应数据包并通过同样的协议栈返回给客户端。


    一个数据包的臭不要脸感受

    作为一枚数据包,我从一旦出生的那一刻起,就一直在努力完成自己﹣即将请求的数据包传递给远方的服务器。在这漫长的旅程中,我得到了许多大佬的帮助。你当然会遇到他们,因为这就是通信的本质。

    从被解析的URL开始,一路经过DNS、TCP/IP等大佬的手,我终于到达了预定的目的地。这整个过程就像一个精密的马拉松赛,只有团队协作,才能完成比赛。

    所以,在整个过程中,请记住:技术创新不仅仅是工具的进步,更是人类智慧的结晶。你可以通过微信搜索“小林coding”关注我的图解文章,获取更多技术图解内容!

    转载地址:http://ysskk.baihongyu.com/

    你可能感兴趣的文章
    MongoDB出现Error parsing command line: unrecognised option ‘--fork‘ 的解决方法
    查看>>
    mxGraph改变图形大小重置overlay位置
    查看>>
    MongoDB学习笔记(8)--索引及优化索引
    查看>>
    MQTT工作笔记0009---订阅主题和订阅确认
    查看>>
    ms sql server 2008 sp2更新异常
    查看>>
    MS UC 2013-0-Prepare Tool
    查看>>
    msbuild发布web应用程序
    查看>>
    MSB与LSB
    查看>>
    MSCRM调用外部JS文件
    查看>>
    MSCRM调用外部JS文件
    查看>>
    MSEdgeDriver (Chromium) 不适用于版本 >= 79.0.313 (Canary)
    查看>>
    MsEdgeTTS开源项目使用教程
    查看>>
    msf
    查看>>
    MSSQL数据库查询优化(一)
    查看>>
    MSSQL日期格式转换函数(使用CONVERT)
    查看>>
    MSTP多生成树协议(第二课)
    查看>>
    MSTP是什么?有哪些专有名词?
    查看>>
    Mstsc 远程桌面链接 And 网络映射
    查看>>
    Myeclipse常用快捷键
    查看>>
    MyEclipse用(JDBC)连接SQL出现的问题~
    查看>>