【计算机网络】应用层

应用层协议原理

  • 客户-服务器体系结构:
    特点:客户之间不能直接通信;服务器具有周知的,固定的地址,该地址称为IP地址。
    配备大量主机的数据中心常被用于创建强大的虚拟服务器;
  • P2P体系结构:
    特点:对位于数据中心的专用服务器有最小(或者没有)依赖
    P2P最引人入胜的特征之一是它具自扩展性:尽管每个对等方都由于请求文件产生工作负荷,但是每个对等方通过向其他对等方发送文件也为系统增加服务能力。
  • 进程通信:
    套接字是同一台主机内应用层与运输层之间的接口,也被称为应用程序和网络之间的应用程序编程接口(API)。
  • 进程寻址:
    在因特网中,主机由其IP地址标识,而目的主机中到底是哪个应用程序?它由端口号表示。
  • 可供应用程序使用的运输服务:
    1. 可靠数据传输:
      应用程序的一端发送的数据正确,完全地交付给该应用程序的另一端,如果一个协议提供了这样的确保数据交付服务,我们就认为提供了可靠数据传输服务。
    2. 吞吐量
    3. 定时
    4. 安全性
  • 因特网提供的运输服务:
    1. TCP服务:
      TCP服务模型包括面向连接服务和可靠数据传输服务。除此之外,TCP还提供拥塞控制机制。
      SSL:安全套接字层
    2. UDP服务:
      UDP是一种不提供不必要服务轻量级运输协议。

Web和HTTP

Web的应用层协议是HTTP(超文本传输协议)协议,它是Web的核心。
HTTP使用TCP作为它的支撑运输协议
HTTP是一个无状态协议。
HTTP在默认情况下使用持续连接。

1.HTTP报文格式

  1. HTTP请求报文:

    GET /somedir/page.html HTTP/1.1
    Host:www.someschool.edu
    Connection:close
    Uset-agent:Mozilla/5.0
    Accept-language:fr
    

    HTTP请求报文的第一行被称作请求行,其后继的行叫做首部行。
    请求行有三个字段:方法字段,URL字段和HTTP版本字段。
    在方法字段中是,可以包括GET,POST,HEAD,PUT和DELETE,绝大部分的HTTP请求报文都使用GET方法。
    URL字段中包含了请求对象的标识。
    版本字段是自解释的。
    首部行Host:www.someschool.edu指明了对象所在的主机。
    通过包含Connection:close首部行,告诉服务器不必要使用持续链接,在发送完被请求的对象之后就关闭连接。
    User-agent:向服务器指明用户代理,即浏览器类型,以便于服务器发送对象的不同版本(如果有的话)。
    Accept-language:告诉浏览器用户想得到的对象的语法版本(如果有的话)。
    HTTP请求报文

  • 其中,使用POST方法的时候才使用实体体,例如,用户向搜索引擎搜索关键词时,实体体中就是用户在表单字段输入的值。
    用表单生成的请求报文不是必须使用POST方法!,例如www.somesite.com/animalsearch?monkes&bananas这时用户输入的内容就是moknkey和banana。

  • HEAD方法类似与GET方法,但是服务器不返回请求对象,应用程序开发者通常使用HEAD方法进行调试跟踪。

  • PUT方法通常与web发行工具联合使用,它允许用户上传对象到指定的Web服务器上的指定路径(目录)。

  • PUT也常被那些需要向Web服务器上传对象的一个用程序使用。

  • DELETE方法允许用户或者应用程序伤处Web服务器上的对象。

  • HTTP响应报文

    HTTP/1.1 OK
    Connection:close
    Date:Tue,18 Aug 2015 15:11:33 GMT
    Sever:Apache/2.2.3 (CentOS)
    Last-Modified:Tue,18 Aug 2015 15:11:03 GTM
    Content-Length:6821
    Contect-Type:text/html
    (data data data data ... )
    

    我们来看看这个响应报文:它有三个部分:状态行,首部行和实体体,这是上面那个请求报文的响应报文。
    我们来看看首部行:

    • Connection close:服务器用这个首部行告诉客户:发送完报文后,我将关闭TCP连接
    • Dtae:指示服务器产生并且发送该报文的日期和时间
    • Sercer:服务器的版本,这里指示该服务器时Apache Web服务器
    • Last-Modified:所请求的对象创建或者最后修改的时间
    • Content-Length:指示了被发送对象中的字节数
    • Content-Type:指示了实体体中的对象是什么类型,对象类型应该正式地由该首部行指示,而不是根据文件扩展名来展示
    • 响应报文格式:
      在这里插入图片描述

2.cookie:

