iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Nginx是如何处理网络事件的
  • 550
分享到

Nginx是如何处理网络事件的

2023-06-04 03:06:48 550人浏览 薄情痞子
摘要

本篇内容介绍了“Nginx是如何处理网络事件的”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在深入了解 Nginx 各种原理及在极端场景下的

本篇内容介绍了“Nginx是如何处理网络事件的”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

在深入了解 Nginx 各种原理及在极端场景下的一些错误场景处理时,需要首先理解什么是网络事件。

Nginx 是一个事件驱动的框架,所谓事件主要指的是网络事件,Nginx 每个网络连接会对应两个网络事件,一个读事件一个写事件。在深入了解 Nginx 各种原理及在极端场景下的一些错误场景处理时,需要首先理解什么是网络事件。

网络传输

Nginx是如何处理网络事件的
接下来看上面这张图,比如主机 A 就是一台家里的笔记本电脑,那么主机 B 就是一台服务器,上面跑着 Nginx 服务。从主机 A 发送一个 Http 的 GET 请求到主机 B,这样的一个过程中主要经历了哪些事件?通过上图数据流部分可以看出:

应用层里发送了一个 GET 请求 -> 到了传输层,这一步主要在做一件事,就是浏览器打开了一个端口,在 windows 的任务管理器中可以看到这一点,他会把这个端口记下来以及把 Nginx 打开的端口比如 80 或者 443 也记到传输层 -> 然后在网络层会记下我们主机所在的 IP 和目标主机,也就是 Nginx 所在服务器公网 IP -> 到链路层以后 -> 经过以太网 -> 到达家里的路由器(网络层),家中的路由器会记录下所在运营商的一些下一段的 IP -> 通过广域网 -> 跳转到主机 B 所在的机器中 -> 报文会经过链路层 -> 网络层 -> 到传输层,在传输层操作系统就知道是给那个打开了 80 或者 443 的进程,这个进程自然就是 Nginx -> 那么 Nginx 在他的 HTTP 状态处理机里面(应用层)就会处理这个请求。

在上述过程中网络报文扮演了一个怎样的角色呢?

TCP流与报文

Nginx是如何处理网络事件的
数据链路层会在数据的前面 Header 部分和 Footer 部分添加上源 Mac 地址和源目的地址 -> 到了网络层则是 Nginx 的公网地址(目的 IP 地址)和浏览器的公网地址(源 IP 地址)-> 到了 tcp 层(传输层),指定了 Nginx 打开的端口(目的端口)和浏览器打开的端口(源端口)-> 然后应用层就是 HTTP 协议了。

这就是一个报文,也就是说我们发送的 HTTP 协议会被切割成很多小的报文,在网络层会切割叫 MTU,以太网的每个 MTU 是 1500 字节;在 TCP 层(传输层)呢会考虑中间每个环节中最大的一个 MTU 值,这个时候往往每个报文只有几百字节,这个报文大小我们称为叫 MSS ,所以每收到一个 MSS 小于这么大小的一个报文时其实就是一个网络事件。

这个时候,我们来看下 TCP 协议中许多事件是怎样和我们日常调用的一些接口(比如Accept、Read、Write、Close)是怎样关联在一起的?

TCP 协议与非阻塞接口

Nginx是如何处理网络事件的
请求建立 TCP 连接事件实际上是发送了一个 TCP 报文,通过上面第二部分讲解的那样的一个流程到达了 Nginx,对应的是读事件。因为对于 Nginx 来说,我读取到了一个报文,所以就是 Accept 建立链接事件。

如果是 TCP 连接可读事件,就是发送了一个消息,对于 Nginx 也是一个读事件,就是 Read 读消息。

如果是对端(也就是浏览器)主动地关掉了,相当于 windows 操作系统会去发送一个要求关闭链接的一个事件,对于 Nginx 来说还是一个读事件,因为他只是去读取一个报文。

那什么是写事件呢?当我们的浏览器需要向浏览器发送响应的时候,需要把消息写到操作系统中,要求操作系统发送到网络中,这就是一个写事件。

