计算机网络基础 - 应用层(1)

计算机网络基础

  • 应用层
    • 网络应用的体系结构
      • C/S 体系结构
      • P2P 体系结构
      • C/S 和 P2P 体系结构的混合体
    • 进程通信
      • 概述
      • 套接字(Socket)
      • TCP socket
      • UDP socket
    • 应用层协议
    • 应用层需要传输层提供的服务
    • Web 与 HTTP
      • 概念
      • 非持续连接和持续连接
      • HTTP报文格式
        • 请求报文
        • 响应报文
      • Cookie
      • Web 缓存


大家好呀!我是小笙,本章我主要分享计算机网络基础 - 应用层(1)学习总结,希望内容对你有所帮助!!

应用层

网络应用的体系结构

  • 客户-服务器模式(C/S:client/server)
  • 对等模式(P2P:Peer To Peer)
  • 混合体:客户-服务器和对等体系结构

C/S 体系结构

服务器

  • 一直运行
  • 固定的 IP 地址和周知的端号(约定)
  • 扩展性:服务器场(数据中心进行扩展、 扩展性差)

客户端

  • 主动与服务器通信
  • 与互联网有间歇性的连接
  • 可能是动态 IP 地址
  • 不直接与其它客户端通信

注意:服务器 IP 也不一定是固定的,但是域名必须是固定的。可以通过 ddns 来刷新服务器的动态 ip

P2P 体系结构

  • (几乎)没有一直运行的服务器
  • 任意端系统之间可以进行通信
  • 每一个节点既是客户端又是服务器
  • 参与的主机间歇性连接且可以改变 IP 地址
  • 难以管理

例子:Gnutella、迅雷

C/S 和 P2P 体系结构的混合体

Napster

  • 文件搜索:集中
  • 文件传输:P2P

即时通信

  • 在线检测:集中
    • 当用户上线时,向中心服务器注册其IP地址
    • 用户与中心服务器联系,以找到其在线好友的位置
  • 两个用户之间聊天:P2P

进程通信

概述

进程(在主机上运行的应用程序)

  • 分为客户端进程、服务端进程
  • 在同一个主机内,使用进程间通信机制通信
  • 不同主机间,通过报文来通信

进程寻址

进程为了接收报文,必须有一个标识,即:SAP(发送也需要标示)

  • 主机:唯一的 32位IP地址
  • 所采用的传输层协议:TCP or UDP
  • 端口号(Port Numbers)

层间接口必须要携带的信息

  • 要传输的报文(对于本层来说:SDU)
  • 谁传的:对方的应用进程的标示:IP + TCP(UDP) 端口
  • 传给谁:对方的应用进程的标示:对方的 IP + TCP(UDP) 端口号

如果Socket API 每次传输报文,都携带如此多的信息,太繁琐易错,不便于管理

套接字(Socket)

一个进程向另一个进程发送的报文必须通过下面的网络时候,进程通过一个称为套接字的软件接口向网络发送报文和从网络接收报文,因此套接字也称为应用程序和网络之间的应用程序编程接口 API

  • 进程向套接字发送报文或从套接字接收报文(套接字 <=> 门户)
  • 发送进程将报文推出门户,发送进程依赖于传输层设施在另外一侧的门将报文交付给接受进程
  • 接收进程从另外一端的门户收到报文(依赖于传输层设施)

image-20240814224408695

TCP socket

  • TCP服务,两个进程之间的通信需要之前要建立连接

  • 两个进程通信会持续一段时间,通信关系稳定

  • 可以用一个整数表示两个应用实体之间的通信关系,本地标示

    四元组:源端系统 ip 、源端系统 port 、目标端系统 ip 、目标端系统 port

UDP socket

  • UDP服务,两个进程之间的通信需要之前无需建立连接

    • 每个报文都是独立传输的
    • 前后报文可能给不同的分布式进程
  • 穿过层间接口的信息大小最小

  • 只能用一个整数表示本应用实体的标示

    二元组:本机 ip、本机 port

注意:但是传输报文时:必须要提供对方ip、port


应用层协议

运行在不同端系统上的应用进程如何相互交换报文(协议定义规范)

  • 交换的报文类型:请求和应答报文
  • 各种报文类型的语法:报文中的各个字段及其描述
  • 字段的语义:即字段取值的含义
  • 进程何时、如何发送报文及对报文进行响应的规则
  • 应用协议仅仅是应用的一个组成部分