cookie技术含有四个组件:

  1. 在HTTP响应报文中的一个cookie首部行
  2. 在HTTP请求报文中的一个cookie首部行
  3. 在用户端系统中有一个cookie文件,并且由用户浏览器管理
  4. 位于Web站点的一个后端数据库

3.Web缓存:

Web缓存器也叫做代理服务器。简单来说,就是在客户端与服务器之间,安装一个Web缓存器,该缓存器靠近客户端,当客户访问一个Web页面时,HTTP请求报文被Web缓存服务器接收,如果该Web缓存服务器上有客户请求的对象,则直接返回给客户,如果没有的话,则由该Web缓存服务器向Web服务器发送HTTP请求,Web服务器返回的对象由该Web缓存服务器接受并保存,然后返回给客户,这样,当第二次访问或者被配置到该Web缓存服务器的客户访问该站点的时候,Web缓存服务器就能快速做出回应。
Web缓存服务器的优势:

  1. 大大减少客户请求响应的时间。
  2. 大大减少一个机构的介入链路到互联网的通信量。

4.条件GET方法:

回想我们上面讲过的Web缓存,你有没有发现一个问题?就是如果一个Web页面被Web缓存器保存了,如果说,Web服务器后来更新了该页面,那么不是会出现问题吗?
解决这个问题的方法就是条件GET方法:
当用户请求某个页面的时候(正好该Web缓存服务器上有缓存),那么该Web缓存服务器就向Web服务器发送一个条件GET报文:

GET /fruit/kiwi.gif HTTP/1.1
Host:www.exotiquecuisine.com
If-modified-since:Wed,9 Sep 2015 09:23:24

这里需要注意:这里的If-Modified_since首部行的值,就是该Web缓存服务器中,上一次接收到该对象的Last-Modified时间,也就是说,该Web缓存器告诉Web服务器:如果这个时间之后你们改变了对象,那么你就把新的给我发过来。
如果该对象没有被改变,则Web服务器发送响应报文:

HTTP/1l1 304 Not Modified
Date:Sat,10 Oct 2015 15:39:29
Server:Apache/1.3.0(Unix)
(empty extity body)

注意该响应报文中并没有包含对象,如果说,Web服务器上没有更新该对象的话,那么此报文中包含对象只会浪费带宽。

英特网中的电子邮件

邮箱系统的组成部分:用户代理,邮件服务器,简单邮件传输协议(STMP),信箱

  • STMP与HTTP的对比:
    1. HTTP是一个“拉协议”,而STMP是一个“推协议”
    2. STMP要求每个报文使用7字节ASCII码形式,而HTTP数据不受这个限制
  • 邮件访问协议:
    用户之间发送邮件的时候,邮件被保存在了我的邮箱代理中了,但是我怎么查看邮件?STMP是一个推协议,我不能拉回来呀,所以就出现了邮件访问协议,目前流行的邮件访问协议有:第三版的邮局协议(POP3),因特网邮件访问协议(IMAP)以及HTTP。

DNS(域名系统):英特网的目录服务

因特网上的主机像人一样,我们也希望标识,主机可以使用主机名和IP地址来标识,但是我们更倾向于记住它的主机名而不是IP地址,所以,需要在主机名和IP地址之间进行转化,DNS就承担了这项任务。
DNS是:①一个有分层的DNS服务器实现的分布式数据库,②一个使得主机能够查询分布式数据库的应用层协议。
DNS协议运行在UDP之上,使用53号端口
除了进行主机名到IP地址的转换之外,DNS还提供了一些重要的任务:

  • 主机别名
  • 邮件服务器别名
  • 负载分配
DNS工作机理概述:
  1. DNS一种简单的设计是在英特网上只用一个DNS服务器,该服务器包含所有的映射。
    但是这种设计肯定存在很多问题:
    • 单点故障:如果说这个服务器发生了故障,整个因特网将瘫痪!
    • 通信容量:这个服务器要处理来自因特网上所有的DNS查询。
    • 远距离的集中式数据库:有时候真的可能要跨越半个地球!这中间可能有低俗的拥塞链路,那将会特别慢!
    • 维护:如果说出现了一个新的主机,他就要维护。

那么解决方法有哪些?我们来看看:

  1. 分布式,层次数据库:
    其中包括:根DNS服务器,顶级域(DNS)服务器,权威DNS服务器,还包括本地DNS服务器,但是要注意本地DNS服务器不属于该服务器的层次结构!
    在实践中,通常从请求主机到本地DNS服务器的查询是递归查询,其他的查询都是迭代查询。
  2. DNS缓存
    因为有缓存机制的存在,除了少数DNS查询以外,跟服务器都被绕过了。

P2P文件分发

