计算机网络协议—应用层

news2024/11/26 21:19:24

应用层网络协议

应用层的常见协议
  • 超文本传输:HTTP、HTTPS
  • 文本传输:FTP
  • 电子邮件:SMTP、POP3、IMAP
  • 动态主机配置:DHCP
  • 域名系统:DNS
域名(Domain Name)
  • 由于IP地址不方便记忆,并且不能表达组织的名称和性质,人们设计出了域名(比如baidu.com)

    • 但实际上,为了能够访问到具体的主机,最终还是得知道目标主机的IP地址
    • 域名申请注册:https://wanwang.aliyun.com
  • 那干脆全程直接用域名,不用IP地址?

    • IP地址固定4个字节,域名随随便便都至少十几个字节,这无疑会增加路由器的负担,浪费流量
  • 根据级别不同,域名可以分为

    • 顶级域名(Top-level Domain,简称TLD)
    • 二级域名
    • 三级域名
  • 顶级域名的分类

    • 通用顶级域名(General Top-level Domain,简称gTLD)
      • .com(公司),.net(网络机构),.org(组织机构),.edu(教育)
      • .gov(政府部门),.int(国际组织)等
    • 国家及地区顶级域名(Country Code Top-level Domain,简称ccTLD)
      • .cn(中国),.jp(日本),.uk(英国)
    • 新通用顶级域名(New Generic Top-level Domain,简称:New gTLD)
      • .vip、.xyz、.club、.shop等
  • 二级域名

    • 二级域名是指顶级域名之下的域名
      • 在通用顶级域名下,它一般指域名注册人的名称,例如google、baidu、microsoft等
      • 在国家及地区顶级域名下,它一般指注册类别,例如com、edu、gov、net等
      • image-20230105151943089
  • DNS

    • DNS的全称是:Domain Name System,译为:域名系统
      • 利用DNS协议,可以将域名(比如baidu.com)解析成对应的IP地址(比如220.181.28.148)
      • DNS可以基于UDP协议,也可以基于TCP协议,服务器占用53端口
      • image-20230105153458776
    • DNS—服务器
      • 客户端首先会访问最近的一台DNS服务器(也就是客户端自己配置的DNS服务器)
      • 所有的DNS服务器都记录了DNS根域名服务器的IP地址
      • 上级DNS服务器记录了下一级DNS服务器的IP地址
      • 全球一共13台IPv4的DNS根域名服务器,25台IPv6的DNS根域名服务器
    • DNS—常用命令
      • ipconfig/displaydns:查看DNS缓存记录
      • ipconfig/flushdns:清空DNS缓存记录
      • ping 域名
      • nslookup 域名
DHCP
  • IP地址的分配

    • IP地址按照分配方式,可以分为:静态IP地址,动态IP地址
      • 静态IP地址
        • 手动设置
        • 适用场景:不怎么挪动的台式机(比如学校机房中的台式机),服务器等
      • 动态IP地址
        • 从DHCP服务器自动获取IP地址
        • 适用场景:移动设备,无线设备等
  • DHCP

    • DHCP(Dynamic Host Configuration Protocol),译为:动态主机配置协议
      • DHCP协议基于UDP协议,客户端是68端口,服务器是67端口
    • DHCP服务器会从IP地址池中,挑选一个IP地址“出租”给客户端一段时间,时间到期后就回收他们
      • 平时家里上网的路由器就可以充当DHCP服务器
  • DHCP—分配IP地址的4个阶段

    • DISCOVER:发现服务器
      • 发广播包(源IP是0.0.0.0,目标IP是255.255.255.255,目标MAC是FF:FF:FF:FF:FF:FF)
    • OFFER:提供租约
      • 服务器返回可以租用的IP地址,以及租用期限,子网掩码,网关,DNS等信息
      • 注意:这里可能会有多个服务器提供租约
    • REQUEST:选择IP地址
      • 客户端选择一个OFFER,发送广播包进行回应
    • ACKNOWLEDGE:确认
      • 被选中的服务器发送ACK数据包给客户端
      • 至此,IP地址分配完毕
      • image-20230110170904634
      • image-20230110170937190
      • image-20230110171000817
      • image-20230110171107984
  • DHCP—细节

    • DHCP服务器可以跨网段分配IP地址吗?(DHCP服务器,客户端不在同一个网段)
      • 可以借助DHCP中继代理(DHCP Relay Agent)实现跨网段分配IP地址
    • 自动续约
      • 客户端会在租期不足的时候,自动向DHCP服务器发送REQUEST信息申请续约
    • 常用命令
      • ipconfig /all:可以看到DHCP相关的详细信息,比如租约过期时间,DHCP服务器地址等
      • ipconfig /release:释放租约
      • ipconfig /renew:重新申请IP地址、申请续约(延长租期)
