2.1 应用层协议原理

2.1.1 网络应用程序体系结构

研发网络应用的程序的核心是写出能够运行在不同的端系统和通过网络彼此通信程序

例如:

  1. Web应用程序

    • 客户:浏览器程序(进程)

    • 服务:Web服务器程序(进程)

  2. P2P文件共享

    • 每个主机的程序(进程)都是类似的

2.1.2 进程通信

进程与网络之间的接口

进程通过套接字(socket)向网络发送和接收报文,套接字是同一台主机内应用层运输层之间的接口。

进程寻址

  1. 目标主机的地址(IP地址)
  2. 目标主机中进程(接收套接字)的标识符(端口号)
    • web服务器:80
    • 邮件(SMTP)服务器:25

2.1.3 可供程序选择的运输层(协议)服务

可靠数据传输

发送进程只需要将数据传进套接字就可以,完全相信数据能无差错的送到目的地。

吞吐量

进程间传输数据的比特率

因为其他会话将共享沿着该网络路径的带宽,并且因为这些会话将到达和离开,该吞吐量会随时间波动。这导致了另一个传输层的服务:传输层协议保证以特定的速率提供可用的吞吐量

定时

例如:发送套接字发送的数据到达接受套接字不迟于100ms

安全性

是否对传输的数据加密

2.1.4 因特网提供的运输服务

TCP 服务

面向连接服务

在应用层数据流动之前,TCP让客户和服务器相互交换传输层信息。这个所谓握手的过程提醒服务器和客户,让他们为大量分组到来做好准备。握手之后,一个TCP连接就在两个套接字之间建立了。应用程序结束发报之后,必须拆除连接

可靠的数据传输服务

进程能够依靠TCP无差错的传输数据

UDP服务

它是一种轻量级传输协议,只提供必要的服务,UDP是无连接的,因此在通信之前没有握手的过程。UDP不保证数据完整,有序的到达。

安全性

安全套接字层(Secure Sockets Layer, SSL), SSL不是与TCP和UDP在同一层次的第三种运输协议, 他是在应用层实现的,如果一个应用程序要使用SSL,它需要在客户端和服务端包括SSL代码。 SSL有自己的套接字API。就是传输之前将数据加密一下,再传给运输层,接收需要SSL解密。

2.1.5 应用层协议

2.2 Web与HTTP

Web是一个应用,HTTP是他的应用层协议

2.2.1 HTTP概况

  • Web页面:一个HTML基本文件以及几个引用对象,比如一个页面通过URL引用5个图片。
  • Web浏览器:IE,Chrome
  • Web服务器:Tomcat

HTTP是一个无状态协议,同一个用户连续请求同一个页面,服务器会老老实实的发送两次,不会因为客户短时间访问过就不再发送

2.2.2 非持续连接和持续连接

非持续连接

我们看看在非持续连接情况下,从服务器向客户传送一个Web页面的步骤。假设该页面含有一个HTML基本文件和10个JPEG图形

  1. HTTP客户进程在端口号80发起一个到服务器的TCP连接
  2. HTTP客户经套接字向该服务器发送一个HTTP请求报文
  3. HTTP服务器接收该请求报文,从其存储器中检索出对象在一个 HTTP 响应报文中封装对象,并通过其套接字向客户发送响应报文
  4. HTTP服务器进程通知TCP断开该TCP连接
  5. HTTP客户接收响应报文,TCP连接关闭。该报文指出封装的对象是一个HTML文件,客户从响应报文中提取出该文件,检查该HTML文件,得到对10个JPEG图形的引用
  6. 对每个引用的JPEG图形对象重复前4个步骤。

这个过程一共发起了11次TCP连接,比较浪费时间,

持续连接

在采用HTTP 1.1持续连接的情况下,服务器在发送响应后保持该TCP连接打开。在相同的客户与服务器之间,后续的请求和响应报文能够通过相同的连接进行传送。特别是,一个完整的Web页面(上例中的HTML基本文件加上10个图形)可以用单个持续TCP连接进行传送。更有甚者,位于同一台服务器的多个Web页面在从该服务器发送给同一个客户时,可以在单个持续TCP连接上进行。对对象的这些请求可以一个接一个地发出,而不必等待对未决请求(流水线)的回答。一般来说,如果一条连接经过一定时间间隔(一个可配置的超时间隔)仍未被使用,HTTP服务器就关闭该连接。

2.2.3 HTTP报文格式

HTTP 请求报文

