你要问我应用层?我就和你扯扯扯(我问你需要)

你要问我应用层?我就和你扯扯扯下图是一个通过套接字进行通信的流程图 从图可以看到,Socket 属于主机或者服务进程的内部接口,由应用程序开发人员进行控制,两台端系统之间进行通信会通过 TCP 的缓

下图是通过socket通信的流程图。

从图中可以看出,套接字属于主机或服务进程的内部接口,两个端系统之间的通信通过TCP缓冲区发送到另一端系统的TCP缓冲区。套接字从TCP 缓冲区读取消息以供应用程序内部使用。

由于套接字是用于建立网络应用程序的可编程接口,因此也称为应用程序和网络之间的应用程序编程接口(API)。应用程序开发人员可以控制套接字的内部细节,但无法控制传输层发送。只能选择传输层传输协议,也可以选择最大缓冲、最大报文长度等传输层发送参数。

进程寻址

上面我们提到网络应用程序互相发送消息,但是我们如何决定将它们发送到哪里呢?不知道该发送到哪里。这时候就需要有一种机制来识别对方的地址。这是对方的唯一地址。 该地址是IP地址。我们将在后面的文章中详细解释什么是IP 地址,但现在您只需要知道IP 是一个32 位的数字,它唯一标识Internet 上的主机地址。

知道IP地址就够了吗?我们知道您的计算机可能正在运行多个网络应用程序,但是您如何确定哪个网络应用程序接收了您发送的消息呢?因此,此时,您还需要知道您的网络应用程序的端口号。例如,Web应用程序应标记为端口80,邮件服务器程序应标记为端口25。

应用程序如何选择运输服务

Application是应用层协议,属于4层互联网协议,我们知道4层协议需要互相帮助来完成自己的工作。好的,现在我们只有一个应用层协议,但是我们需要发送一个数据包。我如何发送数据包?你似乎知道你的目的地在哪里,但你如何到达那里呢?您愿意步行、乘坐公共汽车、地铁还是乘坐出租车?

应用程序有多种用于发送消息的传输选项,同时考虑数据传输的可靠性、吞吐量、定时和安全性等。

数据传输可靠吗?

我们之前讨论过计算机网络遇到数据包丢失的问题。数据包丢失问题的严重性与网络应用程序的性质有关,无论是电子邮件、文件传输还是远程主机进程的问题。传输网络文档时,数据丢失可能会造成非常严重的后果。对于网络游戏之类的事情,多人视频会议的影响可能相对较小。为此,还必须首先考虑数据传输的可靠性。因此,如果一个协议提供了这样一种保证数据传送的服务,那么它就被认为提供了可靠的数据传输(reliable data transfer),而能够容忍数据丢失的应用程序就被称为丢失容忍应用程序(loss lerantable applications)。

吞吐量

应用层协议定义如下:

交换的消息类型(例如请求消息和响应消息)。消息中各个字段的详细公开描述,即消息中包含的信息的含义。字段,什么时候一个进程,如何发送消息以及如何响应消息。

因特网能够提供的运输服务

域名系统(DNS):一种用于将网络设备名称映射到IP 地址的网络服务。文件传输协议(FTP):用于实现交互式文件传输功能。简单邮件传输协议(SMTP):用于实现电子邮件传输功能。超文本传输协议(HTTP):用于实现Web 服务。远程登录协议(Telnet):用于实现远程登录功能。

TCP

Web(万维网)是全球广域网,是一种URL 以www 开头的网络。我们通常所说的Web,实际上是指建立在互联网上的网络服务,互联网是HTTP协议的主要载体。说说HTTP协议,HTTP协议是Web程序员必须学习和理解的协议,而且必须理解透彻。

超文本传输协议可以执行文本分段。超文本、传输和协议之间的关系如下:

根据范围协议的大小发送超文本。下面,我们将分别对这三个排名进行解释。

UDP

在互联网的早期,你输入的信息只能存储在本地,无法与其他计算机交换。我们存储的信息通常以文本或简单字符的形式存在。文本是可以被计算机解析的有意义的二进制数据包。随着互联网的快速发展,在能够在两台计算机之间传输数据之后,人们不仅可以在两台计算机之间传输文本,还可以传输图像、音频、视频,我们还希望能够对文本和图像进行点击。当超链接被跳转时,文本的含义被扩展,这种语义扩展的文本称为超文本。