HTTP
  • HTTP(Hyper Text Transfer Protocol),译为超文本传输协议
    • 是互联网中应用最广泛的应用层协议之一
    • 设计HTTP最初的目的是:提供一种发布和接收HTML页面的方法,由URI来表示具体的资源(URI包括了URL)
    • 后面用HTTP来传递的数据格式不仅仅是HTML,应用非常广泛
  • HTML(Hyper Text Markup Language):超文本标记语言
    • 用以编写网页
  • HTTP版本
    • 1991年,HTTP/0.9
      • 只支持GET请求方法获取文本数据(比如HTML文档),且不支持请求头,响应头等,无法向服务器传递太多信息。
    • 1996年,HTTP/1.0
      • 支持POST、HEAD等请求方法,支持请求头,响应头等,支持更多种数据类型(不再局限于文本数据)
      • 浏览器的每次请求都需要与服务器建立一个TCP连接,请求处理完成后立即断开TCP连接
    • 1997年,HTTP/1.1(最经典,使用最广泛的版本)
      • 支持PUT,DELETE等请求方法
      • 采用持久连接(Connection:keep-alive),多个请求可以共用同一个TCP连接
    • 2015年,HTTP/2.0
    • 2018年,HTTP/3.0
  • HTTP的标准
    • 由万维网协会(W3C)、互联网工程任务组(IETF)协调制定,最终发布了一系列的RFC。
    • RFC(Request For Comments,可以译为:请求意见稿)
      • HTTP/1.1最早是在1997年的RFC 2068中记录的
        • 该规范在1999年的RFC 2616中已作废
        • 2014年又由RFC 7230系列的RFC取代
      • HTTP/2标准于2015年5月以RFC 7540正式发表,取代HTTP/1.1成为HTTP的实现标准。
    • 中国的RFC
      • 1996年3月,清华大学提交的适应不同国家和地区中文编码的汉字统一传输标准被IETF通过为RFC 1922
      • 成为中国大陆第一个被认可为RFC文件的提交协议
  • 报文格式
    • image-20230111152527468
    • image-20230111152546431
ABNF
  • ABNF(Augmented BNF)

    • 是BNF(Backs-Naur Form,译为:巴科斯-瑙尔范式)的修改、增强版
    • 在RFC 5234中表名:ABNF用作internet中通信协议的定义语言
    • ABNF是最严谨的HTTP报文格式描述形式,脱离ABNF谈论HTTP报文格式,往往都是片面的、不严谨的
  • 关于HTTP报文格式的定义

    • RFC 2616 4.HTTP Message(旧)
    • RFC 7230 3.Message Format(新)
  • 报文格式—整体

    • HTTP-message = start-line start-line = request-line / status-line

      ​ *(header-field CRLF)

      ​ CRLF

      ​ [message-body]

    • image-20230127091924940

  • ABNF—核心规则

    • image-20230127092347819
  • 报文格式—request-line、status-line

    • request-line = method SP request-target SP HTTP-version CRLF

      HTTP-version = HTTP-name “/” DIGIT “.” DIGIT

      HTTP-name = %x48.54.54.50;HTTP

    ​ GET /hello/ HTTP/1.1

    ​ status-line = HTTP-version SP status-code SP reason-phrase CRLF

    ​ status-code = 3DIGIT

    ​ reason-phrase = *(HTAB/SP/VCHAR/obs-text)

    ​ HTTP/1.1 200

    ​ HTTP/1.1 200 OK

  • 报文格式—header-filed、message-body

    • header-field = field-name “:” OWS field-value OWS

      field-name = token

      field-value = *(field-content / obs-fold)

      OWS = *(SP / HTAB)