像这样的一些网络读写事件,通常在 Nginx 中或者任何一个异步事件的处理框架中,他会有个东西叫事件收集、分发器。会定义每类事件处理的消费者,也就是说事件是一个生产者,是通过网络中自动的生产到我们的 Nginx 中的,我们要对每种事件建立一个消费者。比如连接建立事件消费者,就是对 Accept 调用,HTTP 模块就会去建立一个新的连接。还有很多读消息或者写消息,在 HTTP 状态机中不同的时间段会调用不同的方法也就是每个消费者处理。

以上就是一个事件分发、消费器,包括 Aio 像异步读写磁盘事件,还有定时器事件,比如是否超时(worker_shutdown_timeout)。

Nginx 网络事件实例

上面介绍了网络报文的发送以及对应的 Nginx 中的网络事件,比如 Accept 建立一条新连接其实是收到一条读事件,接下来我们通过抓包来分析建立三次握手时时怎么样让 Nginx 收到读事件,使用的抓包工具是 Wireshark。
Nginx是如何处理网络事件的
首先我们安装 Wireshark 软件,并对 Nginx 所在 IP 和端口进行抓包,然后访问页面,在 TCP 层主要说两件事情:

•浏览器首先会打开这个页面,本地打开了一个 1875 端口,而 Nginx 启动的是 8080 端口。

•TCP 层主要做的是进程与进程之间通讯这件事。
Nginx是如何处理网络事件的
IP 层主要解决机器与机器之间怎样互相找到的问题。
Nginx是如何处理网络事件的
三次握手也就是 windows 先向 Nginx 发送了一次 [SYN],那么相反的 Nginx 所在的服务器也会向 windows 发送一个 [SYN],这个时候 Nginx 是没有感知到的,因为这个连接还是处于半打开的状态。直到这台 windows 服务器再次发送 [ACK] 到 Nginx 所在的服务器之上时,Nginx 所在的操作系统才会去通知 Nginx 我们收到了一个读事件,这个读事件对应是建立一个新连接,所以此时 Nginx 应该调用 Accept 方法去建立一个新的连接。

“Nginx是如何处理网络事件的”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: Nginx是如何处理网络事件的