应用层协议

因此,如上所述,两台计算机之间形成互连关系进行通信,并将存储的超文本解析为二进制数据包并传输给传输载体(同轴电缆、电话线、光缆等)负责。用于转换。二进制数据包将数据从一台计算机终端发送到另一台计算机终端的过程称为传输。

发送数据包的一方通常称为请求方,接收二进制数据包的一方称为响应方。请求者和响应者可以互换;请求者可以作为响应者接收数据,响应者可以作为请求者请求数据。

如图所示,A和B是两个不同的端系统;最初,A作为请求者向B请求信息交换,B作为响应者提供信息。随着时间的推移,B 作为请求者可以向A 请求信息交换,然后,作为响应者,A 也可以响应B 请求的信息。

应用层协议分类

协议一词不仅限于互联网,还包括关于一对夫妇成功找到工作后将在哪里吃饭的协议。我们将与您签订劳动合同。这是双方之间的协议。雇佣关系也是协议。请注意,一人达成的协议即视为多人同意。

那么什么是网络协议呢?

网络协议是用于在网络(包括互联网)内传输和管理信息的规范。正如人类需要遵循一定的规则来相互通信一样,计算机也需要遵循一定的规则来相互通信。这些规则称为网络协议。

没有网络协议的互联网是混乱的。正如人类社会一样,人们的行为受到法律的限制,互联网的末端系统也必然受到通信的限制。协议。

综上所述,什么是HTTP?这个可以用下面的经典总结来回答: HTTP 是一组用于在计算机世界中的两点之间传输文本、图像、音频和视频等超文本数据的规则和规范。

Web 和 HTTP

HTTP 允许持久和非持久连接。下面我们重点介绍这两种方法。

什么是超文本

首先,我们来谈谈持久连接的HTTP。

想知道当您在浏览器中输入URL 时会发生什么吗?让我们仔细看看一个示例。假设访问的URL地址为http://www.someSchool.edu/someDepartment/home.index。当您键入URL 并单击Enter 时,浏览器将执行以下操作:

DNS服务器首先进行域名映射,找到访问www.someSchool.edu的地址。然后,HTTP 客户端进程在端口80 上启动到服务器www.someSchool.edu 的TCP 连接(端口80 是默认端口)。 HTTP)。套接字连接到客户端和服务器进程。 HTTP 客户端通过套接字向服务器发送HTTP 请求消息。此消息包含路径为someDepartment/home.index 的资源。稍后我们将更详细地讨论HTTP 请求消息。 HTTP 服务器通过套接字接收消息,解析请求,从内存(RAM 或磁盘)检索对象www.someSchool.edu/someDepartment/home.index,将检索到的对象封装在HTTP 响应消息中,然后发送。马苏。并通过socket发送给客户端。 HTTP服务器立即通知TCP断开TCP连接。事实上,必须等到客户端接受响应消息后才能断开TCP 连接。 HTTP客户端接受响应消息后,TCP连接关闭。 HTTP 客户端从响应中提取消息中的HTML 响应文件,检查HTML 文件,并循环访问消息中的其他内部对象。检查完成后,HTTP客户端通过显示器将相应的资源显示给用户。

至此,输入URL并回车的整个过程就结束了。以上流程描述了一个简单的请求和响应过程。实际的请求-响应情况可能比上述过程复杂得多。

上述步骤演示了非持久连接的使用,其中每个TCP 链接在服务器完成传输后关闭。每个TCP 连接仅发送一个请求和一个响应消息。

什么是传输

非持久连接有一些缺点。首先,必须为每个请求的对象建立并维护一个全新的连接。每个这样的连接都会给Web 服务器带来很大的负担,因为它必须在客户端和服务器上分配TCP 缓冲区并维护TCP 变量。这是因为网络服务器可能必须同时服务数百甚至数千个客户请求。