​ message-body = *OCTET

URL的编码
  • URL中一旦出现了一些特殊字符(比如中文、空格),需要进行编码
    • 在浏览器地址栏中输入URL时,是采用UTF-8进行编码
  • 比如
    • 编码前:https://www.baidu.com/s?wd=百度
    • 编码后:https://www.baidu.com/s?wd=%E7%99%BE%E5%BA%A6
Xshell+telnet
  • 安装一个Xshell(安全终端模拟软件),在Xshell中使用telnet
    • 可以直接面向HTTP报文与服务器进行交互
    • 可以更清晰、直观地看到请求报文、响应报文的内容
    • 可以检验请求报文格式的正确与否
请求方法
  • RFC 7231,section 4:Request methods:描述了8种请求方法

    • GET、HEAD、POST、PUT、DELETE、CONNECT、OPTIONS、TRACE
  • RFC 5789,section 2:Patch method:描述了PATCH方法

  • GET:常用于读取的操作,请求参数直接拼接在URL的后面(浏览器对URL是有长度限制的)

  • POST:常用于添加、修改、删除的操作,请求参数可以放到请求体中(没有大小限制)

  • HEAD:请求得到与GET请求相同的响应,但没有响应体

    • 使用场景举例:在下载一个大文件前,先获取其大小,再决定是否要下载。以此可以节约带宽资源
  • OPTIONS:用于获取目的资源所支持的通信选项,比如服务器支持的请求方法

    • OPTIONS * HTTP/1.1
  • PUT:用于对已存在的资源进行整体覆盖

  • PATCH:用于对资源进行部分修改(资源不存在,会创建新的资源)

  • DELETE:用于删除指定的资源

  • TRACE:请求服务器回显其收到的请求信息,主要用于HTTP请求的测试或诊断

  • CONNECT:可以开启一个客户端与锁清秋资源之间的双向沟通的通道,它可以用来创建隧道(tunnel)

    • 可以用来访问SSL(HTTPS)协议的站点
头部字段(Header Field)
  • 头部字段可以分为4种类型

    • 请求头字段(Request Header Fields)
      • 有关要获取的资源或客户端本身信息的消息头
    • 响应头字段(Response Header Fields)
      • 有关响应的补充信息,比如服务器本身(名称和版本等)的消息头
    • 实体头字段(Entity Header Fields)
      • 有关实体主体的更多信息,比如主体长度(Content-Length)或其MIME类型
    • 通用头字段(General Header Fields)
      • 同时适用于请求和响应消息,但与消息主体无关的消息头
  • 请求头字段

    • image-20230127172747542
    • image-20230127174457682
      • q值越大,表示优先级越高
      • 如果不指定q值,默认是1.0(1.0是最大值)
    • image-20230127175149021
  • 响应头字段

    • image-20230127180109164
    • image-20230127180647516
    • image-20230127181148545
