计算机网络 应用层上 | 域名解析系统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 搜索工具

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

真实进行软件测试面试中,自动化测试面试到底会问那些?

作者&#xff1a;川石信息 链接&#xff1a;https://www.zhihu.com/question/342170872/answer/813076226 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 自动化测试面试1&#xff1a; 1、使用什么测试框架做的上…

7.串口通信uart编写思路及自定义协议

前言&#xff1a; 串口是很重要的&#xff0c;有许多模块通信接口就是串口&#xff0c;例如gps模块&#xff0c;蓝牙模块&#xff0c;wifi模块还有一些精度比较高的陀螺仪模块等等&#xff0c;所以学会了串口之后&#xff0c;这些听起来很牛批的模块都能够用起来了。此外&#…

MySQL 8.0 InnoDB Tablespaces之File-per-table tablespaces(单独表空间)

文章目录 MySQL 8.0 InnoDB Tablespaces之File-per-table tablespaces&#xff08;单独表空间&#xff09;File-per-table tablespaces&#xff08;单独表空间&#xff09;相关变量&#xff1a;innodb_file_per_table使用TABLESPACE子句指定表空间变量innodb_file_per_table设置…

Git系统有哪些优势

在现在的这个软件开发领域&#xff0c;版本控制是一项非常重要的工作。Git作为比较流行的分布式版本控制系统&#xff0c;他有着独特的优势成为了很多开发者们的首选。那Git系统都有哪些优势呢&#xff0c;下面我以自己的理解简单的介绍一下。 分布式版本控制的优势 Git用的是…

标准地址门牌管理系统:提升地址管理效率与准确性的关键

在信息化社会的今天&#xff0c;地址管理的重要性日益凸显。无论是商业活动、物流配送&#xff0c;还是公共安全&#xff0c;都需要精确、高效的地址管理。然而&#xff0c;传统地址管理方式往往存在地址不规范、信息不全等问题&#xff0c;这无疑增加了管理难度和工作量。为此…

linux 中 C++的环境搭建以及测试工具的简单介绍

文章目录 makefleCMakegdb调试 与 coredumpValgrind 内存检测gtest 单元测试 makefile 介绍 安装 : sudo apt install make makefile 的规则: 举例说明 包括&#xff1a;目标文件 、 依赖文件 、 生成规则 使用 &#xff1a; make make clean CMake : CMake是一个…

046.Python包和模块_导入相关

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…

『番外篇五』SwiftUI 进阶之如何动态获取任意视图的 tag 和 id 值

概览 在某些场景下,我们需要用代码动态去探查 SwiftUI 视图的信息。比如任意视图的 id 或 tag 值: 如上图所示:我们通过动态探查技术在运行时将 SwiftUI 特定视图的 tag 和 id 值显示在了屏幕上。 这是如何做到的呢? 在本篇博文,您将学到如下内容: 概览1. “如意如意,…

手敲MyBatis(十三章)-返回Insert操作自增索引值

1.目的 这一章的目的主要是插入语句以后返回插入记录的id&#xff0c;因为插入语句可分为要返回记录id&#xff0c;不要返回记录id的以及不同数据源类型执行的时机也不同&#xff08;如&#xff1a;oracle不支持主键&#xff0c;需要先插入序列再增加&#xff0c;Mysql支持主键…

SQL指南:掌握日期函数来查询和管理数据

文章目录 1. 引言2. 建立数据库表2.1 建表语句2.2 数据插入 查询案例3.1 查询当前日期的订单3.2 查询过去一周内的订单3.3 查询明天的日期3.4 查询今年的订单3.5 查询特定月份的订单 总结 1. 引言 在数据库管理中&#xff0c;处理日期和时间是一项基本但重要的任务。本指南将通…

数智金融技术峰会|数新网络受邀分享《金融信创湖仓一体数据平台架构实践》,敬请期待

12月23日&#xff0c;数新网络参加DataFunSummit 2023&#xff1a;数智金融技术峰会。会上&#xff0c;数新CTO原攀峰将为大家带来《金融信创湖仓一体数据平台架构实践》 主题分享。 本次峰会由DataFun联合火山引擎、蓝驰等知名企业举办&#xff0c;将共同为大家带来一场数智金…

玩转Instagram Shop只需要学会这些功能

Instagram Shop作为Instagram下属的电商购物平台。用户可以通过浏览Instagram上的推荐产品和品牌&#xff0c;在无需离开应用的情况下了解并购买新的商品。对于经常使用Instagram的用户来说是个很便捷的购物渠道。面对这个新渠道&#xff0c;我们又该如何玩转它呢。这篇文章就会…

【沐风老师】3dMax篮球建模方法详解

3dMax足球、排球和篮球建模系列之&#xff1a;篮球建模。对于足球和排球建模&#xff0c;思路是从一个基础模型开始&#xff0c;利用这个基础模型与最终的足球&#xff08;或排球&#xff09;模型的某些相似之处&#xff0c;经过修改编辑&#xff0c;最终完成目标模型的建模。但…

ansible的playbook

1、playbook的组成部分 &#xff08;1&#xff09;task任务&#xff1a;在目标主机上执行的操作&#xff0c;使用模块定义这些操作&#xff0c;每个任务都是一个模块的调用 &#xff08;2&#xff09;variables变量&#xff1a;存储和传递数据&#xff08;变量可以自定义&…

Java可变参数(学习推荐版,通俗易懂)

定义 可变参数本质还是一个数组 示例代码 注意事项 1.形参列表中&#xff0c;可变参数只能有一个 2.可变参数必须放在形参列表的最后面 注意是最后面。 name也可以为int类型

【C#】TimeSpan

文章目录 概述属性时间计算拓展来源 概述 TimeSpan结构&#xff1a;表示一个时间间隔。 它含有以下四个构造函数&#xff1a; TimeSpan(Int64)将 TimeSpan结构的新实例初始化为指定的刻度数。&#xff08;DateTime.Tick:是计算机的一个计时周期&#xff0c;单位是一百纳秒&…

3. 行为模式 - 迭代器模式

亦称&#xff1a; Iterator 意图 迭代器模式是一种行为设计模式&#xff0c; 让你能在不暴露集合底层表现形式 &#xff08;列表、 栈和树等&#xff09; 的情况下遍历集合中所有的元素。 问题 集合是编程中最常使用的数据类型之一。 尽管如此&#xff0c; 集合只是一组对象的…

数据结构(八):图介绍及面试常考算法

一、图介绍 1、定义 图由结点的有穷集合V和边的集合E组成。其中&#xff0c;结点也称为顶点。一对结点&#xff08;x&#xff0c; y&#xff09;称为边&#xff08;edge&#xff09;&#xff0c;表示顶点x连接到顶点y。边可以包含权重/成本&#xff0c;显示从顶点x到y所需的成…

深入解析Python装饰器及*args, **kwargs的妙用

深入解析Python装饰器及*args, **kwargs的妙用 简介&#xff1a; ​ 装饰器&#xff08;Decorator&#xff09;是 Python 中一种强大的语法特性&#xff0c;它允许在不修改原始函数代码的情况下&#xff0c;动态地扩展函数的功能。装饰器是函数或类&#xff0c;用于包装其他函…

云上荆楚丨云轴科技ZStack成功实践精选(湖北)

湖北自古以来有九省通衢的美称&#xff0c;地处长江中游&#xff0c;富有荆楚之美誉&#xff0c;灵秀之蕴意。2022年湖北数字经济强省三年行动计划正式印发&#xff0c;计划到“十四五”末&#xff0c;数字经济核心产业增加值力争达到7000亿元&#xff0c;占GDP的比重超过12%。…