公开协议以及专用协议

  • 公开协议:由RFC文档定义允许互操作,如:HTTP、SMTP
  • 专用(私有)协议:协议不公开,如:Skype

应用层需要传输层提供的服务

  • 数据丢失率
    • 有些应用则要求100%的可靠数据传输(如文件)
    • 有些应用(如音频)能容忍一定比例以下的数据丢失
  • 吞吐
    • 一些应用出于有效性考虑,对数据传输有严格的时间限制 (Internet 电话、交互式游戏 )
  • 延迟
    • 一些应用(如多媒体)必须需要最小限度的吞吐,从而使得应用能够有效运转
    • 一些应用能充分利用可供使用的吞吐(弹性应用)
  • 安全性(机密、完整性、可认证性)

常见应用对传输服务的要求

image-20240815222317474

Web 与 HTTP

概念

Web页由一些对象组成,对象可以是HTML文件、JPEG图像、Java小程序、声音剪辑文件等

  • 多数Web页都含有一个 HTML 基本文件,该 HTML 基本文件又包含若干对象的引用(链接)
  • 通过URL对每个对象进行引用:访问协议,用户名,口令字,端口等

Web 的应用层协议的核心是超文本传输协议 HTTP

  • 定义了 Web 客户向 Web 服务器请求 Web 页面的方式,以及服务器向客户传送 Web 页面的方式
  • 使用传输层 TCP 协议建立连接
  • HTTP 是无状态的,服务器并不维护客户的信息

非持续连接和持续连接

概述

在许多因特网应用程序中,客户和服务器在 个相当长的时间范围内通信,当这种客户一服务器的交互是经 TCP 进行的,应用程序的研制者就需要做一个重要决定 ,即每个请求/响应对是经个单独的 TCP 连接发送,还是所有的请求及其应经相同 TCP 连接发送呢?

前者就是非持续连接,后者就是持续连接(HTTP1.0 采用的是非持续连接;HTTP1.1 采用的是持续连接)

非持续连接存在的问题

  • 必须为每一个请求的对象建立和维护一个全新的连接,对于每个这样的连接,在客户和服务器中都要分配 TCP 的缓冲区和保持 TCP 变量,这给 Web 服务器带来了严重的负担,因为 Web 服务器可能同时服务于数以百计不同的客户的请求
  • 每一个对象经受两倍 RTT 的交付时延,即一个 RTT 用于创建 TCP ,另一个 RTT 用于请求和接收一个对象

响应时间模型

  • 往返时间 RTT:一个小的分组从客户端到服务器,再回到客户端的时间
  • 响应时间:发起TCP连接时间 + HTTP请求等待时间 + 传输时间 = 2RTT + 传输时间

HTTP报文格式

请求报文

请求报文第一行称为 请求行,后继的行称为 首部行,最后可能还有实体对象(实体对象会和首部行中间会有回车或者换行,注意是在特定的请求方法下才有内容,如 POST)

  • 请求行有三个字段:方法字段、URL 字段、HTTP 版本字段

    image-20240817171710053

  • 首部行指明了对象的主机域名/IP、是否继续连接、用户代理(比如浏览器版本)、语言类型等等

    image-20240817171933273

  • 一个HTTP请求报文的通用格式

    image-20240817172400390
响应报文

它也是由三部分组成:一个初始状态行首部行 , 然后是实体对象

  • 状态行有 3 个字段:协议版本字段、状态码和相应状态信息

  • 首部行指明了是否继续连接、服务器产生并发送该响应报文的日期和时间、用户代理(比如浏览器版本)、上次对象创建或者最后修改的日期和时间等等

    image-20240817220439467
  • 一个HTTP 响应报文的通用格式

    image-20240817220728619

响应状态码

  • 200 OK :请求成功
  • 301 Moved Permanently
    • 请求的对象已经被永久转移了;新的URL在响应报文的 Location(首部行中指定)
    • 客户端软件自动用新的 URL 去获取对象
  • 400 Bad Request :一个通用的差错代码,表示该请求不能被服务器理解
  • 404 Not Found :请求的文档在该服务上没有找到
  • 505 HTTP Version Not Supported:服务器不支持请求报文使用的 HTTP 协议版本

Cookie

用于维护客户和服务器之间的状态(HTTP 是无状态的)