状态码(Status Code)
  • 在RFC 2616 10.Status Code Definitions规范中定义
    • 状态码提示HTTP请求是否已成功完成
  • 状态码可以分为5类:
    • 信息响应:100~199
    • 成功响应:200~299
    • 重定向:300~399
    • 客户端错误:400~499
    • 服务器错误:500~599
  • 常见的状态码:
    • 100 Continue

      • 请求的初始部分已经被服务器收到,并且没有被服务器拒绝。客户端应该继续发送剩余的请求,如果请求已经完成,就忽略这个响应。
      • 允许客户端发送带请求体的请求前,判断服务器是否愿意接收请求(服务器通过请求头判断)
      • 在某些情况下,如果服务器在不看请求体就拒绝请求时,客户端发送请求体是不恰当的或低效的
    • 200 OK :请求成功

    • 302 Found:请求的资源被暂时的移动到了由Location头部指定的URL上

    • 304 Not Modified:说明无需再次传输请求的内容,也就是说可以使用缓存的内容

    • 400 Bad Request:由于语法无效,服务器无法理解该请求

    • 401 Unauthorized:由于缺乏目标资源要求的身份验证凭证

    • 403 Forbidden:服务器端有能力处理该请求,但是拒绝授权访问

    • 404 Not Found:服务器端无法找到所请求的资源

    • 405 Method Not Allowed:服务器禁止了使用当前HTTP方法的请求

    • 406 Not Acceptable:服务器端无法提供与Accept-Charset以及Accept-Language指定的值相匹配的响应

    • 408 Request Timeout:服务器想要将没有在使用的连接关闭

      • 一些服务器会在空闲连接上发送此信息,即便是在客户端没有发送任何请求的情况下
    • 500 Internal Server Error:所请求的服务器遇到意外的情况并阻止其执行请求

    • 501 Not Implemented:请求的方法不被服务器支持,因此无法被处理

      • 服务器必须支持的方法(即不会返回这个状态码的方法)只有GET和HEAD
    • 502 Bad Gateway:作为网关或代理角色的服务器,从上游服务器(如tomcat)种接收到的响应是无效的

    • 503 Service Unavailable:服务器尚未处于可以接受请求的状态

      • 通常造成这种情况的原因是由于服务器停机维护或者已超载
form提交—常用属性
  • action:请求的URI
  • method:请求方法(GET、POST)
  • enctype:POST请求时,请求体的编码方式
    • application/x-www-form-urlencoded(默认值)
      • 用&分隔参数,用=分隔键和值,字符用URL编码方式进行编码
    • multipart/form-data
      • 文件上传时必须使用这种编码方式
代理服务器(Proxy Server)
  • 特点
    • 本身不生产内容
    • 处于中间位置转发上下游的请求和响应
      • 面向下游的客户端:它是服务器
      • 面向上游的服务器:它是客户端
  • 正向代理、反向代理
    • 正向代理:代理的对象是客户端
    • 反向代理:代理的对象是服务器
  • 正向代理—作用
    • 隐藏客户端的身份
    • 绕过防火墙(突破访问限制)
      • image-20230226152953415
    • Internet访问控制
    • 数据过滤
    • ……
    • 一些免费的正向代理:
      • https://ip.jiangxianli.com/
      • https://www.kuaidaili.com/free/inha
  • 反向代理—作用
    • 隐藏服务器身份
    • 安全防护
    • 负载均衡
      • image-20230226155251612
  • 抓包工具的原理
    • Fiddler、Charles等抓包工具的原理:在客户端启动了正向代理服务
    • 需要注意的是
      • Wireshark的原理是:通过底层驱动,拦截网卡上流过的数据
  • 代理服务器—相关的头部字段
    • Via:追加经过的每一台代理服务器的主机名(或域名)
    • X-Forwarded-For:追加请求方的IP地址
    • X-Real-IP:客户端的真实IP地址
  • CDN
    • CDN(Content Delivery Network 或 Content Distribution Network),译为:内容分发网络
      • 利用最靠近每位用户的服务器
      • 更快更可靠地将音乐、图片、视频等资源文件(一般是静态资源)传递给用户
    • image-20230226165413306
    • CDN运营商在全国、乃至全球的各个大枢纽城市都建立了机房
      • 部署了大量拥有高存储高带宽的节点,构建了一个跨运营商,跨地域的专用网络
    • 内容所有者向CDN运营商支付费用,CDN将其内容交付给最终用户
  • CDN—使用CDN前
    • image-20230226165944291
  • CDN—使用CDN之后