本文链接: https://www.lsjlt.com/news/236345.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Nginx是如何处理网络事件的
    本篇内容介绍了“Nginx是如何处理网络事件的”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在深入了解 Nginx 各种原理及在极端场景下的...
    99+
    2023-06-04
  • C++ 函数在网络编程中如何处理网络事件?
    c++++ 中使用 select() 函数处理网络事件的方法如下:使用 fd_set 声明文件描述符集合,并初始化它们设置超时时间使用 select() 函数监控文件描述符的事件检查 s...
    99+
    2024-04-27
    c++ 网络编程
  • 如何处理HTML5 Canvas的事件
    本篇内容介绍了“如何处理HTML5 Canvas的事件”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!DOM...
    99+
    2024-04-02
  • Go语言是如何处理网络I/O操作的?
    欢迎各位小伙伴来到编程网,相聚于此都是缘哈哈哈!今天我给大家带来《Go语言是如何处理网络I/O操作的?》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以关注我...
    99+
    2024-04-04
  • win10未识别的网络如何处理
    如果您的Windows 10无法识别网络,您可以尝试以下解决方法:1. 检查网络连接:确保您的电脑已成功连接到网络,并且网络连接是稳...
    99+
    2023-09-15
    win10
  • 如何实现显示网络配置的批处理文件
    这篇文章主要介绍如何实现显示网络配置的批处理文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!显示网络配置.bat代码如下:@echo off :: 代码编写:3742668 ...
    99+
    2023-06-09
  • 如何理解Vue中的事件处理和事件修饰符
    这篇文章将为大家详细讲解有关如何理解Vue中的事件处理和事件修饰符,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 <div id="root"&...
    99+
    2023-06-25
  • OpenBSD对于网络安全事件响应和应急处理有何建议
    OpenBSD推荐以下几点建议来应对网络安全事件和应急处理: 及时更新系统:保持系统和软件的更新,及时安装最新的安全补丁和更新,...
    99+
    2024-04-02
  • 什么是JavaScript事件处理
    这篇文章主要介绍“什么是JavaScript事件处理”,在日常操作中,相信很多人在什么是JavaScript事件处理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”什么是Jav...
    99+
    2024-04-02
  • Python中如何处理ipaddress网络地址
    这篇文章主要为大家展示了“Python中如何处理ipaddress网络地址”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python中如何处理ipaddress网络地址”这篇文章吧。地址一般来说...
    99+
    2023-06-15
  • C++ 函数在网络编程中如何处理网络协议?
    c++++ 标准库提供以下函数处理网络协议:socket(): 创建新的网络套接字描述符。connect(): 将套接字连接到远程地址和端口。send()/recv(): 发送或接收数据...
    99+
    2024-04-27
    c++ 网络编程 标准库
  • 如何实现自定义配置网络ip、网关、dns的批处理文件
    这篇文章主要为大家展示了“如何实现自定义配置网络ip、网关、dns的批处理文件”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何实现自定义配置网络ip、网关、dns的批处理文件”这篇文章吧。自定...
    99+
    2023-06-09
  • 深入理解Linux网络——内核是如何接收到网络包的
    文章目录 一、相关实际问题二、数据是如何从网卡到协议栈的1、Linux网络收包总览2、Linux启动1)创建ksotfirqd内核线程2)网络子系统初始化3)协议栈注册4)网卡驱动初始化5)网...
    99+
    2023-09-06
    网络 linux tcp/ip 网卡 网络协议
  • 电脑显示网络受限如何处理
    如果您的电脑显示网络受限,可以尝试以下几种方法来解决问题:1. 检查网络连接:确保您的电脑已正确连接到网络。检查您的网络电缆或Wi-...
    99+
    2023-09-18
    电脑
  • C#中如何处理网络通信问题
    C#中如何处理网络通信问题,需要具体代码示例网络通信在现代编程中是一项非常重要的技术。无论是开发网络应用程序、网络游戏还是进行远程数据交互,我们都需要了解如何在C#中处理网络通信问题。本文将介绍C#中处理网络通信的一些常见方式,并提供相应的...
    99+
    2023-10-22
    网络通信 问题解决 C#处理
  • javascript事件处理的过程是什么
    本文小编为大家详细介绍“javascript事件处理的过程是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“javascript事件处理的过程是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,...
    99+
    2024-04-02
  • win7没有网络适配器如何处理
    如果您在Windows 7中找不到网络适配器,可能是因为驱动程序未安装或已损坏。下面是一些解决方法:1. 重新启动计算机:有时,重新...
    99+
    2023-09-29
    win7
  • 如何在Python中处理网络安全的问题
    如何在Python中处理网络安全的问题随着互联网的普及和发展,网络安全问题日益突出。对于程序员而言,在开发过程中要时刻关注网络安全,防止黑客攻击和数据泄露。Python作为一种高级编程语言,具有强大的网络编程功能,提供了丰富的库和模块来处理...
    99+
    2023-10-22
    网络安全 Python 处理
  • 如何在Python中处理网络爬虫的问题
    如何在Python中处理网络爬虫的问题网络爬虫是获取互联网上信息的重要方式,而Python作为一种简单易用且功能强大的编程语言,被广泛用于网络爬虫开发。本文将介绍如何在Python中处理网络爬虫的问题,并提供具体的代码示例。一、网络爬虫的基...
    99+
    2023-10-22
    Python 网络爬虫 处理问题
  • Vue事件处理函数如何绑定
    这篇文章主要介绍“Vue事件处理函数如何绑定”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue事件处理函数如何绑定”文章能帮助大家解决问题。在 JS 中「事件」是不需要绑定的,浏览器自带了许多的事...
    99+
    2023-07-05
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作