计算机网络 应用层上 | 域名解析系统DNS 文件传输协议FTP,NFS 万维网URL HTTP HTML

文章目录

  • 1 域名系统DNS
    • 1.1 域名vsIP?
    • 1.2 域名结构
    • 1.3 域名到IP的解析过程
      • 域名服务器类型
  • 2 文件传送协议
    • 2.1 FTP 文件传输协议
    • 2.2 NFS 协议
    • 2.3 简单文件传送协议 TFTP
  • 3 万维网WWW
    • 3.1 统一资源定位符URL
    • 3.2 超文本传送协议HTTP
      • 3.2.1 HTTP工作流程
      • 3.2.2 HTTP报文结构
      • 3.2.3 HTTP服务器存放用户信息
    • 3.3 超文本标记语言HTML
    • 3.4 搜索工具

之前我们讲运输层的时候已经讲了运输层可以给不同进程之间通信,但我们还需要应用层原因是,许多 应用需要多个进程之间相互配合完成,所以应用层进程用来约束这些配合!

每个应用层协议用来解决一个问题

应用层的许多协议都是基于客户服务器方式 客户是请求方,服务器是服务提供方

最重要内容

1 域名系统DNS——从域名解析出IP地址

2 万维网和HTTP协议,以及万维网的两种不同的信息搜索引擎

3 电子邮件的传输过程,SMTP协议和POP3协议,IMAP协议使用的场合

4 动态主机配置协议DHCP的特点

5 网络管理的三个组成部分

6 系统调用和应用编程接口的基本概念

7 P2P文件系统

1 域名系统DNS

1.1 域名vsIP?

为什么给人们用域名?方便记忆,如baidu.com就比一串的IP好记

为什么给机器用IP?IP长度固定,方便机器处理

初期的时候,由于主机个数比较少,所以一台机器的hosts文件列出所有的域名和IP的对应关系,需要转换时查表即可。

目前计算机网络理论上也可以把所有的域名和IP的对应关系放到一个服务器中,但是问题是

1 地球上计算机过多,该服务器负荷太大

2 如果这台服务器出现问题,会导致整体的网络的瘫痪

所以提出树状结构的命名方法,并采用分布式的域名系统DNS(分布式就是分散的意思)这样即便某一台计算机出了问题,也不会导致整体出现问题

1.2 域名结构

域名一般由标号组成,标号间通过.分割

顶级域名,二级域名,三级域名……

顶级域名一般有

  • 国家顶级域名 如cn表示中国,us表示美国,uk表示英国等等
  • 通用顶级域名 如com表示公司企业,org表示非盈利组织
  • 基础结构域名 arpa 用于反向域名解析

更高级的域名负责管理下属的域名

比如我国中国cn顶级域名下划分了41个二级域名(分为类别域名7个和行政区域名34个)

1.3 域名到IP的解析过程

先来了解域名服务器,即存放域名和IP对应的服务器

域名服务器

一个服务器所负责管辖的范围叫做区

各单位根据具体情况来划分自己管辖范围的区,但在一个区中的所有节点必须是联通的,每一个区设置相应的权限域名服务器用来保存该区中所有的主机的域名到IP地址的映射

域名服务器类型

根域名服务器

​ 最重要的域名服务器,所有的根域名服务器都知道所有的顶级域名服务器的域名和IP地址,不管是哪一个本地域名服务器,在无法解析的时候,就首先求助于根域名服务器

在因特网上有13个不同IP地址的根域名服务器,从a到m

在这里插入图片描述

顶级域名服务器(TLD服务器)

​ 这些域名服务器负责管理在该顶级域名服务器注册的所有二级域名。当收到DNS查询请求时,就给出相应的回答

权限域名服务器

​ 负责一个区的域名服务器,当一个权限域名服务器还不能给出最后的查询回答时,就会告诉发出查询请求的DNS客户,下一步应当找哪一个权限域名服务器

本地域名服务器

​ 每一个因特网服务器提供者ISP,或一个大学,都可以拥有一个本地域名服务器

为了提高域名服务器的可靠性,一般把数据复制到几个域名服务器来保存