国、乃至全球的各个大枢纽城市都建立了机房
- 部署了大量拥有高存储高带宽的节点,构建了一个跨运营商,跨地域的专用网络

  • 内容所有者向CDN运营商支付费用,CDN将其内容交付给最终用户
  • CDN—使用CDN前
    • image-20230226165944291
  • CDN—使用CDN之后

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

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

相关文章

【CAN】手把手教你学习CAN总线(一)

CAN总线一、CAN总线概念二、CAN的差分信号三、CAN总线的通信协议1、 帧起始2、仲裁段3、控制段4、数据段5、CRC段6、ACK段7、帧结束四、CAN的位时序1、同步段(SS)2、传播时间段(PTS)3、相位缓冲段(PBS)4、再…

gin 框架初始教程文档

一 、gin 入门1. 安装gin :下载并安装 gin包:$ go get -u github.com/gin-gonic/gin2. 将 gin 引入到代码中:import "github.com/gin-gonic/gin"3.初始化项目go mod init gin4.完整代码package mainimport "github.com/gin-go…

java 一文讲透面向对象 (20万字博文)

目录 一、前言 二、面向对象程序设计介绍 1.oop三大特性 : 2.面向对象和面向过程的区别 : 3.面向对象思想特点 : 4.面向对象的程序开发 : 三、Java——类与对象 1.java中如何描述一个事物? 2.什么是类? 3.类的五大成员: 4.封装的前提——抽象 : 5.什么是对…

使用python暴力破解zip压缩包的密码

如果你有压缩包的密码忘记了,并且压缩包的加密算法采用的是ZipCrypto,并且压缩参数如下图所示: 那么你就可以使用本文中的方法进行破解。 压缩包的加密,是根据输入的密码进行运算加密,输入不同的密码,加密…

OpenCV-Python系列(二)—— 图像处理(灰度图、二值化、边缘检测、高斯模糊、轮廓检测)

一、【灰度图、二值化】 import cv2 img cv2.imread("lz2.png") gray_img cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 灰度图 # 二值化,(127,255)为阈值 retval,bit_img cv2.threshold(gray_img, 127, 255, cv2.THRESH_BINARY) cv2.imshow(photo1,im…

java:自定义变量加载到系统变量后替换shell模版并执行shell

这里的需求前提是,在项目中进行某些操作前,需要在命令后对shell配置文件的进行修改(如ip、port),这个对于用户是不友好的,需要改为用户页面输入ip、port,后台自动去操作修改配置;那么…

SAP 能不能撤销已冲销的凭证?能的话怎么操作?

本篇涉及SAP的SAP 财务凭证的冲销操作的。有需要可以查看:前面的文章有一篇是专门介绍如何介绍如何冲销SAP财务凭证的文章。SAP财务凭证常见的冲销步骤详细操作手册(FB08、AB08、VF11、FBRA等) 开始进入正题。假如有这么一种场景:…

【Acwing 周赛复盘】第92场周赛复盘(2023.2.25)

