22张图详解浏览器请求数据包如何到达web服务器(搞懂网络可以毕业了)

2023-10-30

浏览器的请求数据包如何到达web服务器?

很多读者对于其中的完整流程不是特别的了解,下面一口君通过这22张图,详细的讲解我们点击浏览器的网址之后,数据包是如何经过重重险阻到达web server的。

  1. LAN网络中的用户要访问位于远程网络中的服务器存储的网页。用户首先激活网页上的链接。

如果该域名对应的IP地址本地已经缓存,就直接访问该地址的80端口或者8080端口;如果没有缓存,那么浏览器会发出DNS请求给DNS服务器,获得该域名对应的IP地址。

获得地址后,浏览器会通过socket首先向服务器发送三次握手,建立起TCP连接。

在这里插入图片描述

  1. 浏览器发出HTTP Get请求。应用层添加第7层报头,用于标识应用程序和数据类型。
    数据区需要按照HTTP协议填充对应数据,格式参考RFC2616。
    在这里插入图片描述

  2. 传输层标识上层服务是万维网(WWW)客户端。然后,传输层将此服务与TCP协议相关联并分配端口号。它使用随机选择的与此所建回话相关联的源端口(12345),目的端口(80)与www服务相关联。
    进行网络通信的进程必须绑定一个端口号,该端口号用于区分网络通信的进程。一个端口号只能被1个进程绑定。

    通常web服务器的端口号为80,8080。
    在这里插入图片描述

  3. TCP还发送确认号,告知www服务器期待接收的下一TCP数据短的序列号,序列号将指示此数据段在一系列相关数据段中所处的位置。此外还会根据建立会话的需要适当设置标志。
    该序列号非常有用,TCP要保证数据正确到达对方,并且对方要能够让数据有序重组,重组的依据就是这个序列号。
    在这里插入图片描述

  4. 网络层构建IP数据包,以便标识源主机和目的主机。就目的地址而言,客户端主机使用主机表中缓存的www服务器主机名关联的IP地址。而原地址则使用本机的IPv4地址。网络层还标识出此数据包中封装的上层协议为TCP数据段。
    在这里插入图片描述

6.数据链路层参照地址解析协议(ARP)缓存来确定与路由器B接口关联的MAC地址,该接口被制定为默认网关。然后,它使用此地址构建以太网II帧,通过本地介质传输IPv4数据包。该帧中使用笔记本电脑的MAC地址作为源MAC地址,使用路由器B的Fa0/0接口的MAC地址作为目的MAC地址。
在这里插入图片描述

  1. 该帧的类型字段中还使用值0800指示IPv4上层协议。该帧以前导码和帧首(SOF)指示符开始,以帧尾帧校验序列中用于产错校验的循环冗余校验(CRC)结束。然后,它使用CSMA/CD来控制将帧放置到介质上的过程。
    在这里插入图片描述

  2. 物理层开始将帧逐位编码到介质中。路由器A和服务器之间的网段是10Base-T网段;因此,对此比特编码时使用的是曼彻斯特差分编码。路由器B会缓冲收到的比特。

    10BASE-T是双绞线以太网。

在这里插入图片描述

  1. 路由器检查前导码和SOF中的比特位,查找表示帧开始位置的连续两个1的比特位。然后,路由器B开始缓存这些比特,作为重建帧的一部分。收到整个帧之后,路由器B生成帧的CRC。然后将此与帧结束位置的FCS进行对比,确定接收的帧完整无缺。当确认该帧未损坏时,再比对帧中的目的MAC地址和接口(Fa0/0)的MAC地址。如果二者相符,则删除帧头并将数据包向上传送到网络层。
    在这里插入图片描述

  2. 网络层将数据包的目的IPv4地址与路由表中的路由进行比对。找到与下一跳出接口S0/0/0相关联的符合项。然后将路由器B中的数据包传送到S0/0/0接口的电路。

路由器值会查看数据包的IP层信息,并根据目的IP地址来查找路由表,路由器是搭建网路最重要的一个设备,用来连接不同的网络。

网络搭建好之后,每个路由器中都要提前建立好到各个网段的路由。通常路由条目由动态路由协议RIP、OSPF来动态创建。
在这里插入图片描述

