美文网首页
网络分层环境下的程序运行原理

网络分层环境下的程序运行原理

作者: d390347c4084 | 来源:发表于2019-01-31 14:56 被阅读26次

如果大家简单了解过网络运行的原理的话应该都知道,网络协议是分为不同的层级结构的,下面我们就通过案例分析来了解一下,网络分层之后的程序运行步骤都有哪些。

网络为什么要分层?

这里我们先探讨一个问题,网络为什么要分层?因为,是个复杂的程序都要分层。

理解计算机网络中的概念,一个很好的角度是,想象网络包就是一段 Buffer,或者一块内存,是有格式的。同时,想象自己是一个处理网络包的程序,而且这个程序可以跑在电脑上,可以跑在服务器上,可以跑在交换机上,也可以跑在路由器上。你想象自己有很多的网口,从某个口拿进一个网络包来,用自己的程序处理一下,再从另一个网口发送出去。

当然网络包的格式很复杂,这个程序也很复杂。复杂的程序都要分层,这是程序设计的要求。比如,复杂的电商还会分数据库层、缓存层、Compose 层、Controller 层和接入层,每一层专注做本层的事情。

程序是如何工作的?

我们可以简单地想象“你”这个程序的工作过程。

当一个网络包从一个网口经过的时候,你看到了,先先看看要不要请进来,处理一把。有的网口配置了混杂模式,凡是经过的,全部拿进来。

拿进来以后,就要交给一段程序来处理。于是,你调用 process_layer2(buffer)。当然,这是一个假的函数。但是你明白其中的意思,知道肯定是有这么个函数的。那这个函数是干什么的呢?从 Buffer 中,摘掉二层的头,看一看,应该根据头里面的内容做什么操作。

假设你发现这个包的 MAC 地址和你的相符,那说明就是发给你的,于是需要调用 process_layer3(buffer)。这个时候,Buffer 里面往往就没有二层的头了,因为已经在上一个函数的处理过程中拿掉了,或者将开始的偏移量移动了一下。在这个函数里面,摘掉三层的头,看看到底是发送给自己的,还是希望自己转发出去的。

如何判断呢?如果 IP 地址不是自己的,那就应该转发出去;如果 IP 地址是自己的,那就是发给自己的。根据 IP 头里面的标示,拿掉三层的头,进行下一层的处理,到底是调用 process_tcp(buffer) 呢,还是调用 process_udp(buffer) 呢?

假设这个地址是 TCP 的,则会调用 process_tcp(buffer)。这时候,Buffer 里面没有三层的头,就需要查看四层的头,看这是一个发起,还是一个应答,又或者是一个正常的数据包,然后分别由不同的逻辑进行处理。如果是发起或者应答,接下来可能要发送一个数据包;如果是一个正常的数据包,就需要交给上层了。交给谁呢?是不是有 process_http(buffer) 函数呢?

没有的,如果你是一个网络包处理程序,你不需要有 process_http(buffer),而是应该交给应用去处理。交给哪个应用呢?在四层的头里面有端口号,不同的应用监听不同的端口号。如果发现浏览器应用在监听这个端口,那你发给浏览器就行了。至于浏览器怎么处理,和你没有关系。

浏览器自然是解析 HTML,显示出页面来。电脑的主人看到页面很开心,就点了鼠标。点击鼠标的动作被浏览器捕获。浏览器知道,又要发起另一个 HTTP 请求了,于是使用端口号,将请求发给了你。

你应该调用 send_tcp(buffer)。不用说,Buffer 里面就是 HTTP 请求的内容。这个函数里面加一个 TCP 的头,记录下源端口号。浏览器会给你目的端口号,一般为 80 端口。

然后调用 send_layer3(buffer)。Buffer 里面已经有了 HTTP 的头和内容,以及 TCP 的头。在这个函数里面加一个 IP 的头,记录下源 IP 的地址和目标 IP 的地址。

【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!

相关文章

  • 网络分层环境下的程序运行原理

    如果大家简单了解过网络运行的原理的话应该都知道,网络协议是分为不同的层级结构的,下面我们就通过案例分析来了解一下,...

  • PHP的学习

    PHP运行领域 。 PHP运行环境 PHP网页运行原理 安装apache 配置apache以运行PHP程序 用法1...

  • 【笔记】《计算机网络:自顶向下方法Sixth》Chapter t

    1.应用层协议原理 研发网络应用程序的核心是写出能够运行在不同的端系统和通过网络彼此通信的程序。 A.网络应用程序...

  • 《计算机网络——自顶向下方法》应用层——应用层协议原理

    应用层协议原理 网络应用程序的核心是写出能够运行在不同的端系统和通过网络彼此通信的程序。研发新的应用程序时需要编写...

  • Docker实战

    概念 镜像是容器运行的基石。镜像是一个包含程序运行必要依赖环境和代码的只读文件,它采用分层的文件系统,将每一次改变...

  • 2 (计算机网络)理解网络协议的工作模式

    网络为什么要分层? 网络为什么要分层?因为,是个复杂的程序都要分层。 理解计算机网络中的概念,一个很好的角度是,想...

  • Spark 运行时环境

    Spark运行原理 构建应用程序运行时 首先根据应用程序资源需求构建一个运行时环境,通过与资源管理器交互来完成,通...

  • 每日一题:Java异常处理

    什么是异常 在理想情况下,程序总会运行在很完美的环境中,网络不会终端,文件一定存在,程序不会有 BUG。但是,理想...

  • centOS下php 程序运行环境

    一键安装LNMP 环境配置 mysql配置 配置mysql外部访问权限 创建数据库 Nginx配置 配置web 根...

  • Docker 网络原理

    Docker 网络原理 1. Docker 网络理论 容器网络实质上是由 Dokcer 为应用程序所创造的虚拟环境...

网友评论

      本文标题:网络分层环境下的程序运行原理

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