GET /somedir/page.html HTTP/1.1  请求行
Host: www.someschool•edu 首部行
Connection: close
User-agent: Mozilla/5.0
Accept-language: fr
  • 请求行

    • 方法
    • URL字段
    • HTTP版本字段
  • 首部行

    • Host:指明对象所在的主机
    • Connection:close : 不使用持续连接,要求服务器发送完请求的对象后就关闭连接
    • User-agent:指明用户代理,即浏览器类型(Mozilla/5.0 Firefox浏览器),服务器可以根据不同的浏览器发送对象的不同版本
    • Accept-language:表示用户想得到该对象的语法版本。

然而,你可能已经注意到了在首部行(和附加的回车和换行)后有一个“实体体” (entity body)。使用GET方法时实体体为空,而使用POST方法时才使用该实体体。当用户提交表单时,HTTP客户常常使用POST方法,例如当用户向搜索引擎提供搜索关键词时。使用POST报文时,用户仍可以向服务器请求一个Web页面,但Web页面的特定内容依赖于用户在表单字段中输入的内容。如果方法字段的值为POST时,则实体体中包含的就是用户在表单字段中的输入值。

HTTP响应报文

HTTP/1.1 200 OK
Connection: close
Date: Tue, 18 Aug 2015 15:44:04 GMT
Server: Apache/2.2.3 (CentOS)
Last-Modified: Tuer 18 Aug 2015 15:11:03 GMT
Content-Length: 6821
Content-Type: text/html
(data data data data data ..•)
  • 状态行

    • 协议版本
    • 状态码
    • 相应状态信息
  • 首部行

    • Connection:close : 同请求报文
    • Date:服务器发送响应报文的时间
    • Server:指明服务器类型(Apache),与请求报文的User-agent对应
    • Last-Modified:对象最后修改的时间
    • Content-Length:被发送对象的字节数
    • Content-Type:实体体的对象是HTML文本
  • 实体体

  • 补充:状态码

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

2.2.4 用户与服务器交互:cookie

这个过程描述的形象一点:你第一次去一个俱乐部(访问一个网站),这个俱乐部会在俱乐部会员名单里加上你的名字(后台数据库为你创建一个唯一的cookie),并给你一个带号码的胸章(cookie),这样,以后你每次去找个俱乐部,只要带上胸章,这个俱乐部就会为你提供会员才有的服务,比如个性化广告。

2.2.5 Web缓存(服务器)

  • Web缓存器:通常是ISP购买和安装,目的是减少一个机构(局域网)到因特网的通讯量,从而降低带宽,节省费用。
  • 原理:局域网中的用户想要访问Web初始服务器中的数据,用户可以设置访问缓存器,如果缓存器中有这些数据,则直接高速返回给用户,否则,由缓存器访问初始服务器,把得到的数据再返回给用户,同时,在缓存器上存一个备份,方便用户下次访问。

2.2.6 条件GET方法

用户向缓存器请求对象,正好缓存器中有这个对象,这时候,缓存器会向初始服务器发送一个条件GET方法

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

If-Imodified-since是表明该对象最后一次修改时间,初始服务器收到请求后,会检查对象是否在这个时间之后修改过,如果修改过,就正常返回这个对象,否则,返回

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