在HTTP 1.1 持久连接中,服务器在发送响应后保持TCP 连接打开。后续请求和响应消息可以通过同一客户端和服务器之间的同一连接发送。一般来说,如果某个跃点连接在一定(可配置的)时间后仍未使用,则HTTP 服务器应关闭该连接。

什么是协议

HTTP 请求和响应过程相对简单,但如果您认真的话,您可以扩展很多东西,包括HTTP 消息的样子。它是一种作曲格式吗?下面我来解释一下

HTTP 协议由三个主要部分组成。

Start line(起始行):描述请求或响应的基本信息。 标头字段(headers):使用键值格式进一步描述消息。不必要。纯文本可以是二进制数据,例如照片或视频。

起始行和头字段成为请求或响应头(统称为头),消息体也称为实体(body)。 HTTP 协议规定发送的每条消息都必须有标头,但不能有正文。即需要包含头信息,不需要包含实体信息。并且header 和body 之间必须有一个空行(CRLF)。我认为这可以用如下图所示的图表来表达。

让我们使用上面的示例来看看http 请求消息。

如图所示,这是http://www.someSchool.edu/someDepartment/home.index 请求的请求标头。首先,如果您查看此HTTP 消息,您会注意到该消息是用常规ASCII 文本编写的。这将有助于人们理解它。您现在可以看到每行和下一行之间有一个换行符,并且最后一行(在请求标头之后)添加了回车符和换行符。

每条消息的起始行由三个字段组成:方法、URL 字段和HTTP 版本字段。

持久性连接和非持久性连接

HTTP请求方法大致可以分为八种类型。

GET 用于请求访问由URI 标识的资源。服务器解析指定资源并返回响应内容。也就是说,如果请求的资源是文本,则将原样返回。

尽管POST 发送实体并且GET 方法也发送正文信息,但您通常不使用GET 发送实体信息,而是使用POST。

PUT 传输文件PUT 方法用于传输文件。与FTP协议中的文件上传类似,文件的内容必须包含在请求消息的正文中,并保存在请求URI指定的位置。

但HTTP PUT方法本身没有验证机制,允许任何人上传文件,存在安全隐患,因此该方法在网站上并不常用。 PUT 方法的使用可以与Web 应用程序验证机制和采用REpresentational State Transfer (REST) 标准的类似网站架构设计结合使用。

HEAD 获取响应标头。 HEAD 方法与GET 方法相同,只是它不返回消息的主要部分。用于检查URI的有效性、资源的更新日期和时间等。

DELETE 删除文件。 DELETE 方法与PUT 方法相反。 DELETE 方法删除请求URI 指定的资源。

OPTIONS 查询支持的方法。 OPTIONS方法用于查询请求URI中指定的资源支持的方法。

TRACE 跟踪路径。 TRACE 方法是一种允许Web 服务器将先前的请求通信环回至客户端的方法。

CONNECT需要使用隧道协议来连接代理,CONNECT方法需要在与代理服务器通信时建立隧道,以实现使用隧道协议的TCP通信。 SSL(安全套接字层)和TLS(传输层安全)协议主要用于加密通信内容并通过网络隧道发送。

最常用的方法是GET 和POST 方法。在这里了解其他方法。以下是HTTP1.0 和HTTP1.1 支持的方法列表。

非持久性连接

HTTP 协议使用URI 来定位Internet 上的资源。 URI 的某些功能允许您访问Internet 上任何位置的资源。 URL 包含所请求对象的标识符。在上面的示例中,浏览器正在请求对象/somedir/page.html 的资源。

让我们通过完整域名来解析URL

例如,URL http://www.example.com:80/path/to/myfile.html?key1=value1key2=value2#SomewhereInTheDocument 非常复杂,但是一旦您理解了这个URL,其他URL 就可以了。

首先看到的是http

http://告诉浏览器使用哪种协议。大多数Web 资源通常使用HTTP 协议或其安全版本HTTPS 协议。此外,浏览器还知道如何处理其他协议。例如,mailto: 协议告诉浏览器打开电子邮件客户端,ftp: 协议告诉浏览器处理文件传输。

第二个出场的是主持人

