文章目录

  • 应用层协议原理
    • 进程通信
    • 应用层协议之HTTP
      • 持久连接与非持久连接
      • HTTP报文格式
      • HTTP缓存
    • 应用层协议之FTP
    • 应用层协议之SMTP
      • 应用层协议之DNS

应用层协议原理

进程通信

本文对同一主机上的进程间的通信不感兴趣,这是操作系统完成的。本文关注运行在不同端系统上的进程间的通信。

不同端系统上的进程通过跨越计算机网络**交换报文(message)**来互相通信。发送进程创建并向网络中发送报文,接受进程接受这些报文并可能负责会送报文。

进程通过一个称为**套接字(socket)**的接口API在网络上发送和接受报文。应用程序开发者可以控制套接字在应用层端的所有东西,但是对该套接字的运输层几乎没有控制,最多也只是选择运输层协议(TCP还是UDP服务)或者设置最大缓存、最大报文段长度等等。

应用层协议之HTTP

应用层协议定义了运行在不同端系统上的应用程序进程如何相互传递报文,包括:

  • 报文类型,如请求报文和响应报文。
  • 报文语法。如报文中的各个字段及其详细描述。
  • 进程何时、如何发送报文以及对报文进行响应的规则。

这里简单介绍HTTP(超文本传输协议)。该协议由两部分程序实现:客户机程序和服务器程序,他们运行在不同的端系统中,通过交换HTTP报文进行会话。HTTP定义了这些报文的格式以及客户机和服务器是如何进行报文交换的。

HTTP使用TCP作为运输层协议。HTTP客户机发起一个于服务器的TCP连接,一旦建立连接,客户机和服务器进程可以通过套接字接口访问TCP。一旦客户机发送了一个请求报文,该报文就“脱离客户机控制”并“进入TCP”控制。

将如某客户机在短短几毫秒内两次请求了同一个对象,服务器并不会因为刚刚为该用户提供了对象就不再作出反应,而是重新发送对象。因此HTTP也被称为无状态协议

持久连接与非持久连接

HTTP既可以使用非持久连接(nonpersistent connection),也可以使用持久连接(persistent connection)。HTTP/1.0使用非持久连接,HTTP/1.1默认使用持久连接。


  • 非持久连接

使用非持久连接,每次服务器发出一个对象后,相应的TCP连接就被关闭,也就是说每个连接都没有持续到可用于传送其他对象。假设一个网页包含了1个HTML和10个JEPG。每个TCP连接只用于传输一个请求消息和一个响应消息。就上述例子而言,用户每请求一次那个Web页面,就产生11个TCP连接,当然这11个TCP连接可能是并行或者串行的。

我们先估算一下从客户请求基本HTML文件到它收到该文件所经历的时间。为此我们定义往返时间(Round Trip Time,简称RTT),它是一个小分组从客户主机游动到服务器主机再返回客户主机所花的时间。RTT包括分组传播延迟、在中间路由器和交换机上的分组排队延迟以及分组处理延迟。下面考虑用户点击某个超链接时会发生什么。用户的点击导致浏览器发起建立一个与Web服务器的TCP连接,这里涉及一次"三次握手"过程。三次握手过程的前两次结束时,流逝的时间为1个RTT(也就是一个来回)。此时客户把HTTP请求消息发送到TCP连接中,客户接着把三次握手过程最后一次中的确认捎带在包含这个消息的数据分节中发送出去。服务器收到来自TCP连接的请求消息后,把相应的HTML文件发送到TCP连接中,服务器接着把对早先收到的客户请求的确认捎带在包含该HTML文件的数据分节中发送出去。这个HTTP请求顺应交互也花去1个RTT时间。因此,总的响应时间粗略地算是2个RTT加上服务器发送这个HTMI文件的时间


  • 持久连接