应用层01-HTTP的更多相关文章

  1. 深入浅出HTTP请求(转自http://www.cnblogs.com/yin-jingyu/archive/2011/08/01/2123548.html)

    HTTP(HyperText Transfer Protocol)是一套计算机通过网络进行通信的规则.计算机专家设计出HTTP,使HTTP客户(如Web浏览器)能够从HTTP服务器(Web服务 器)请 ...

  2. TCP/IP详解系列 --- 概念总结01

    UDP协议  .vs.  TCP协议:  原理上:(TCP报文段. vs . UDP用户数据报) TCP协议的特性: TCP是面向连接的运输层协议,应用程序在使用TCP协议之前,必须先建立TCP连接. ...

  3. 2、CC2541芯片中级教程-OSAL操作系统(进一步了解-OLED && 普通按键和5方向按键-中断!!!)这个系统驱动层和应用层不一样~

    本文根据一周CC2541笔记汇总得来—— 适合概览和知识快速索引—— 全部链接: 中级教程-OSAL操作系统\OSAL操作系统-实验01 OSAL初探 [插入]SourceInsight-工程建立方法 ...

  4. 应用层(一)HTTP服务访问基本流程和HTTP报文详解

    HTTP属于TCP/IP模型中一个面向文本的应用层协议,所使用的服务器端口号的TCP中的80端口,通信双方在这个基础上进行通信. 每个服务器都有一个应用进程,时刻监听着80端口的用户访问请求.当有用户 ...

  5. MySQL应用层传输协议分析

    001.在MySQL应用层传输协议中主要有如下三种类型的数据: 01.整数类型. 02.字符串类型. 03.描述数据包. 002.MySQL应用层传输协议中对整型的说明: 01.固定长度的整型---- ...

  6. Python网络01 原始Python服务器

    原文:Python网络01 原始Python服务器 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 之前我的Python教程中有人 ...

  7. 【Zigbee技术入门教程-01】Zigbee无线组网技术入门的学习路线

    [Zigbee技术入门教程-01]Zigbee无线组网技术入门的学习路线 广东职业技术学院  欧浩源 一.引言    在物联网技术应用的知识体系中,Zigbee无线组网技术是非常重要的一环,也是大家感 ...

  8. 【C++】 网络编程 01

    趁着计算机网络这门课布置了课程设计,学习下网络编程. 系统:Ubuntu 14.01... 1. 关于Socket(套接字) 1.1 套接字是存在于运输层和应用层间的抽象层,通过它来区分不同应用程序进 ...

  9. 构建基于TCP的应用层通信模型

    各层的关系如下图,表述的是两个应用或CS间通信的过程:   通常使用TCP构建应用时,需要考虑传输层的通信协议,以便应用层能够正确识别消息请求.比如,一个请求的内容很长(如传文件),那肯定要分多次发送 ...

  10. 第二次实验报告:使用Packet Tracer分析应用层协议

    个人信息:      •  姓名:李微微       •  班级:计算1811       •  学号:201821121001 一.摘要 本文描述使用Packet Tracer,正确配置网络参数,抓 ...

随机推荐

  1. 解决docker push镜像到私有仓库时的报错【http: server gave HTTP response to HTTPS client】

    一:解决docker push镜像到私有仓库时的报错[http: server gave HTTP response to HTTPS client]

  2. Word-批量导出Word中的图片

    当我们需要把Word文件中的图片保存起来,你是如何导出Word图片呢?右键一张张保存图片吗?这效率太低了.如果文档中有大量的图片,这个方法会浪费很多时间. 下面给大家分享word如何批量导出图片的技巧 ...

  3. K8S部署之VMWare网络拓扑踩坑

    目录 背景 VMWare 虚拟网络 安装 Ubuntu Server 20.04 时遇到的网络问题 解决方法和解释 总结 背景 知乎上最近发现一篇好文 图解K8S(01):基于Ubuntu 20.04 ...

  4. Nginx实战-公网LB限流配置等

    前提: Nginx要实现根据ip地址进行限流与不限流的区分需要通过源码包安装GeoIP模块 找到与yum安装版本相同的源码包,通过configure进行安装 ./configure --prefix= ...

  5. GaussDB(for MySQL) Serverless全面商用:无感弹性,极致性价比

    本文分享自华为云社区<GaussDB(for MySQL) Serverless全面商用:无感弹性,极致性价比>,作者: GaussDB 数据库. 技术背景 对于现代企业级IT系统,数据库 ...

  6. 吴X凡绯闻女友小怡同学被骂到清空社交平台?各大平台连敏感词库都没有的吗?

    敏感词都没有的平台 最近某加拿大籍贯的 rapper 被曝私生活不检点,且极有可能涉及诱X未成年少女,成为一个 raper. 当然至于是否属实,其实一个人是否是海王,微信.QQ 聊天记录里面记得清清楚 ...

  7. XML和JSON的比较

    XML和JSON的比较 XML与JSON都可以用来描述或者存储数据,两者都有各自的优点,使用场景取决于需求. 描述 XML 可扩展标记语言Extensible Markup Language,是一种用 ...

  8. Spring Boot图书管理系统项目实战-4.基础信息管理

    导航: pre:  3.用户登录 next:5.读者管理 只挑重点的讲,具体的请看项目源码. 1.项目源码 需要源码的朋友,请捐赠任意金额后留下邮箱发送:) 2.页面设计 出版社管理.语种管理.书架管 ...

  9. QT - Day 1

    Date: 2021/3/12开始学习 教程视频: QT基本介绍: 跨平台图形界面引擎 优点  跨平台 接口简单,容易上手 一定程度上简化了内存回收 创建第一个QT程序  点击创建项目后,选择项目路径 ...

  10. 项目实战:Qt中英文输入软键盘(支持Qt4、Qt5、触摸和键鼠混合输入等)

      需求   1. 全屏软键盘:  2. 输入英文:  3. 输入中文:  4. 支持触摸.键盘和输入混合输入:  5. 目前有黑色系皮肤:  6. Qt4和Qt5区分2个版本:   Demo:Qt5 ...