11.路由器B创建PPP帧,通过WAN传输数据包。PPP报头中添加了01111110二进制标志,表示帧的开始位置。然后添加地址字段1111111,表示广播(意思是“发送到所有站点”)。由于PPP是点对点协议,用作两个节点之间的直接链路,所以此字段没有实际意义。

路由器的所有接口地址都不能处于同一网段,一般一个出接口连接一个独立的网段。

路由器和路由器之间两个网口传输数据一般用PPP协议。
在这里插入图片描述

  1. 此外还包括值为0021(十六进制)的协议字段,表示封装的是IPv4数据包。帧尾以帧校验序列中用于差错校验的循环冗余校验结束。值为01111110的二进制标志表示PPP帧的结束位置。
    在这里插入图片描述

  2. 由于两台路由器之间已经建立了电路和PPP会话,因此物理层开始将帧逐位编码到介质中。接收路由器(路由器A)会缓冲收到的比特。比特的表示类型和编码类型取决于使用的WAN技术的类型。
    在这里插入图片描述

  3. 路由器A检查标志中的比特,确定帧的开始位置。然后,路由器A开始缓存这些比特,作为重建帧的一部分。按照帧尾中的标志所示收到整个帧之后,路由器A生成帧的CRC。然后将此与帧结束位置的FCS进行比对,确定接收的帧完整无缺。当确认该帧未损坏时,则删除帧头并将数据包向上传送到路由器A的网络层。
    在这里插入图片描述

  4. 网络层将数据包的目的IPv4地址与路由表中的路由进行比对。找到直接连接到接口Fa0/0的匹配项。然后,将路由器A中的数据包传送到Fa0/0接口的电路。
    在这里插入图片描述

  5. 数据链路层参照路由器A的ARP缓存来确定Web服务器接口关联的MAC地址。然后,它使用此MAC地址构建以太网Ⅱ帧,通过本地介质将IPv4数据包传输到服务器。该帧中使用路由器A的fa0/0接口的MAC地址作为源MAC地址,使用服务器的MAC地址作为目的MAC地址。该帧的类型字段中还使用值0800指示IPv4上层协议。该帧以前导码和帧首(SOF)指示符开始,以帧尾帧校验序列中用于差错校验的循环贰余校验结束。然后,它使用CSMA/CD来控制将帧放置到介质上的过程。

CSMA/CD即载波侦听多路访问/冲突检测,是广播型信道中采用一种随机访问技术的竞争型访问方法,具有多目标地址的特点。

在这里插入图片描述

  1. 物理层开始将帧逐位编码到介质中。路由器A和服务器之间的网段是100Base-T网段;因此,对比特编码时使用的是4B/5B编码。服务器会缓冲收到的比特。
    在这里插入图片描述

  2. Web服务器检前导码和SOF中的比特位,查找表示帧开始位置的连续两个1的比特位。然后,服务器开始缓存这些比特,作为重建帧的一部分。收到整个帧之后,服务器生成帧的CRC。然后将此与帧结束位置的FCS进行比对,确定接收的帧完整无缺。
    在这里插入图片描述

  3. 当确认该帧未损坏时,再比对帧中的目的MAC地址与服务器网卡的MAC地址。如果二者相符,则删除帧头并将数据包向上传送到网络层。
    在这里插入图片描述

  4. 网络层检查数据包的目的IPv4地址,确定目的主机。由于此地址与其自身的IPv4地址相符,因此服务器处理该数据包。网络层标识出上层协议是TCP,并将包含的数据段传送到传输层的TCP服务。
    在这里插入图片描述

  5. 服务器的传输层检查TCP数据段,确定数据段中包含的数据所属的会话。此操作通过检查源端口和目的端口来完成。唯一的源端口和目的端口标识与Web服务器服务的现有会话。使用序列号按照正确的顺序放置此数据段,向上发送到应用层。