域名解析这个过程是在多个域名服务器上的多个域名服务程序共同完成的

大概过程如下

某一个应用程序请求某域名的IP --》 生成DNS请求报文,发送给本地的域名服务器 --》如果本地可以查到的话,则返回回答报文,查不到的话就向其他域名服务器请求直到找到为止

解析过程

主机向本地域名服务器查询采用递归查询

本地服务器向根域名服务器查询采用迭代查询

名字的高速缓存,存放最近用到的

记录集合

mx记录

ns记录

ptr记录

2 文件传送协议

2.1 FTP 文件传输协议

FTP是使用最广的文件传输协议

FTP提供交互式的访问,允许客户指明文件的类型和格式,并允许文件具有存取权限

匿名访问通过anonymous实现

文件的传送并非很简单,原因是不同计算机厂商研制出的文件系统多达数百种,差别很大。主要体现在

1 计算机存储数据的格式不同

2 文件目录结构和文件命名规定不同

3 存取功能的命令不同

4 访问控制方法不同

所以我们的FTP核心就是要减少或消除在不同操作系统下处理文件的不兼容性

FTP使用客户服务器方式

FTP使用两个TCP连接,一个用于控制(21端口),一个用于数据传送(20端口),因而需要两个端口号,所以数据连接和控制连接不会乱

使用两个端口的另外好处是

1 使协议更加简单和实现

2 在传输文件时还可以利用控制连接

2.2 NFS 协议

NFS允许应用进程打开一个远地文件,并能在该文件的某一个特定位置开始读写数据

NFS可以使用户只复制一个大文件中的很小的片段

端口2049

2.3 简单文件传送协议 TFTP

特点

1 很小易于实现

2 由于很小所以TFTP只支持文件传输而不支持交互, TFTP没有一个庞大的命令集合

3 每次传输的数据有512字节,组成一个文件块,对块进行编号,从1开始,支持ASCLL码或二进制传送,可对文件进行读或写,使用很简单的首部

工作

1 很像停止等待协议,每发送完一个文件块就等待对方确认,收不到确认就重复发送PDU

2 TFTP端口号是69

三种协议比较

协议特点
FTP交互式,存取权限,建立副本
NFS交互式,存取权限,无副本
FTFP没有交互式,不进行身份验证

远程终端协议TRLNET

3 万维网WWW

万维网是一个分布式的超媒体系统,它是超文本系统的扩充

万维网将大量的信息分布在整个互联网

要核心解决几个问题

1 怎样标志分别分布在整个互联网的万维网文档——用URL

2 用什么样的协议实现万维网上的各种连接——用HTTP

3 怎样使得不同作者创作不同风格的万维网文档,都能在互联网上各种主机显示 使用HTML

4 怎么样使得用户能够方便找到需要的资源——用搜索工具

接下来分别探讨下面的问题

3.1 统一资源定位符URL

统一资源定位符是用来表示互联网资源的位置和获得的方法

一般组成如下

协议:// 主机名:端口/路径

协议就是通过何种方式获得该万维网文档

主机名就是存放文档主机的域名

其中端口往往被省略,因为对于特定协议,有些端口都是默认的,比如HTTP协议默认端口号为80

所以往往是如下的形式

协议://主机名/路径

很多时候都把前面的协议省去了,只保留了主机名

比如 baidu.com

完整应该是 http://baidu.com

3.2 超文本传送协议HTTP

定义了浏览器怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传输给浏览器

HTTP协议是无连接,无记忆状态的协议

无连接即不会提前建立连接

无状态协议,这意味着每个HTTP请求都是独立的,服务器不会在多次请求之间保留任何关于客户端的状态信息。每个HTTP请求都被视为一个独立的交互,服务器不会记住之前的请求或会话信息。

3.2.1 HTTP工作流程

如下

1 每个万维网网点都有一个服务器进程,它不断监听TCP端口80,以便发现是否有浏览器向它发送链接建立请求

2 监听到后,建立连接,浏览器向万维网服务器发出请求,服务器返回请求页面做相应。完成任务后,TCP就被释放了