我们之前讲述的客户-服务器的体系结构,总是要求服务器是打开的,使用P2P体系结构,能够对总是打开的基础设置服务器有最小的(甚至没有)依赖。
对等方不仅是比特的消费者,还是它们的重新分发者

视频流和文件分发网

HTTP
经HTTP的动态适应性流(Dynamic Adaptive Streaming over HTTP)(DASH)

  • 内容分发网(CDN)
    专用CND和第三方CND

套接字编程

  • UDP套接字编程:
    UDPClient.py:

    from socket import *
    serverName = 'hostname'
    serverPort = 12000
    clientSocket = socket(AF_INET,SOCK_DGRAM)
    message = raw_input('Input lowercase sentencte:')
    clientSocket.sendto(message.encode(),(serverName,serverPort))
    modifiedMessage,serverAddress = clientSocket.recvfrom(2048)
    print(modifiedMessage.decode())
    clientSocket.close()
    

    UDPServer.py:

    from socket import *
    serverPort = 12000
    serverSocket = socket(AF_INET,SOCK_DGRAM)
    serverSocket.bind('',serverPort)
    print("The server is ready to receive")
    while True:message,clientAddress = serverSocket.recvfrom(2048)modifiedMessage = message.decode().upper()serverSocket.sendto(modifiedMessage.encode(),clientAddress)
    
  • TCP套接字编程:
    TCPClient.py:

    from socket import *
    serverName = 'servername'
    serverPort = 12000
    clientSocket = socket(AF_INET,SOCK_STREAM)
    clientSocket.connect((serverName,serverPort))
    sentence = raw_input('Input lowercase sentence')
    clientSocket.send(sentence.encode())
    modifiedSentence = clientSocket.recv(1024)
    print('From Server: ',modifiedSentence.decode())
    clientSocket.close()
    

    TCPServer.py:

    from socket import *
    serverPort = 12000
    serverSocket = socket(AF_INET,SOCK_STREAM)
    serverSocket.bind(('',serverPort))
    serverSocket.listen(1)
    print('The Server is ready to receive')
    while True:connectionSocket,addr = serverSocket.accept()sentence = connectionSocket.recv(1024).decode()capitalizedSentence = sentence.upper()connectionSocket.send(capitalizedSentence.encode())connectionSocket.close()
    

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

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

相关文章

K8S知识点(二)

(1)K8S概念 K8S是通过控制pod来控制容器进而控制程序的 service是沟通Pod和外键的桥梁,可以实现负载均衡的效果,加权负载的效果 (2)环境搭建-环境规划 (3)环境搭建-主机安装 使用…

时序分解 | Matlab实现PSO-VMD粒子群算法优化变分模态分解时间序列信号分解

时序分解 | Matlab实现PSO-VMD粒子群算法优化变分模态分解时间序列信号分解 目录 时序分解 | Matlab实现PSO-VMD粒子群算法优化变分模态分解时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 PSO-VMD粒子群算法PSO优化VMD变分模态分解 可直接运行 分解效果…

2023-11-04 LeetCode每日一题(数组中两个数的最大异或值)

2023-11-04每日一题 一、题目编号 421. 数组中两个数的最大异或值二、题目链接 点击跳转到题目位置 三、题目描述 给你一个整数数组 nums &#xff0c;返回 nums[i] XOR nums[j] 的最大运算结果&#xff0c;其中 0 ≤ i ≤ j < n 。 示例 1&#xff1a; 示例 2&…

[动态规划] (六) 路径问题 LeetCode 63.不同路径II

[动态规划] (六) 路径问题: LeetCode 63.不同路径II 文章目录 [动态规划] (六) 路径问题: LeetCode 63.不同路径II题目解析解题思路状态表示状态转移方程初始化和填表返回值 代码实现总结 63. 不同路径 II 题目解析 (1) 机器人从左上角移动到右下角 (2) 机器人只能向右或者向…

【漏洞复现】Nginx_0.7.65_空字节漏洞

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞扫描3、漏洞验证 1.1、漏洞描述 1.2、漏洞等级 1.3、影响版本 0.7.65 1.4、漏洞复现 1、基础环…

JavaSpringbootMySQL高校实训管理平台01557-计算机毕业设计项目选题推荐(附源码)

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2 高校实训管理平台系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据增加流程 2.2.2 数据修改流程 2.2.3 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系…

Oracle安全基线检查

一、账户安全 1、禁止SYSDBA用户远程连接 用户具备数据库超级管理员(SYSDBA)权限的用户远程管理登录SYSDBA用户只能本地登录,不能远程。REMOTE_LOGIN_PASSWORDFILE函数的Value值为NONE。这意味着禁止共享口令文件,只能通过操作系统认证登录Oracle数据库。 1)检查REMOTE…