image-20240817221119552

缺点

尽管 cookie 常常能简化用户的因特网活动,但是它的使用仍具有争议,因为它们被认为是对用户隐私的一种侵害;如我们刚才所见,结合 cookie 和用户提供的账户信息,Web 站点可以知道许多有关用户的信息,并可能将这些信息卖给第三方

Web 缓存

Web 缓存器 (Web cache) 也叫代理服务器,不访问原始服务器,就能满足客户的请求

  • 代理服务器既是服务器又是客户端
  • 浏览器将所有的 HTTP 请求发给代理服务器
    • 在缓存中的对象,直接返回对象
    • 如果不在缓存中,代理服务器请求原始服务器,然后再将对象返回给客户端

image-20240817221336106

如何判断放在代理服务器中的对象是否是陈旧的?

通过获取请求头的方式获取到 If-Modified-Since 信息(上次对象创建或者最后修改的日期和时间),进而可以判断出代理服务器中的对象在源服务器中是否有被修改过

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

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

相关文章

vs code中编写html的配置,插件安装

首先安装vs code 插件安装下面三个&#xff1a; 功能分别是&#xff1a; html css support &#xff1a;就是支持html环境&#xff0c;因为vs code就是一个文本编辑器 live server&#xff1a;自动更新编写的文件在浏览器刷新 auto rename tag&#xff1a;自动修改另一半标签…

Postman接口自动化测试:从入门到实践!

前言 在软件开发过程中&#xff0c;接口测试是确保软件各组件之间正确交互的关键环节。Postman作为一款强大的API开发工具&#xff0c;不仅支持接口请求的发送与调试&#xff0c;还提供了丰富的自动化测试功能&#xff0c;使得接口自动化测试变得更加高效和便捷。本文将从Post…

音频采集spring_ws_webrtc (html采集麦克风转gb711并发送广播播放)完整案例

下载地址&#xff1a;http://www.gxcode.top/code 项目说明 springbootwebscoektwebrtc 项目通过前端webrtc采集麦克风声音&#xff0c;通过websocket发送后台&#xff0c;然后处理成g711-alaw字节数据发生给广播UDP并播放。 后台处理项目使用线程池(5个线程)接受webrtc数据并…

文章解读与仿真程序复现思路——电力系统自动化EI\CSCD\北大核心《极端冰雪天气下计及孤岛划分与融合的配电网故障恢复》

本专栏栏目提供文章与程序复现思路&#xff0c;具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

【计算机三级-数据库技术】操作题大题(第八套)

第46题 &#xff08;1&#xff09; 1 (2) create table ( a1 int, a6 int, a10 int, Primary Key(a1, a6), Constraint fk_PerOrders Foreign Key (a1) References T1(a1), Constraint fk_PerOrders Foreign Key (a6) References T3(a6) ) 第47题 答案&#xff1a; [1]Pro…

给Go+Sciter开发的桌面客户端软件添加系统托盘图标

在桌面端软件开发中&#xff0c;系统托盘图标是提升用户体验的重要元素。托盘图标不仅能提供直观的状态反馈&#xff0c;还能让软件在后台运行时依然保持与用户的交互。通过托盘图标&#xff0c;用户可以轻松最小化软件、退出程序&#xff0c;甚至弹出通知&#xff0c;从而避免…

PG数据库导致断电/重启无法正常启动

一、问题 数据库断电后&#xff0c;启动PG数据库后无法正常启动&#xff0c;报”psql: could not connect to server: No such file or directory”的错误&#xff0c;错误图片如下&#xff1a; 二、背景分析 数据库是单机版&#xff0c;使用k8s进行部署运行在指定节点&#…

K8S系列——(二)、K8S部署RocketMQ集群

1、环境准备 要将RocketMQ部署到K8S上&#xff0c;首先你需要提前准备一个K8S集群环境&#xff0c;如图我已经准备好了一个版本为 v1.28.13 的 K8S 集群&#xff08;其他版本也没问题&#xff09;&#xff1a; 角色IPMaster192.168.6.220Node-1192.168.6.221Node-2192.168.6.…

Vue中的methods方法与computed计算属性的区别

在创建的 Vue 应用程序实例中&#xff0c;可以通过 methods 选项定义方法。应用程序实例本身会代理 methods 选项中的所有方法&#xff0c;因此可以像访问 data 数据那样来调用方法。在模板中绑定表达式只能用于简单的运算。如果运算比较复杂&#xff0c;可以使用 Vue.js 提供的…