对于早期的HTTP协议 HTTP/1.0,请求一个万维网文档耗费时间是文档传输时间加上两倍往返时间RTT(一个RTT用于建立TCP连接,另一个RTT用于请求和接收万维网文档)

这是它的一个缺点

因而HTTP/1.1 很好解决了这个问题,它使用了持续连接的方法,就是说万维网服务器在相应之后的一段时间依然保持这个连接

后来又提出升级版本 HTTP/2,将服务器的相应也变成了并行的,同时可以复用TCP连接的请求,

为了加快请求相应速度,往往会用到代理服务器,即将最近的一些请求和相应放到本地磁盘中

3.2.2 HTTP报文结构

HTTP两类报文

1 请求报文——从客户到服务器发送请求报文

2 相应报文——从服务器到客户的回答

HTTP请求报文由客户端发送给服务器,用于请求特定资源或执行特定操作。它通常包括以下部分:

  • 请求行(Request Line): 包含了HTTP方法、请求的URI和HTTP协议版本。例如:

    GET /index.html HTTP/1.1
    

    以下是一些常见的HTTP请求方法:

    1. GET:用于请求服务器发送指定资源的内容。GET请求通常用于获取数据,不应该对服务器端数据产生影响。GET请求的参数通常附在URL的查询字符串中。
    2. POST:用于向服务器提交数据,通常用于创建新资源。POST请求将数据包含在请求体中,而不是URL中。
    3. PUT:用于请求服务器更新或替换指定的资源,通常用于更新已存在的资源。PUT请求将数据包含在请求体中,并且通常会覆盖原始资源。
    4. DELETE:用于请求服务器删除指定的资源。DELETE请求用于删除服务器上的资源。
    5. PATCH:用于对资源进行部分更新。与PUT不同,PATCH只更新资源的一部分,而不是整个资源。
    6. HEAD:类似于GET请求,但服务器只返回响应头部信息,而不返回实际内容。通常用于获取资源的元数据或检查资源是否存在。
    7. OPTIONS:用于获取服务器支持的HTTP方法和资源的信息。客户端可以使用OPTIONS请求来了解服务器允许哪些方法和资源访问。
    8. TRACE:用于测试与服务器之间的连接,客户端发送一个TRACE请求,服务器返回请求的内容,以便客户端可以查看请求在传输过程中是否被修改。
    9. CONNECT:通常用于创建与服务器的网络连接,通常用于代理服务器。
  • 请求头部(Request Headers): 包含了一系列的键值对,用于传递关于请求的信息,如User-Agent、Host、Accept等。例如:

    Host: www.example.com
    User-Agent: Mozilla/5.0
    Accept: text/html
    
  • 空行(Blank Line): 请求行和请求头之间有一个空行,用于分隔请求头部和请求体。

  • 请求体(Request Body): 可选的部分,通常用于POST请求等情况,包含了要发送给服务器的数据。

  1. HTTP响应报文结构:

HTTP响应报文由服务器发送给客户端,用于回复客户端的请求。它通常包括以下部分:

  • 状态行(Status Line): 包含了HTTP协议版本、状态码和状态描述。例如:

    HTTP/1.1 200 OK
    
    1. HTTP状态码根据其首位数字分为五大类,每个类别都表示了不同的意义。这五大类是:
      1. 1xx(Informational,信息性状态码):这些状态码表示请求已被接收,正在处理或者需要进一步的操作。这些状态码通常不会在实际应用中经常见到,而更多用于HTTP协议的通信过程中。
      2. 2xx(Successful,成功状态码):这些状态码表示请求已成功被服务器接受、理解并处理。最常见的是200 OK,表示成功处理了请求。
      3. 3xx(Redirection,重定向状态码):这些状态码表示客户端需要采取额外的操作来完成请求。通常用于重定向到其他URL以获取请求的资源。
      4. 4xx(Client Error,客户端错误状态码):这些状态码表示客户端发送的请求有错误,无法被服务器理解或处理。最常见的是404 Not Found,表示请求的资源不存在。
      5. 5xx(Server Error,服务器错误状态码):这些状态码表示服务器在处理请求时发生了错误。最常见的是500 Internal Server Error,表示服务器内部发生了错误。
  • 响应头部(Response Headers): 类似于请求头部,包含了一系列的键值对,用于传递关于响应的信息,如Server、Content-Type、Content-Length等。例如:

    Server: Apache
    Content-Type: text/html
    Content-Length: 1234
    
  • 空行(Blank Line): 状态行和响应头之间有一个空行,用于分隔响应头部和响应体。

  • 响应体(Response Body): 包含了服务器返回的实际数据,例如HTML页面、JSON数据等。