【python 深拷贝与浅拷贝】

python 深拷贝与浅拷贝 问题&#xff1a; 在用影刀编写流程的时候发现&#xff0c;明明只修改人名为“小张”对应的字典里面的值&#xff0c;但是所有的人名对应的值都被修改了。 原因&#xff1a; 第14行&#xff0c;设置键值对&#xff0c;值对应的变量“初始打卡类型字…

伪随机序列——m序列及MATLAB仿真

文章目录 前言一、m 序列1、m 序列的产生2、m 序列的性质①、均衡性②、游程分布③、移位相加特性④、自相关函数⑤、功率谱密度⑥、伪噪声特性 二、M 序列1、m 序列的产生2、m 序列的性质 三、MATLAB 中 m 序列1、m 序列生成函数的 MATLAB 代码2、MATLAB 仿真 前言 在通信系统…

CVE-2023-34040 Kafka 反序列化RCE

漏洞描述 Spring Kafka 是 Spring Framework 生态系统中的一个模块&#xff0c;用于简化在 Spring 应用程序中集成 Apache Kafka 的过程&#xff0c;记录 (record) 指 Kafka 消息中的一条记录。 受影响版本中默认未对记录配置 ErrorHandlingDeserializer&#xff0c;当用户将容…

二叉树第i层结点个数

//二叉树第i层结点个数 int LevelNodeCount(BiTree T, int i) {if (T NULL || i < 1)return 0;if (i 1) return 1;return LevelNodeCount(T->lchild, i - 1) LevelNodeCount(T->rchild, i - 1); } int GetDepthOfBiTree(BiTree T) {if (T NULL)return 0;return Ge…

【HTML】播放器如何自动播放【已解决】

自动播放器策略 先了解浏览器的自动播放器策略 始终允许静音自动播放在以下情况&#xff0c;带声音的自动播放才会被允许 2.1 用户已经与当前域进行交互 2.2 在桌面上&#xff0c;用户的媒体参与指数阈值(MEI)已被越过&#xff0c;这意味着用户以前播放带有声音的视频。 2.3 …

发现一款PDF转换成翻页电子书的网站

​随着科技的发展&#xff0c;电子书越来越受到人们的喜爱。而PDF格式的文件也越来越多地被人们使用。那么&#xff0c;如何将PDF文件转换成翻页电子书呢&#xff1f;今天就为大家推荐一款好用的PDF转翻页电子书网站。 一、网站介绍 这款网站是一款非常实用的在线转换工具&…

【漏洞复现】Apache_Shiro_1.2.4_反序列化漏洞(CVE-2016-4437)

感谢互联网提供分享知识与智慧&#xff0c;在法治的社会里&#xff0c;请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞分析3、漏洞验证 说明内容漏洞编号CVE-2016-4437漏洞名称Apache_Shiro_1.2.4_反序列化漏洞漏洞评级…

selenium自动化测试入门 —— cookie 处理

driver.get_cookies() # 获得cookie 信息 driver.get_cookies(name) # 获得对应name的cookie信息 add_cookie(cookie_dict) # 向cookie 添加会话信息 delete_cookie(name) # 删除特定(部分)的cookie delete_all_cookies() # 删除所有cookie 示例&#xff1a; from sel…

基于深度学习的视频多目标跟踪实现 计算机竞赛

文章目录 1 前言2 先上成果3 多目标跟踪的两种方法3.1 方法13.2 方法2 4 Tracking By Detecting的跟踪过程4.1 存在的问题4.2 基于轨迹预测的跟踪方式 5 训练代码6 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习的视频多目标跟踪实现 …

php7.4.32如何快速正确的开启OpenSSL扩展库,最简单的办法在这里!

&#x1f680; 个人主页 极客小俊 ✍&#x1f3fb; 作者简介&#xff1a;web开发者、设计师、技术分享博主 &#x1f40b; 希望大家多多支持一下, 我们一起进步&#xff01;&#x1f604; &#x1f3c5; 如果文章对你有帮助的话&#xff0c;欢迎评论 &#x1f4ac;点赞&#x1…

Android图形系统之HWComposer、ComposerHal、ComposerImpl、Composer、Hwc2::Composer实例总结(十四)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…

2023年中国自然语言处理行业研究报告

第一章 行业概况 1.1 定义 自然语言处理&#xff08;Natural Language Processing&#xff0c;简称NLP&#xff09;是一门交叉学科&#xff0c;它结合了计算机科学、人工智能和语言学的知识&#xff0c;旨在使计算机能够理解、解释和生成人类语言。NLP的核心是构建能够理解和…