前面说过一个端口只能被一个进程绑定,所以该数据只会传送给web服务器进程,而不会被其他进程截获。
在这里插入图片描述

  1. 在应用层,HTTP Get请求传送到Web服务器服务(httpd)。然后,该服务可以确定对请求做出的响应。
    在这里插入图片描述

    实际的网络环境中,服务器直接连接的路由器A和本地路由器B之间可能连接了非常多的网络设备,比如卫星、网桥、光纤等,这些设备的组网会更加复杂,涉及到的网络协议也更多。所有这些基础网络设施都由运营商建设,造价特别的昂贵,如果没有中兴、华为大力发展网络设备,我们基本不可能用如此低的价格来上网冲浪,也不会诞生美团、支付宝、微信、抖音这些互联网公司。相信随着5G的普及,未来会有更多的中国本土的新兴互联网公司。

    本例虽然组网基础相对简单,但是万变不离其宗,基本原理一致。网络博大精深,在实际开发产品中应用非常广泛,后面一口君还会陆续发布关于网络的文章,敬请关注。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

22张图详解浏览器请求数据包如何到达web服务器(搞懂网络可以毕业了) 的相关文章

  • 响应中的有效 JSON

    我正在开发客户端和服务器应用程序 遇到了一个有趣的问题 我们正在创建一个 Restful API 并通过 JSON 响应与客户端进行通信 执行 DELETE 时 我们将返回 200 OK 和空白响应 我们的客户收到 200 OK 但解析 J
  • 在电子邮件中使用协议相对 URL 安全吗?

    关于在 HTML 中使用协议相对 URL 已有讨论 1 但是电子邮件呢 电子邮件客户端或 Gmail 等服务提供商在 HTML 电子邮件中使用时是否会删除或修改协议相对 URL 1 我可以将所有 http 链接更改为 吗 https sta
  • 如何使用 Apache HttpClient 4 获取文件上传的进度条?

    我有以下用于使用 Apache 的 HTTP Client org apache http client 上传文件的代码 public static void main String args throws Exception String
  • 您可以在分块的 http 响应预告片中设置 Location 标头吗?

    HTTP 1 1 响应可以分块 spec https www rfc editor org rfc rfc2616 section 3 6 1 在最后一个块的末尾 服务器可以发送一个 预告片 其中包含附加标头 问题是 你能包括一个Locat
  • HTTP 查询字符串和 []

    PHP 使用 在查询参数名称中 以确保多次出现的参数都出现在 GET超全局变量 否则只出现最后一次出现的情况 还有其他软件可以做到这一点吗 但从RFC 3986 https www rfc editor org rfc rfc3986 以及
  • WCF - 进行多次调用时随机客户端超时

    我有一个WPF客户端通过以下方式请求数据WCF服务托管于IIS 7 服务方法调用存储过程 SQL 2012 using EF检索一些数据 由于需要加载大量数据 因此客户端会多次调用服务方法 以 分解 数据加载并避免大量负载和超时 我们使用生
  • 内容长度标头与分块编码

    我正在尝试权衡设置的利弊Content LengthHTTP 标头与使用分块编码从我的服务器返回 可能 大文件的比较 使用持久连接需要其中之一来符合 HTTP 1 1 规范 我看到了的优点Content Length标头是 下载对话框可以显
  • gRPC(HTTP/2) 比使用 HTTP/2 的 REST 更快吗?

    目标是引入一种性能更好的传输和应用层协议latency and 网络吞吐量 目前 该应用程序使用REST with HTTP 1 1并且我们遇到了很高的延迟 我需要解决这个延迟问题并且我愿意使用gRPC HTTP 2 or 休息 HTTP2
  • 是否可以在ajax get请求中获取页面的一部分?

    我知道我们可以在向服务器发出 GET 请求时获取整个页面 但是如果我只对该页面上的一个特定 div 感兴趣 或者更准确地说对其内容感兴趣 该怎么办 这里唯一的选择是获取整个页面 例如使用 jquery find 从中获取 div 内容吗 或
  • PHP 是否有与 Java 的 RequestDispatcher.forward 等效的功能?

    在 Java 中我可以编写一个非常基本的 JSPindex jsp像这样 这样做的效果是用户请求index jsp 或者只是包含目录 假设index jsp是目录的默认文档 将会看到home action没有浏览器重定向 即 forward
  • Spring webflow 应用程序:HTTP 302 暂时移动

    我的 java 应用程序中的每个请求都会生成另外 2 个带有 HTTP 302 错误的请求 例如 如果请求查看名为板 html 这个请求是从首页 html 我收到按以下顺序生成的 3 个请求 POST home html 302 Moved
  • Vertx HttpClient getNow 不工作

    我的 vertx HttpClient 有问题 下面的代码显示使用 vertx 和纯 java 测试 GET Vertx vertx Vertx vertx HttpClientOptions options new HttpClientO
  • POST 后使用 303 重定向以避免“网页已过期”:如果字节数超过 GET 请求可以处理的字节数,它会工作吗?

    我想解决 网页已过期 问题 首先 我刚刚将 POST 更改为 GET 但这导致出现错误 我的 HTTP 请求超出了 GET 的最大大小 所以 现在我想尝试下面链接中描述的技术 帖子 303 重定向 但是我仍然会遇到相同的大小限制问题吗 对
  • Golang 优雅地关闭 HTTP 服务器并进行错误处理

    我正在让我的 HTTP 服务器正常关闭 我从帖子中获取了提示here https stackoverflow com questions 39320025 how to stop http listenandserve 并且到目前为止已经像
  • 为什么使用HTTP协议时需要指定端口号?

    即使我们使用HTTP协议 为什么还需要用IP地址指定端口号 例如 http xyz 8080 这到底是什么意思 我们已经知道 在使用 HTTP 时 请求将在端口 80 上提供服务 那么为什么我们要显式指定端口呢 HTTP 的默认端口为 80
  • Go中如何自定义http.Client或http.Transport超时重试?

    我想实现一个自定义http Transport对于标准http Client 如果客户端超时 它将自动重试 附 由于某种原因 习俗http Transport is a 一定有 我已经查过了hashcorp go retryablehttp
  • 在 Go 中跟踪 HTTP 请求时指定超时

    我知道通过执行以下操作来指定 HTTP 请求超时的常用方法 httpClient http Client Timeout time Duration 5 time Second 但是 我似乎不知道在跟踪 HTTP 请求时如何执行相同的操作
  • 在 iOS 中,http 204 响应返回空白页面,有办法阻止这种情况吗?

    以前可能有人问过这个问题 但我似乎找不到解决方案 所以如果是这种情况 我深表歉意 我正在开发一个使用express的简单节点应用程序 其中一个帖子路由返回 http 204 并发送它 下面是我的代码 router post id funct
  • ASP.NET 中 HTTP 缓存相关标头的有效含义

    我正在 ASP NET 2 0 中开发一个 Web 应用程序 其中涉及通过资源处理程序 ashx 提供图像 我刚刚实现了处理缓存标头和条件 GET 请求 这样我就不必为每个请求提供所有图像 但我不确定我是否完全理解浏览器缓存发生了什么 图像
  • python 2.7 中的 HTTP 2 请求

    在 python 中向 HTTP 1 和 HTTP 2 发出请求有什么区别吗 我可以像这样在 python 中进行 HTTP 1 x 调用 url http someURL values param1 key param2 key2 dat