3.2.3 HTTP服务器存放用户信息

之前讲到HTTP是无状态的,即不会保留客户端信息,但有些时候,服务器需要记住用户的信息,比如一个顾客要购买多件物品放入购物车,以便集中结账

这时候需要用到Cookie

工作流程如下:

  1. 创建Cookie: 服务器在HTTP响应中通过Set-Cookie头部字段创建Cookie,并将其发送到客户端浏览器。Cookie包含一个键值对,通常是一个名称和一个值,以及一些其他属性,如过期时间、域名、路径等。

    Set-Cookie: username=johndoe; expires=Sat, 31 Dec 2023 23:59:59 GMT; path=/; domain=example.com; secure; HttpOnly
    
    

    在上面的示例中,服务器创建了一个名为username的Cookie,它的值是johndoe,并设置了过期时间、路径、域名等属性。

  2. 存储Cookie: 一旦浏览器接收到Cookie,它会将Cookie存储在本地的Cookie存储中。这个存储通常是浏览器的内存或磁盘中的一个文件。

  3. 发送Cookie: 当浏览器向同一服务器发出后续HTTP请求时,它会将与该服务器相关的Cookie附加到请求的Cookie头部字段中。这使得服务器能够识别用户并访问之前存储的信息。

  4. 服务器读取Cookie: 服务器在收到HTTP请求时,会检查请求的Cookie头部字段以获取相关的Cookie信息。这允许服务器识别用户,并根据需要执行特定的操作,如验证用户身份、提供个性化内容等。

  5. 更新Cookie: 服务器可以在HTTP响应中更新或修改Cookie的内容,以便在客户端的下一次请求中反映这些更改。例如,服务器可以更新Cookie的过期时间或值。

3.3 超文本标记语言HTML

他不是协议,只是一种语言

HTML的基本概述:

  1. 标记语言: HTML是一种标记语言,它使用一系列的标签(标记)来描述文档的结构和内容。标签通常由尖括号< >包围,如<html><head><body>等。
  2. 超文本: HTML的全名是"Hypertext Markup Language",其中的"Hypertext"表示超文本。HTML允许文档中的内容之间建立超链接,用户可以通过点击链接来导航到其他页面或资源。
  3. 结构: HTML文档通常由多个部分组成,包括<!DOCTYPE>声明、<html>元素、<head>元素(包含文档的元数据信息)、<title>元素(指定页面标题)、<body>元素(包含页面的主要内容)等。
  4. 元素和属性: HTML由各种不同类型的元素组成,每个元素有其特定的含义和用途。元素可以包含其他元素,形成嵌套结构。元素通常具有属性,用于提供有关元素的额外信息。例如,<a>元素用于创建超链接,它可以包含href属性,指定链接的目标URL。
  5. 文本内容: HTML用于定义文本内容,包括标题、段落、列表、表格、图像等。通过HTML标签,可以将文本格式化、分段、组织和呈现。
  6. 样式和布局: HTML通过标签定义文档的结构和内容,但通常需要使用CSS(Cascading Style Sheets)来定义页面的样式和布局。CSS允许开发人员控制文本和元素的外观,包括颜色、字体、大小、间距等。
  7. 交互性: HTML也可以与JavaScript一起使用,以实现页面的交互性和动态行为。JavaScript可以通过DOM(Document Object Model)访问和操作HTML元素,使用户能够与页面交互。

3.4 搜索工具