非持久连接有些缺点。首先,客户得为每个待请求的对象建立并维护一个新的连接。对于每个这样的连接,TCP得在客户端和服务器端分配TCP缓冲区,并维持TCP变量。对于有可能同时为来自数百个不同客户的请求提供服务的Web服务器来说,这会严重增加其负担。其次,如前所述,每个对象都有2个RTT的响应延长–一个RTT用于建立TCP连接,另一个RTT用于请求和接收对象。最后,每个对象都遭受TCP慢启动,因为每个TCP连接都起始于慢启动阶段。不过并行TCP连接的使用能够部分减轻RTT延迟和慢启动延迟的影响。

在持久连接情况下,服务器在发出响应后让TCP连接继续打开着。同一对客户/服务器之间的后续请求和响应可以通过这个连接发送。整个Web页面(上例中为包含一个基本HTMLL文件和10个图像的页面)自不用说可以通过单个持久TCP连接发送:甚至存放在同一个服务器中的多个Web页面也可以通过单个持久TCP连接发送。通常,HTTP服务器在某个连接闲置一段特定时间后关闭它,而这段时间通常是可以配置的。持久连接分为不带流水线(without pipelining)和带流水线(with pipelining)两个版本。如果是不带流水线的版本,那么客户只在收到前一个请求的响应后才发出新的请求。这种情况下,Web页面所引用的每个对象(上例中的10个图像)都经历1个RTT的延迟,用于请求和接收该对象。与非持久连接2个RTT的延迟相比,不带流水线的持久连接已有所改善,不过带流水线的持久连接还能进一步降低响应延迟。不带流水线版本的另一个缺点是,服务器送出一个对象后开始等待下一个请求,而这个新请求却不能马上到达。这段时间服务器资源便闲置了。

HTTP/1.1的默认模式使用带流水线的持久连接。这种情况下,HTTP客户每碰到一个引用就立即发出一个请求,因而HTTP客户可以一个接一个紧挨着发出各个引用对象的请求。服务器收到这些请求后,也可以一个接一个紧挨着发出各个对象。如果所有的请求和响应都是紧挨着发送的,那么所有引用到的对象一共只经历1个RTT的延迟(而不是像不带流水线的版本那样,每个引用到的对象都各有1个RTT的延迟)。另外,带流水线的持久连接中服务器空等请求的时间比较少。与非持久连接相比,持久连接(不论是否带流水线)除降低了1个RTT的响应延迟外,慢启动延迟也比较小。其原因在于既然各个对象使用同一个TCP连接,服务器发出第一个对象后就不必再以一开始的缓慢速率发送后续对象。相反,服务器可以按照第一个对象发送完毕时的速率开始发送下一个对象。

HTTP报文格式

我们来查看一个典型的请求报文格式:

POST /search HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint,
application/msword, application/x-silverlight, application/x-shockwave-flash, */*
Referer: http://www.google.cn/
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)
Host: www.google.cn
Connection: Keep-Alive
Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g;
NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y-
FxlRugatx63JLv7CWMD6UB_O_r  hl=zh-CN&source=hp&q=domety


该报文的第一行,称为request line,包含了3个字段:方法字段、URL字段和HTTP协议版本字段。POST /search HTTP/1.1很直观。
其后继的行称为header line。包含了头部字段名和值。比如,Connection: keep-alive就表示持久连接,如果是Connection: close表示非持久连接。

再来看响应报文:

HTTP/1.1 200 OK
Date: Mon, 23 May 2005 22:38:34 GMT
Content-Type: text/html; charset=UTF-8
Content-Encoding: UTF-8
Content-Length: 138
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
ETag: "3f80f-1b6-3e1cb03b"
Accept-Ranges: bytes
Connection: close<html>
<head><title>An Example Page</title>
</head>
<body>Hello World, this is a very simple HTML document.
</body>
</html>

除了第一行变成了state line,其格式与请求报文一致。
state line包含了版本,状态码和响应短语。HTTP/1.1 200 OK可知。

状态代码由服务器发出,以响应客户端对服务器的请求。
1xx(信息):收到请求,继续处理
2xx(成功):请求已成功接收,理解和接受
3xx(重定向):需要采取进一步措施才能完成请求
4xx(客户端错误):请求包含错误的语法或无法满足
5xx(服务器错误):服务器无法满足明显有效的请求
状态码详情请查阅:https://en.wikipedia.org/wiki/List_of_HTTP_status_codes

HTTP缓存

详见计算机网络基础——HTTP缓存机制。

应用层协议之FTP

FTP即文件传输协议,在典型的FTP会话中,用户使用本地主机向一台远程主机上传或者下载文件。
用户首先提供远程主机的主机名,使得本地主机的FTP客户机进程建立一个到远程主机FTP服务器进程的TCP连接。然后该用户提供用户标识和口令,作为FTP命令的一部分在该TCP连接上传送,一旦服务器向该用户授权,用户就可以向远程文件系统拷贝存放在本地文件系统中的一个或者多个文件。

HTTP与FTP的区别在于,FTP使用两个并行的TCP连接来传输文件,一个是控制连接(control connection),一个是数据连接(data connection)。控制连接用于在两个主机之间传输控制信息,如用户标识、口令、改变远程目录的命令以及“put”和“get”文件命令。数据连接用于实际传输一个文件。

应用层协议之SMTP

因特网电子邮件系统由3个主要部分组成:

  • 用户代理(user agent)。用户代理也被称为邮件阅读器,它允许用户阅读、回复、转发、保存和撰写报文。
  • 邮件服务器(mail server)。每个接收方和发送方在邮件服务器上有一个邮箱(不一定是同一个邮件服务器)。一个典型的邮件发送过程是:从发送方的用户代理开始,传输到发送方的邮件服务器,再传输到接收方的邮件服务器,然后才被分发到接收方的邮箱中。
  • SMTP(Simple Mail Transfer Protocol)。

SMTP是持久连接。SMTP协议是推协议,即向服务器推送报文的协议。而HTTP是拉协议,即向服务器请求报文的协议。

由于SMTP是推协议,邮件的接收方是不能通过SMTP接受邮件。接受邮件需要其他协议,目前有多个流行的邮件访问协议,包括第三版的邮局协议(Post Office Protocol-Version 3,POP3)、因特网邮件访问协议(Internet Mail Access Protocol,IMAP)以及HTTP。

应用层协议之DNS

有两种方式识别主机:通过主机名或者IP地址,人们喜欢便于记忆的主机名标识,而计算机喜欢定长的、有着层次结果的IP地址。为了折中这种这些不同的偏好,需要对主机名到IP地址进行转换。这就是DNS的主要任务。

DNS协议运行在UDP之上,它是一个由分层的DNS服务器实现的分布式数据库也是一个允许主机查询分布式数据库的应用层协议

DNS通常由其他应用层协议所使用,用于将用户提供的主机名解析为IP地址。

计算机网络基础——应用层相关推荐

  1. 计算机网络基础——应用层(上云必看)

    基本概念 进程:主机上运行的程序,一个主机同时可以有多个进程 通过网络报文交换通信 P2P之中一个进程即可以是客户也可以是服务器 一对进程之中,发起进程的是客户:等待联系的是服务器 Socket:连接 ...

  2. 计算机网络基础之应用层

    温故: 网络层在OSI七层中为位于第三层,同时也是通信子网的最高层,物理层传输的单位是比特流,数据链路层传输的是数据帧,而网络层的传输单位是数据包,传输层的传输单位是报文.这里还要做一个比较,物理层要 ...

  3. 计算机网络基础常考面试题总结

    计算机网络基础常考面试题总结 1.OSI,TCP/IP,五层协议的体系结构,以及各层协议 答:OSI分层 (7层):物理层.数据链路层.网络层.传输层.会话层.表示层.应用层. TCP/IP分层(4层 ...

  4. 东财在线计算机第一套作业,东财在线21春《计算机网络基础》第一套作业题目及答案...

    <计算机网络基础>第一套作业 1.[单选题]802系列标准是由(   )制定的. 雅宝题库QV同步1144766066答案网答案资料下载,请参考帮助中心说明 A.IEEE B.TIA C. ...

  5. 计算机类专计算机网络基础与应用,2016年秋季学期计算机专业《计算机网络基础(专)》第一次语音答疑.ppt...

    2016年秋季学期计算机专业<计算机网络基础(专)>第一次语音答疑剖析 第6章:网络互连协议TCP/IP (2)IP数据包的报文格式 源IP地址 总长度 服务类型 版本号 头长度 标识符 ...

  6. 计算机网络tcp传送,计算机网络基础课程—传输控制协议(Tcp)

    原标题:计算机网络基础课程-传输控制协议(Tcp) •TCP和UDP都使用相同的网络层(IP),但TCP向应用层提供与UDP完全不同的服务. •TCP提供一种面向连接的.可靠的字节流服务. •UDP提 ...

  7. 计算机网络的定义分类性能指标,第1章 计算机网络基础

    第1章计算机网络基础 1.1 计算机网络基本概念 1.1.1 计算机网络的定义.分类与性能指标 1.计算机网络的定义 2.计算机网络的分类 (1)根据交换功能分:电路交换网.报文交换网.分组交换网和混 ...

  8. 最容易理解的计算机网络 基础知识概论(下)

    文章目录 1.计算机网络的分类 1.1按照传输介质分类 1.2按照网络的使用者进行分类 1.3按照网络的规模和作用范围进行分类. 2.计算机网络的性能指标 2.1 带宽 2.2 时延 2.2.1网络时 ...

  9. 计算机网络技术发源于什么,计算机网络基础试题和答案

    计算机网络基础试题和答案 一.单选题 1.通信子网为网络源结点与目的结点之间提供了多条传输路径的可能性,路由选择指的是( C ) A. 建立并选择一条物理链路 B. 建立并选择一条逻辑链路 C. 网络 ...

最新文章

  1. Unix/Linux环境C编程新手教程(22) C/C++怎样获取程序的执行时间
  2. go通过thrift连接hbase_关于thrift协议改进畅想
  3. 017 Android加固之APK混淆和保护方式
  4. Vue和其他框架的区别
  5. 光纤收发器在使用过程中有哪些需要注意的事项?
  6. 18.外部相机校准——介绍,几何相机校正,自由度 测验,刚体变换,符号_1
  7. 如何删除C++容器中的值
  8. 数据分类分级指南范围
  9. 虚拟服务器搭建棋牌,棋牌开源游戏服务器框架
  10. 算法训练 递归输出数字三角形
  11. java base64解码乱码_java base64解码 怎么是乱码呢
  12. iOS开发中的Web应用概述
  13. 解决word文件由于扩展名不匹配问题
  14. 天气学诊断实习四 计算垂直速度
  15. 几个图像缩放算法的比较
  16. 从月薪6k到15k,我是如何在3个月内做到的?
  17. oracle 查看PACKAGE里的函数代码
  18. RF+APPIUM详细使用教程
  19. multisim 11
  20. 固体物理 2022.9.30

热门文章

  1. 基于PHP扩展的WAF实现
  2. MFC提示this application has requested the runtime to terminate it in an unusual way editbox框已经删了还在使用
  3. VSCode设置代理
  4. 多核处理器的运行模式
  5. Mac下转换APFS格式的移动硬盘分区为“Mac OS扩展(日志式)”或其它
  6. scratch优秀案例分享:母亲节制作一个动画贺卡
  7. 数据库-Elasticsearch进阶学习笔记(集群、故障、扩容、简繁体、拼音等)
  8. 有N个台阶,可以走两步也可以走一步 一共有多少种走法
  9. Latex中如何输入特殊字符
  10. 计算机毕业设计 Android的汽车租赁租车app