www.example.com 既是一个域名,也是一个管理域名的组织。这表明应向网络上的哪台主机发出请求。当然,您也可以直接向主机的IP地址发起请求。然而,直接使用IP 地址并不常见。

第三次出现是在港口。

前面提到,两台主机之间发起TCP连接需要两个条件:主机+端口。它代表访问Web 服务器上资源的入口点。如果正在访问的Web 服务器允许使用HTTP 协议的标准端口(HTTP 为80,HTTPS 为443)访问其资源,则通常会省略此部分。否则,端口是URI 的必需部分。

以上是您需要包含在请求URL 中的部分。下面是该URL的具体请求资源路径:

第四次出现的是路径

/path/to/myfile.html 是Web 服务器上资源的路径。它以端口之后的第一个/开始,并在数字? 之前结束。中间的每个/代表一种层级(上级和下级)关系。此URL 请求的资源是HTML 页面。

该路径后面紧跟着查询参数。

?key1=value1key2=value2 是提供给Web 服务器的附加参数。对于GET 请求,它通常包含请求URL 参数。对于POST 请求,参数不会立即添加到路径之后。参数是由符号分隔的键值对列表。 key1=value1 为第一对参数,key2=value2 为第二对参数

参数后面是锚点

#SomewhereInTheDocument 是资源本身的一部分的锚点。锚点代表资源内的“书签”,并向浏览器指示该“加书签”点的内容。 例如,在HTML 文档中,浏览器滚动到定义锚点的位置。在视频或音频文档中,浏览器滚动到锚点表示的时间。请注意,# 符号后面的部分(也称为片段标识符)永远不会随请求发送到服务器。

持久性连接的 HTTP

自从互联网出现以来,电子邮件在互联网上变得流行。与普通邮件一样,电子邮件是一种异步通信媒介。这意味着您可以在方便的时候与其他人交换电子邮件,而无需在发送前与他们沟通。现代电子邮件具有许多强大的功能,例如带有附件、超链接、HTML 格式文本和图像的消息。单击此处查看电子邮件系统的概述

从该图中,您可以看到有三个主要组件:用户代理、邮件服务器和简单邮件传输协议(SMTP)。接下来,我们将解释发送和接收电子邮件的过程。

用户代理允许用户阅读、回复、转发、保存和撰写消息。 Microsoft Outlook 和Apple Mail 是电子邮件用户代理的示例。当用户完成电子邮件撰写后,用户代理将电子邮件发送到邮件服务器。此时,如果接收用户想要阅读该电子邮件,则该用户发送的电子邮件将被放置在邮件服务器的外发消息队列中。用户代理直接从传出消息队列中检索消息。

邮件服务器是整个邮件系统的核心。每个收件人在邮件服务器上都有一个邮箱。用户的邮箱管理和维护发送给用户的消息。典型的电子邮件发送过程是由发件人的用户代理发起,发送到发件人的邮件服务器,然后发送到收件人的邮件服务器,分发到收件人的邮箱。当接收用户想要从其邮箱中读取邮件时,邮件服务器会对用户进行身份验证。如果发件人发送的电子邮件未成功传递到收件人的服务器,则发件人的用户代理会将电子邮件存储在消息队列中,然后重新发送(通常每30 分钟一次)(如果消息仍然失败)。一段时间后,服务器删除消息队列中的消息,并通过电子邮件通知发送者。

SMTP 是Internet 电子邮件的主要应用层协议。 SMTP还使用TCP作为传输层协议来保证数据的可靠传输。

HTTP 报文格式

为了解释SMTP 的基本工作原理,让我们看一下以下常见场景。

假设Alice 想向Bob 发送一条简单的ASCII 消息。

Alice 呼叫邮件代理,提供Bob 的电子邮件地址(例如bob@someschool.edu),撰写电子邮件消息,并指示用户代理发送该消息。

Alice 的用户代理将消息发送到邮件服务器,并将其放置在消息队列中。

在Alice 的邮件服务器上运行的SMTP 客户端检测消息队列中的消息,并创建到在Bob 的邮件服务器上运行的SMTP 服务器的TCP 连接。

初始SMTP 握手后,SMTP 客户端通过TCP 连接发送Alice 的电子邮件。