搜索引擎是一种用于查找和检索互联网上的信息的计算机程序或工具。它们允许用户输入关键词或查询,并返回与这些关键词相关的网页、文档、图片、视频和其他多媒体内容的搜索结果列表。搜索引擎在互联网上广泛使用,是人们获取信息、解决问题和进行研究的重要工具。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/264491.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

生物系统学中的进化树构建和分析R工具包V.PhyloMaker2的介绍和详细使用

V.PhyloMaker2是一个R语言的工具包&#xff0c;专门用于构建和分析生物系统学中的进化树&#xff08;也称为系统发育树或phylogenetic tree&#xff09;。以下是对V.PhyloMaker2的一些基本介绍和使用说明&#xff1a; 论文介绍&#xff1a;V.PhyloMaker2: An updated and enla…

混合精度训练(MAP)

一、介绍 使用精度低于32位浮点数的数字格式有很多好处。首先&#xff0c;它们需要更少的内存&#xff0c;可以训练和部署更大的神经网络。其次&#xff0c;它们需要更少的内存带宽&#xff0c;这加快了数据传输操作。第三&#xff0c;数学运算在降低精度的情况下运行得更快&a…

web架构师编辑器内容-创建业务组件和编辑器基本行为

编辑器主要分为三部分&#xff0c;左侧是组件模板库&#xff0c;中间是画布区域&#xff0c;右侧是面板设置区域。 左侧是预设各种组件模板进行添加 中间是使用交互手段来更新元素的值 右侧是使用表单的方式来更新元素的值。 大致效果&#xff1a; 左侧组件模板库 最初的模板…

博客引擎 Hexo 入门介绍+安装笔记

Hexo Hexo is a fast, simple & powerful blog framework. 一直使用的是 jekyll&#xff0c;文章越写越多&#xff0c;不太好管理。是时候换个博客尝试一下。 Prepare blog zh_CN 本机为 MAC。不同系统会略有不同&#xff0c;但是大同小异。 Node.js 必须。 作用&…

LLM之RAG实战(八)| 使用Neo4j和LlamaIndex实现多模态RAG

人工智能和大型语言模型领域正在迅速发展。一年前&#xff0c;没有人使用LLM来提高生产力。时至今日&#xff0c;很难想象我们大多数人或多或少都在使用LLM提供服务&#xff0c;从个人助手到文生图场景。由于大量的研究和兴趣&#xff0c;LLM每天都在变得越来越好、越来越聪明。…

网站使用https认证

随着网络的普及和依赖程度的增加&#xff0c;网站安全性问题也日益凸显。为了确保用户和网站之间的数据传输安全&#xff0c;采用HTTPS认证已经变得至关重要。 1.数据安全是首要任务 在互联网上&#xff0c;信息传输是网站运作的基础。然而&#xff0c;未加密的传输容易受到中…

计算机网络——计算机网络的概述(一)

前言&#xff1a; 面对马上的期末考试&#xff0c;也为了以后找工作&#xff0c;需要掌握更多的知识&#xff0c;而且我们现实生活中也已经离不开计算机&#xff0c;更离不开计算机网络&#xff0c;今天开始我们就对计算机网络的知识进行一个简单的学习与记录。 目录 一、什么…

案例136:基于微信小程序的公交信息在线查询系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

使用Velero备份、恢复k8s集群上的资源

一、Velero简介 Velero提供备份和恢复 Kubernetes 集群资源和持久卷的工具。 Velero功能&#xff1a; 对群集进行备份&#xff0c;并在丢失时进行还原。将集群资源迁移到其他集群。 Velero 包括&#xff1a; 在群集上运行的服务器在本地运行的命令行客户端 开源地址&…

【终极教程】Cocos2dx服务端重构(优化cocos2dx服务端)

文章目录 概述问题概述1. 代码混淆代码加密具体步骤测试和配置阶段IPA 重签名操作步骤2. 缺乏文档3. 缺乏推荐的最佳实践4. 性能问题 总结 概述 Cocos2dx是一个非常流行的跨平台游戏引擎&#xff0c;开发者可以使用这个引擎来开发iOS、Android和Web游戏。同时&#xff0c;Coco…

SSTI模板注入(Flask+Jinja2)