随机推荐

  • 51单片机定时器扫描按键

    定时器扫描按键 定时器每隔20毫秒扫描一次按键 问题 在之前写的按键检测函数中 要在按键按下后用Delay函数进行软件消抖 还要用while P3 1 0 来判断是否松手 如果长期不松手 则CPU会 卡在该死循环里 不能执行其他代码 造成某
  • 享受技术带来的快乐

    http blog csdn net jdsjlzx article details 45815531
  • 细数以太坊生态的另类项目:通向Web3.0的桥梁

    DeFi之外 以太坊生态还有许多另类生态项目值得关注 作者 谷昱 近段时间 以BSC Solana与Fontom等为代表的公链对以太坊发起了激烈挑战 特别是在应用生态方面 正在在借贷 交易 聚合器等赛道全方位复制以太坊生态 通过IDO 空投
  • 如何用matlab代码表白——matlab画爱心和玫瑰、I LOVE YOU

    写在前面 本篇博客主要是利用matlab2016a绘制一些玫瑰花或表白语句 通过绘制掌握matlab画图的一些常规操作 话不多说 直接上代码及注释 1 爱心 2 玫瑰 3 I LOVE YOU 4 参考文献与链接 1 爱心 clear cl
  • Ubuntu+Matlab 在终端输入matlab实现打开matlab

    1 找到安装的Matlab路径 usr local MATLAB R2017a bin matlab 2 打开命令行 输入 sudo ln s usr local MATLAB R2017a bin matlab usr local bin
  • DH参数介绍

    机械手末端到基坐标系的变换关系 通常 每一个变换需要 个独立参数来描述坐标系 相对坐标系 的关系 个用来描述位置另外 个用来描述方向 在 年 Jacques Denavit 和 Richard Hartenberg 提出了一种系统化的方法来
  • BUILDROOT配置QT5和TSLIB

    在buildroot下面 打开配置界面 make menuconfig 选择target packages项 默认的模拟配置并不支持勾选QT选项 修改Toolchain后 终于可以用QT的选项了 找到QT5 勾选 进入QT5选项 勾选gui
  • multiset用法总结

    c 语言中 multiset是
  • linux怎么将一个文件移动到另一个目录下

    用mv命令 1 作用 mv命令来为文件或目录改名或将文件由一个目录移入另一个目录中 该命令等同于DOS系统下的ren和move命令的组合 它的使用权限是所有用户 2 格式 mv options 源文件或目录 目标文件或目录 3 option
  • win10 家庭版打开组策略编辑器

    文章目录 echo off pushd dp0 dir bC Windows servicing Packages Microsoft Windows GroupPolicy ClientExtensions Package 3 mum g
  • Impala简单查询hive与Hbase效率

    简单对比测试Impala查询hive和hbase 在hive和hbase中插入同样的数据73亿条 1 测试查询100条数据 在impala中查询hbase的100条数据 花费了6秒左右 直接在hbase中查询花费0 3秒 在impala中查
  • 2611. 老鼠和奶酪

    题目描述 有两只老鼠和 n 块不同类型的奶酪 每块奶酪都只能被其中一只老鼠吃掉 下标为 i 处的奶酪被吃掉的得分为 如果第一只老鼠吃掉 则得分为 reward1 i 如果第二只老鼠吃掉 则得分为 reward2 i 给你一个正整数数组 re
  • python: 基于select的sokct ftp 客户端

    7512 import socket import hashlib time import json import sys os import random BASE DIR os path dirname os path dirname
  • python颜色参数palette_数据可视化Seaborn从零开始学习教程(二) 颜色调控篇

    作者 xiaoyu 微信公众号 Python数据科学 知乎 python数据分析师 Seaborn学习大纲 seaborn的学习内容主要包含以下几个部分 风格管理 绘图风格设置 颜色风格设置 绘图方法 数据集的分布可视化 分类数据可视化 线
  • 小米MAX线刷教程

    小米MAX升级到7 2 9后 触控竟然无法工作 也许因为屏幕换过非原版的缘故吧 b 只能回退到老版本了 实践证明 解决了触控不识别的问题 回退到miui MIMAX 6 12 22 1affb89506 6 0时 提示安装包里缺少flash
  • 服务器不能使用无线键盘,台式机无线键盘不能使用解决方法

    台式机无线键盘不能使用解决方法 新买的无线键盘给台式机却不能使用 很是烦恼 该怎么办呢 下面小编给你做出详细的台式机无线键盘不能使用解决方法介绍 希望对你有帮助 解决方法一 新款无线键鼠的对码方法非常简单 无需清零 只需按住键盘或鼠标背后的
  • 修改Fedora与windows双系统的启动顺序

    安装Fedora Core和Windows双系统时 如何改变的启动顺序呢 只需要以root身份登陆 修改 boot grub grub conf文件即可 例如 本人安装的fedora系统的grub conf文件内容 boot dev sda
  • 数据结构大作业:终于理解了链表(会添删改查了)

    struct ListNode int val ListNode next 这就定义了一个链表 这个结构里有两个东西 值和下一个节点的索引 创建链表 struct ListNode int val ListNode next 这个实际上是可
  • C++知识积累:运算符重载时构造函数与析构函数调用次数不一致的问题

    在学习运算符重载的时候自己写了这样一段程序 class Stu public Stu std cout lt lt Stu No parameter constructor called lt
  • 22张图详解浏览器请求数据包如何到达web服务器(搞懂网络可以毕业了)

    浏览器的请求数据包如何到达web服务器 很多读者对于其中的完整流程不是特别的了解 下面一口君通过这22张图 详细的讲解我们点击浏览器的网址之后 数据包是如何经过重重险阻到达web server的 LAN网络中的用户要访问位于远程网络中的服务