在Bob的邮件服务器上,SMTP服务器接收电子邮件,Bob的邮件服务器将电子邮件放入Bob的邮箱中。

当Bob 想要阅读电子邮件时,他会调用用户代理来阅读电子邮件。

上面的电子邮件实际上是引用一系列ASCII 代码的消息,在SMTP 发送电子邮件之前,必须将二进制多媒体数据编码为ASCII 代码并发送。

SMTP 通常不使用中间邮件服务器来发送邮件,即使这两个邮件服务器位于世界的两端。 TCP 连接通常直接连接到Alice 的邮件服务器和Bob 的邮件服务器。

现在您已经知道了在两个邮件服务器之间发送电子邮件的一般流程,那么SMTP 是如何将电子邮件从Alice 的邮件服务器发送到Bob 的呢?主要分为三个步骤:

建立连接:此阶段,SMTP客户端请求与服务器的25端口建立TCP连接。连接建立后,SMTP 服务器和客户端

户就开始相互通告自己的域名,同时确认对方的域名。邮件传送:一旦连接建立后,就开始邮件传输。SMTP 依靠 TCP 能够将邮件准确无误地传输到接收方的邮件服务器中。SMTP 客户将邮件的源地址、目的地址和邮件的具体内容传递给 SMTP 服务器,SMTP 服务器进行相应的响应并接收邮件。连接释放:SMTP 客户发出退出命令,服务器在处理命令后进行响应,随后关闭 TCP 连接。
下面我们分析一个实际的 SMTP 邮件发送过程,以下统称为SMTP客户(C)和 SMTP服务器(S)。客户的主机名为 crepes.fr,服务器的主机名为 hamburger.edu。以 C: 开头的 ASCII 码文本就是客户交给 TCP 套接字的那些行,以 S: 开头的 ASCII 码则是服务器发送给其 TCP 套接字的那些行。一旦创建了连接,就开始了如下过程

S: 220 hamburger.edu
C: HELO crepes.fr
S: 250 Hello crepes.fr, pleased to meet you
C: MAIL FROM: alice@crepes.fr
S: 250 alice@crepes.fr … Sender ok
C: RCPT TO: bob@hamburger.edu
S: 250 bob@hamburder.edu … Recipient ok
C: DATA
S: 354 Enter mail, end with “.” on a line by itself
C: Do you like ketchup?
C: How about pickles?
C: .
S: 250 Message accepted for delivery
C: QUIT
S: 221 hamburger.edu closing connection

在上述例子中,客户从邮件服务器 crepes.fr 向邮件服务器 hamburger.edu 发送了一个报文 (\” Do you like ketchup? How about pickles? \”) 。作为对话的一部分,该客户发送了 5 条命令: HELO(是 HELLO 的缩写)、 MAMIL FROM、RCPT TO、DATA 以及 QUIT。这些命令都是自解释的。

什么是自解释,就是不需要再进行解释了,命令自己就能解释自己所要表述的功能。

上面是一个简单的 SMTP 交换过程,包括了连接建立、邮件传送和连接释放三个具体过程

首先建立 TCP 连接、SMTP 调用 TCP 协议的25号端口监听连接请求,然后客户端发送 HELO 指令用来表明自己是发送方的身份,然后服务端作出响应。然后,客户端发送 MAIL FROM 命令,表明客户端的邮件地址是 <alice@crepes.fr>,服务器以 OK 作为响应,表明准备接收。客户端发送 RCPT TO 表明接收方的电子邮件地址,可以有多个 RCPT 行,即一份邮件可以同时发送给多个收件人。服务器端则表示是否愿意为收件人接收邮件。协商结束后,客户端用 DATA 命令发送信息,结束标志是CRLF.CRLF ,也就是 回车换行.回车换行。最后,控制交互的任一端可选择终止会话,为此它发出一个 QUIT 命令,另一端用命令221响应,表示同意终止连接,双方将关闭连接。

上述过程中会涉及几个类似 HTTP 的状态码。250 就表示 OK ,类似 HTTP 的 200。在命令成功时,服务器返回代码250,如果失败则返回代码550(命令无法识别)、451(处理时出错)、452(存储空间不够)、421(服务器不可用)等,354则表示开始信息输入。