【Acwing 周赛复盘】第92场周赛复盘(2023.2.25) 周赛复盘 ✍️ 本周个人排名:1293/2408 AC情况:1/3 这是博主参加的第七次周赛,又一次体会到了世界的参差(这次周赛记错时间了,以为 19:15 开始&…

使用Jmeter进行性能测试的这套步骤,入职京东后,涨薪2次,升职一次

项目背景: 我们的平台为全国某行业监控平台,经过3轮功能测试、接口测试后,98%的问题已经关闭,决定对省平台向全国平台上传数据的接口进行性能测试。 01 测试步骤 1、编写性能测试方案 由于我是刚进入此项目组不久,…

怎么设置启用远程桌面?如何让外网电脑远程本地内网?

如何远程控制电脑?最简单实用的方案是开启电脑系统自带的远程桌面功能,如果涉及跨网、内外网互通,可以同时用快解析内网映射外网。下面是方案的具体实施步骤,供大家参考。 怎么打开设置启用远程桌面? 1.在目标需要远…

IO:阻塞和非阻塞、同步和异步

阻塞和非阻塞 阻塞的时候线程会被挂起 阻塞: 当数据还没准备好时,调用了阻塞的方法,则线程会被挂起,会让出CPU时间片,此时是无法处理过来的请求,需要等待其他线程来进行唤醒,该线程才能进行后续…

Javascript的API基本内容(二)

一、事件监听 结合 DOM 使用事件时,需要为 DOM 对象添加事件监听,等待事件发生(触发)时,便立即调用一个函数。 addEventListener 是 DOM 对象专门用来添加事件监听的方法,它的两个参数分别为【事件类型】和…

产业链金融的前世今生

产业链金融脱胎于供应链金融,又不同于供应链金融。二者的区别是, 供应链金融服务于单个环节、单个企业,而产业链金融是以产业链的核心 企业为依托,针对产业链的各个环节,设计个性化、标准化的金融服务产品,…

Appium自动化测试框架是一种较为优雅的使用方式

以操作小米商城下单为例流程是 启动小米商城app, 点击分类,点击小米手机, 点击小米10 至尊版,点击加入购物车,点击确定....原脚本Copyfrom time import sleep from appium import webdriver from selenium.common.exceptions impo…

python有哪些应用方向及其学习方法 资源推荐

目录 python 语言的应用方向 python简介 1.常规软件开发 2.科学计算 3.自动化运维 4.云计算 5.WEB开发 6.网络爬虫 7.大数据分析 8.人工智能 9.python处理图片和视频 【渗透测试相关工具下载】 推荐阅读 python实战文章 渗透测试文章 渗透测试实战专栏 python黑…

Gorm-学习笔记

1 基本使用 2 创建数据 2.1 如何使用Upsert 使用clause.OnConflict处理数据冲突 2.2 如何使用默认值 通过使用default标签为字段定义默认值 3 查询数据 3.1 First与Find 使用First时,需要注意查询不到数据会返回ErrRecordNotFound。 使用Find查询多条数据&#x…

详讲函数.2.

目录 5. 函数的嵌套调用和链式访问 5.1 嵌套调用 5.2 链式访问 小结: 6. 函数的声明和定义 6.1 函数的声明: 6.2 函数的定义: 5. 函数的嵌套调用和链式访问 函数和函数之间可以根据实际的需求进行组合的,也就是互相调用的…

JUC包:CountDownLatch源码+实例讲解

1 缘起 有一次听到同事谈及AQS时,我有很多点懵, 只知道入队和出队,CLH(Craig,Landin and Hagersten)锁,并不了解AQS的应用, 同时结合之前遇到的多线程等待应用场景,发现…

QML 元素布局

定位器:是QtQuick模块中的提供的,有以下三种 Row 行定位器Column 列定位器Grid 网格定位器Flow 流动定位器常用属性: spacing间距 Row (行定位器) 按照行的方排列 //行定位器 Row{spacing: 5//设置间距Rectangle{width: 100he…

[蓝桥杯] 二分与前缀和习题练习

文章目录 一、二分查找习题练习 1、1 数的范围 1、1、1 题目描述 1、1、2 题解关键思路与解答 1、2 机器人跳跃问题 1、2、1 题目描述 1、2、2 题解关键思路与解答 1、3 四平方和 1、3、1 题目描述 1、3、2 题解关键思路与解答 二、前缀和习题练习 2、1 前缀和 2、1、1 题目描述…