文章目录 一、前置知识1.1 模板引擎1.2 渲染 二、SSTI模板注入2.1 原理2.2 沙箱逃逸沙箱逃逸payload讲解其他重要payload 2.3 过滤绕过 三、PasecaCTF-2019-Web-Flask SSTI 一、前置知识 1.1 模板引擎 模板引擎&#xff08;这里特指用于Web开发的模板引擎&#xff09;是为了使…

nodejs+vue+ElementUi会员制停车场车位系统

总之&#xff0c;智能停车系统使停车场管理工作规范化&#xff0c;系统化&#xff0c;程序化&#xff0c;避免停车场管理的随意性&#xff0c;提高信息处理的速度和准确性&#xff0c;能够及时、准确、有效的查询和修改停车场情况。 三、任务&#xff1a;小组任务和个人任务 智…

Linux中vim中进行替换/批量替换

Linux中vim中进行替换/批量替换 一:在 Vim 中进行文本替换的操作是通过使用 :s&#xff08;substitute&#xff09;命令来实现的。这里是一些基本的替换命令 替换当前行的第一个匹配项: :s/old/new/这将替换当前行中第一个出现的 “old” 为 “new”。 替换当前行的所有匹配项…

工作实践篇 Flink(一:flink提交jar)

一&#xff1a;参数 flink 模式 – standalone 二&#xff1a;步骤 1. 将本地测试好的代码进行本地运行。确保没问题&#xff0c;进行打包。 2. 找到打好的jar包&#xff0c;将jar包上传到对应的服务器。 3. 执行flink命令&#xff0c;跑代码。 /opt/flink/flink-1.13.6/bi…

ASP.Net实现姓名添加查询(三层架构)

目录 演示功能&#xff1a; 点击启动生成页面 点击搜索模糊查询 点击添加跳转新界面 点击Button添加姓名 步骤&#xff1a; 1、建文件 2、添加引用关系 3、根据数据库中的列写Models下的XueshengModels类 4、DAL下的DBHelper&#xff08;对数据库进行操作&#xff09;…

轻量Http客户端工具VSCode和IDEA

文章目录 前言Visual Studio Code 的插件 REST Client编写第一个案例进阶&#xff0c;设置变量进阶&#xff0c;设置Token 前言 作为一个WEB工程师&#xff0c;在日常的使用过程中&#xff0c;HTTP请求是必不可少的。我们采用的HTTP工具有如下&#xff1a; Postman Insomnia Ap…

MyBatis见解3

8.MyBatis的关联查询 8.3.一对多查询 需求&#xff1a;查询所有用户信息及用户关联的账户信息。 分析&#xff1a;用户信息和他的账户信息为一对多关系&#xff0c;并且查询过程中如果用户没有账户信息&#xff0c;此时也要将用户信息查询出来&#xff0c;此时左外连接查询比…

Spring和Spring Boot框架中怎么理解Bean这个核心概念

在Spring和Spring Boot框架中&#xff0c;Bean是一个核心概念。要理解Spring Boot中的Bean&#xff0c;我们可以从以下几个方面进行&#xff1a; 定义&#xff1a; Bean是Spring框架中的一个对象&#xff0c;由Spring容器管理。当我们在应用程序中需要某个对象时&#xff0c;我…

Deepin更换仿Mac主题

上一篇博客说了要写一篇deepin系统的美化教程 先看效果图&#xff1a; 准备工作&#xff1a; 1.你自己 嘻嘻嘻 2.能上网的deepin15.11电脑 首先去下载主题 本次需要系统美化3部分&#xff1a;1.图标 2.光标 3.壁纸 开始之前&#xff0c;请先把你的窗口特效打开&#xff0c;…

华为设备命令行操作基础

熟悉VRP命令行并且熟练掌握VRP配置是高效管理华为网络设备的必备基础。 设备初始化启动 管理员和工程师如果要访问在通用路由平台VRP上运行的华为产品&#xff0c;首先要进入启动程序。开机界面信息提供了系统启动的运行程序和正在运行的VRP版本及其加载路径。启动完成以后&am…