SMTP 的报文会有局限性,SMTP 的局限性表现在只能发送 ASCII 码格式的报文,不支持中文、法文、德文等,它也不支持语音、视频的数据。通过 MIME协议,对 SMTP 补充。MIME 使用网络虚拟终端(NVT)标准,允许非ASCII码数据通过SMTP传输。

SMTP 与 HTTP 的对比

HTTP 是我们学习的第一个应用层协议,SMTP 是我们学习的第二个应用层协议,那么我们就对这两个协议进行比对。

这两个协议都用于从一台主机向另一台主机传送文件:HTTP 从 Web 服务器向 Web 客户端(通常是浏览器)传送文件,SMTP 是从一个邮件服务器向另一个邮件服务器传送文件(即电子邮件报文)。

这两个协议也会有几个重要的区别

首先,HTTP 是一个 拉协议(pull protocol),客户端发送请求,请求获取服务端的资源,然后服务端进行响应,把需要下载的文件传输给客户端;而 SMTP 是一个 推协议(push protocol),SMTP 的客户端会主动把邮件推送给 SMTP 的服务端。第二个区别是,SMTP 要求每个报文都采用 7 比特的 ASCII 码格式,如果某报文包含了非 7 比特的 ASCII 自负或二进制数据,则该报文必须按照7比特 ASCII 码进行编码。HTTP 数据则不受这种限制。第三个区别是如何处理一个既包含文本又包含图形的文档,HTTP 把每个对象封装到它自己的 HTTP 响应报文中,而 SMTP 则把所有报文对象放在一个报文之中。

DNS 因特网目录服务协议

试想一个问题,我们人类可以有多少种识别自己的方式?可以通过身份证来识别,可以通过社保卡号来识别,也可以通过驾驶证来识别,尽管我们有多种识别方式,但在特定的环境下,某种识别方法可能比另一种方法更为适合。因特网上的主机和人类一样,可以使用多种识别方式进行标识。互联网上主机的一种标识方法是使用它的 主机名(hostname) ,如 www.facebook.com、 www.google.com 等。但是这是我们人类的记忆方式,路由器不会这么理解,路由器喜欢定长的、有层次结构的 IP地址,so,还记得 IP 是什么吗?

IP 地址现在简单表述一下,就是一个由 4 字节组成,并有着严格的层次结构。例如 121.7.106.83 这样一个 IP 地址,其中的每个字节都可以用 . 进行分割,表示了 0 – 255 的十进制数字。(具体的 IP 我们会在后面讨论)

然而,路由器喜欢的是 IP 地址进行解析,我们人类却便于记忆的是网址,那么路由器如何把 IP 地址解析为我们熟悉的网址地址呢?这时候就需要 DNS 出现了。

文末

从转行到现在,差不多两年的时间,虽不能和大佬相比,但也是学了很多东西。我个人在学习的过程中,习惯简单做做笔记,方便自己复习的时候能够快速理解,现在将自己的笔记分享出来,和大家共同学习。

个人将这段时间所学的知识,分为三个阶段:

第一阶段:HTML&CSS&JavaScript基础

第二阶段:移动端开发技术

第三阶段:前端常用框架

推荐学习方式:针对某个知识点,可以先简单过一下我的笔记,如果理解,那是最好,可以帮助快速解决问题;
第一阶段:HTML&CSS&JavaScript基础

第二阶段:移动端开发技术

第三阶段:前端常用框架

推荐学习方式:针对某个知识点,可以先简单过一下我的笔记,如果理解,那是最好,可以帮助快速解决问题;
大厂的面试难在,针对一个基础知识点,比如JS的事件循环机制,不会上来就问概念,而是换个角度,从题目入手,看你是否真正掌握。所以对于概念的理解真的很重要。

#以上关于你要问我应用层?我就和你扯扯扯的相关内容来源网络仅供参考,相关信息请以官方公告为准!

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92111.html

(0)
CSDN's avatarCSDN
上一篇 2024年6月24日 下午11:14
下一篇 2024年6月24日 下午11:32

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注