后端工程师,老师教的七层网络模型你用在了哪里?(二)

简介: 计算机网络算是计算机课里公认比较难的课之一。OSI七层网络模型,这个词估计大部分人都还记得,但还能完全的背出具体都有哪些层吗?更不用说每层具体的含义,我是有点模糊了。除了具体的开发语言,数据结构和算法算是平时用到比较多的课程了。 都说学以致用,那么这个网络模型对于我们实际工作中有什么用途呢?比如我写了个web页面,或者一个Restful API,这和七层网络模型是怎么对应的呢? 首先从我们熟悉的请求处理过程开始。

3. TCP/IP协议

TCP/IP协议,英文为Transmission Control Protocol/Internet Protocol,是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇,当然本文的重点HTTP协议也在其中, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。所以HTTP协议是TCP/IP协议簇中的一员。

3.1 五层的体系结构?

四层结构:TCP/IP是一个四层的体系结构,它包含应用层、运输层、网际层和网络接口层,见下图中的b。


那么TCP/IP的四层的体系结构和OSI 的七层协议有什么关系呢?


OSI 的体系结构的概念清楚、理论也较完整,但它是一个概念模型,相对既复杂又不实用。所以TCP/IP采用了四层结构。不过从实质上讲,TCP/IP只有最上面的三层,因为最下面的网络接口层并没有什么具体内容。


五层结构:五层结构又是什么呢?因此在学习计算机网络的原理时往往采取对上面两个协议的折中的办法,即综合OSI和TCP/IP的优点,采用一种只有五层协议的体系结构(下图中的c),这样既简洁又能将概念阐述清楚。有时为了方便,也可把最底下两层称为网络接口层。


下图说明了这几种结构的关系:


63.png

63.png

3.2 HTTP协议与TCP/IP协议的关系

常见的HTTP服务有Apache、 Nginx 、IIS等,比较通用的机制就是创建一个进程监听80(443)接口,及时发现客户端发来的连接请求。当监听到连接请求并成功建立TCP连接之后,客户端就向服务器发送HTTP请求,服务器解析该请求并返回对应的结果,最后,释放TCP连接。


从三次握手的角度说一下HTTP协议与TCP/IP协议的关系:


用户在发出一个请求后,HTTP协议首先要和Web服务器建立 TCP连接。这需要使用三次握手。当握手两次之后(即过了一个RTT时间后),客户端就把HTTP请求报文,作为建立TCP连接的第三次握手的数据,发送给HTTP服务器。服务器收到HTTP请求报文后,就把所请求的文档作为响应报文返回给客户端。


大概的机制如下图:


64.png

64.png

从图中可以看出,向服务器请求一个文档所需的总时间等于该文档的传输时间(与文档大小成正比)加上两倍的RTT 时间(一个RTT用于连接TCP连接,另一个RTT用于请求和接收文档。)。


这也体现了HTTP/1.0的主要缺点,就是每个请求都要有两倍的RTT 的开销。若一个主页上有很多链接的对象(如图片等)需要依次进行链接,那么每一次链接下载都导致2倍RTT的开销。另一种开销就是客户端和服务器每一次建立新的TCP连接都要分配缓存和变量。特别是HTTP服务器往往要同时服务于大量客户的请求,所以这种非持续连接会使HTTP服务器的负担很重。好在浏览器都能够打开5~10个并行的TCP连接,而每一个TCP连接处理客户的一个请求。因此,使用并行TCP连接可以缩短响应时间。


从这个痛点出发,HTTP/1.1协议较好地解决了这个问题,它使用了持续连接(persistent connection)。所谓持续连接就是HTTP服务器在发送响应后仍然在一段时间内保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文。这并不局限于传送同一个页面上链接的文档,而是只要这些文档都在同一个服务器上就行。


目录
相关文章
|
2月前
|
C++
基于Reactor模型的高性能网络库之地址篇
这段代码定义了一个 InetAddress 类,是 C++ 网络编程中用于封装 IPv4 地址和端口的常见做法。该类的主要作用是方便地表示和操作一个网络地址(IP + 端口)
162 58
|
2月前
|
网络协议 算法 Java
基于Reactor模型的高性能网络库之Tcpserver组件-上层调度器
TcpServer 是一个用于管理 TCP 连接的类,包含成员变量如事件循环(EventLoop)、连接池(ConnectionMap)和回调函数等。其主要功能包括监听新连接、设置线程池、启动服务器及处理连接事件。通过 Acceptor 接收新连接,并使用轮询算法将连接分配给子事件循环(subloop)进行读写操作。调用链从 start() 开始,经由线程池启动和 Acceptor 监听,最终由 TcpConnection 管理具体连接的事件处理。
60 2
|
2月前
基于Reactor模型的高性能网络库之Tcpconnection组件
TcpConnection 由 subLoop 管理 connfd,负责处理具体连接。它封装了连接套接字,通过 Channel 监听可读、可写、关闭、错误等
85 1
|
2月前
|
JSON 监控 网络协议
干货分享“对接的 API 总是不稳定,网络分层模型” 看电商 API 故障的本质
本文从 OSI 七层网络模型出发,深入剖析电商 API 不稳定的根本原因,涵盖物理层到应用层的典型故障与解决方案,结合阿里、京东等大厂架构,详解如何构建高稳定性的电商 API 通信体系。
|
2月前
基于Reactor模型的高性能网络库之Poller(EpollPoller)组件
封装底层 I/O 多路复用机制(如 epoll)的抽象类 Poller,提供统一接口支持多种实现。Poller 是一个抽象基类,定义了 Channel 管理、事件收集等核心功能,并与 EventLoop 绑定。其子类 EPollPoller 实现了基于 epoll 的具体操作,包括事件等待、Channel 更新和删除等。通过工厂方法可创建默认的 Poller 实例,实现多态调用。
198 60
|
2月前
基于Reactor模型的高性能网络库之Channel组件篇
Channel 是事件通道,它绑定某个文件描述符 fd,注册感兴趣的事件(如读/写),并在事件发生时分发给对应的回调函数。
159 60
|
2月前
|
安全 调度
基于Reactor模型的高性能网络库之核心调度器:EventLoop组件
它负责:监听事件(如 I/O 可读写、定时器)、分发事件、执行回调、管理事件源 Channel 等。
179 57
|
2月前
基于Reactor模型的高性能网络库之时间篇
是一个用于表示时间戳(精确到微秒)**的简单封装类
130 57
|
28天前
|
算法 安全 网络安全
【多智能体系统】遭受DoS攻击的网络物理多智能体系统的弹性模型预测控制MPC研究(Simulink仿真实现)
【多智能体系统】遭受DoS攻击的网络物理多智能体系统的弹性模型预测控制MPC研究(Simulink仿真实现)
|
4月前
|
机器学习/深度学习 搜索推荐 PyTorch
基于昇腾用PyTorch实现CTR模型DIN(Deep interest Netwok)网络
本文详细讲解了如何在昇腾平台上使用PyTorch训练推荐系统中的经典模型DIN(Deep Interest Network)。主要内容包括:DIN网络的创新点与架构剖析、Activation Unit和Attention模块的实现、Amazon-book数据集的介绍与预处理、模型训练过程定义及性能评估。通过实战演示,利用Amazon-book数据集训练DIN模型,最终评估其点击率预测性能。文中还提供了代码示例,帮助读者更好地理解每个步骤的实现细节。

热门文章

最新文章