科技在日常生活中的革新

在科技日新月异的今天&#xff0c;‌我们的生活正经历着前所未有的变革。‌从智能家居到可穿戴设备&#xff0c;‌科技已经渗透到我们生活的每一个角落&#xff0c;‌深刻地影响着我们的生活方式和社会经济的发展。‌ 智能家居系统的出现&#xff0c;‌无疑是科技改变生活的典…

C语言函数介绍(上)

函数概念库函数标准库和头文件库函数的使用方法头文件包含库函数文档的一般格式 自定义函数函数的语法形式函数例子 形参和实参实参形参实参和形参的关系 return 语句数组做函数参数 函数概念 数学中我们其实就见过函数的概念&#xff0c;比如&#xff1a;一次函数 ykxb &…

【Python进阶(十)】——Matplotlib基础可视化

&#x1f349;CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一&#xff5c;统计学&#xff5c;干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项&#xff0c;参与研究经费10w、40w级横向 文…

IOS 11 通用Base控制器封装

整体规划 BaseController&#xff1a;把viewDidLoad逻辑拆分为三个方法&#xff0c;方便管理。 BaseCommonController&#xff1a;不同项目可以复用的逻辑&#xff0c;例如&#xff1a;设置背景颜色方法等 BaseLogicController&#xff1a;本项目的通用逻辑&#xff0c;主要…

使用css如何获取最后一行的元素?使用css解决双边框问题

一、项目场景&#xff1a; 在小程序上需要实现一个如下图的ui效果图 需要满足以下条件 一行放不下 自动换行最后一行或者只有一行时&#xff0c;文字底部不能有线 二、初版实现 按照上面的要求&#xff0c;最开是的实现代码如下 我是给每一个元素都添加了一个下边框&#x…

测量 Redis 服务器的固有延迟

redis-cli --intrinsic-latency redis-cli --intrinsic-latency 命令用于测量 Redis 服务器的固有延迟。 固有延迟指的是 Redis 服务器处理一个命令所需的最短时间&#xff0c;不包括网络延迟。通过这个测量&#xff0c;我们可以了解 Redis 服务器本身的性能&#xff0c;而不…

[Algorithm][综合训练][mari和shiny][重排字符串]详细讲解

目录 1.mari和shiny1.题目链接2.算法原理详解 && 代码实现 2.重排字符串1.题目链接2.算法原理详解 && 代码实现 1.mari和shiny 1.题目链接 mari和shiny 2.算法原理详解 && 代码实现 自己的版本&#xff1a;三层循环暴力枚举 --> 超时 --> 40% …

ssrf漏洞复现

一、环境搭建 这里选用的平台是pikachu 地址&#xff1a;GitHub - zhuifengshaonianhanlu/pikachu: 一个好玩的Web安全-漏洞测试平台 可能遇到的问题——MySQL连接问题 mysql> ALTER USER root IDENTIFIED WITH mysql_native_password BY root; Query OK, 0 rows affect…

《黑神话:悟空》的AI技术解析:游戏智能的新境界

2024 年 8 月的第三周&#xff0c;哪哪都是悟空的声音&#xff0c;让我一度想起当年国足打进世界杯&#xff0c;学校不上课组织看球的场景。 从我个人情感而言&#xff0c;《黑神话&#xff1a;悟空》带来的震撼&#xff0c;惊喜和冲击不亚于当年国足在世界杯赛场上跟巴西踢球。…

SSRF实验

SSRF实验 SSRF概述实验测试结果 SSRF概述 SSRF服务端请求伪造&#xff0c;是因为网页提供的参数可以获取其他资源&#xff0c;接受网址在本地解析&#xff0c;来获取服务器本身的资源&#xff0c;但解析没过滤导致出现的问题 主要有几个方面的方法 dict 协议是一个在线网络字…

Ubuntu 22.04中解决Could not load the Qt platform plugin “xcb“问题解决方法

摘要&#xff1a;在Ubuntu 22.04中安装OpenCV后&#xff0c;遇到“load the Qt platform plugin “xcb” in site-packages/cv2/qt/plugins" even though it was found. 的问题&#xff0c;导致程序无法启动。本文详细探讨了该问题的成因&#xff0c;并介绍了几种常见但无…