《计算机网络自顶向下方法》读书笔记:应用层
Posted 思源湖的鱼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《计算机网络自顶向下方法》读书笔记:应用层相关的知识,希望对你有一定的参考价值。
目录
前言
打算系统学习下计算机网络,就来翻阅经典的自顶向下
本篇是第二章应用层,学习有关网络应用的原理和实现方面的知识,涉及开发运行在TCP和UDP上的网络应用程序。
资源:
- 书是第7版中文电子书:https://pan.baidu.com/s/1PidIzLmFVWAb8T74GyVGlQ 密码: bhob
- 网站是2021年更新的第8版:https://www-net.cs.umass.edu/kurose_ross/interactive/
1、协议
(1)应用程序体系结构
1、客户-服务器体系结构(client-server architecture, C-S)
有一个总是打开的主机称为服务器,它服务于来自许多其他称为客户的主机的请求。该服务器具有固定的、周知的IP地址
配备大量主机的数据中心(data center)常被用于创建强大的虚拟
服务器
2、P2P 体系结构(Point-to-Point architecture)
对位于数据中心的专用服务器有最小的(或者没有)依赖。相反,应用程序在间断连接的主机对之间使用直接通信,这些主机对被称为对等方
自扩展性(self-scalability):在一个P2P文件共享应用中,尽管每个对等方都由于请求文件产生工作负载,但每个对等方通过向其他对等方分发文件也为系统增加服务能力
(2)进程通信
进行通信的实际上是进程(process)而不是程序。一个进程可以被认为是运行在端系统中的一个程序。两个不同端系统上的进程,通过跨越计算机网络交换报文(message)而相互通信
1、客户和服务器进程
对每对通信进程, 我们通常将这两个进程之一标识为客户(client),而另一个进程标识为服务器(server),发起通信(即在该会话开始时发起与其他进程的联系)的进程被标识为客户,在会话开始时等待联系的进程是服务器。 如,对于Web而言,浏览器是一个客户进程,Web服务器是一台服务器进程
2、进程与计算机网络之间的接口
进程通过一个称为套接字(socket)的软件接口向网络发送报文和从网络接收报文。应用程序开发者对于运输层的控制仅限于:选择运输层协议;也许能设定几 个运输层参数,如最大缓存和最大报文段长度
3、进程寻址
需要定义两种信息
- 主机的地址,即IP地址
- 在目的主机中指定接收进程的标识符,即端口
(3)可供应用程序使用的运输服务
从四个 方面对应用程序服务要求进行分类:可靠数据传输、吞吐量、定时和安全性
- 可靠数据传输(reliable data transfer):必须做一些工作以确保由应用程序的一端发送的数据正确、完全地交付给该应用程序的另一端
- 吞吐量(instantaneous throughput):在沿着一条网络路径上的两个进程之间的 通信会话场景中,可用吞吐量就是发送进程能够向接收进程交付比特的速率。具有吞吐量要求的应用程序 被称为带宽敏感的应用(bandwidth-sensitive application);弹性应用(elastic application)能够根据 当时可用的带宽或多或少地利用可供使用的吞吐量
- 定时:一个例子是发送方注入进套接字中的每个比特到达接收方的套接字不迟于 100ms,个人认为这里可能翻译为低时延更好
- 安全性:机密性、完整性和端点鉴别,CIA
(4)因特网提供的运输服务
其实就是传输层协议
1、TCP
- 面向连接的服务:在应用层数据报文开始流动之前,TCP让客户和服务器互相交换运输层控制信息。这个所谓的握手过程提醒客户和服务器,让它们为大量分组的到来做好准备。在握手阶段后,一个TCP连接(TCP connection)就在两个进程的套接字之间建立了。这条连接是全双工的,即连接双方的进程可以在此连接 上同时进行报文收发。当应用程序结束报文发送时,必须拆除该连接
- 可靠的数据传送服务:通信进程能够依靠TCP,无差错、按适当顺序交付所有发 送的数据。当应用程序的一端将字节流传进套接字时,它能够依靠TCP将相同的字节流交付给接收方的套接字,而没有字节的丢失和冗余。
2、UDP
- 不提供不必要服务的轻量级运输协议,它仅提供最小服务
- 无连接,因此在两个进程通信前没有握手过程
- 不可靠数据传送服务
3、对应的应用层协议
(5)应用层协议
应用层协议定义了
- 交换的报文类型,例如请求报文和响应报文
- 各种报文类型的语法,如报文中的各个字段及这些字段是如何描述的
- 字段的语义,即这些字段中的信息的含义
- 确定一个进程何时以及如何发送报文,对报文进行响应的规则
有些应用层协议是由RFC文档定义的,因此它们位于公共域中;还有很多别的应用层协议是专用的,有意不为公共域使用
2、Web 和 HTTP
(1)HTTP概况
Web的应用层协议是超文本传输协议(HyperText Transfer Protocol, HTTP),它是Web 的核心,在[RFC 1945]和[RFC 2616]中进行了定义
HTTP由两个程序实现:一个客 户程序和一个服务器程序。客户程序和服务器程序运行在不同的端系统中,通过交换 HTTP报文进行会话。HTTP定义了这些报文的结构以及客户和服务器进行报文交换的方 式
HTTP使用TCP作为它的支撑运输协议(而不是在UDP上运行)。HTTP协议不用担心数据丢失,也不关注TCP从网络的数据丢失和乱序故障中恢复的细节。那是TCP以及协议栈较 低层协议的工作
HTTP是一个无状态协议(stateless protocol):服务器向客户发送被请求的文件,而不存储任何关于该客户 的状态信息。假如某个特定的客户在短短的几秒内两次请求同一个对象,服务器并不会因 为刚刚为该客户提供了该对象就不再做出反应,而是重新发送该对象,就像服务器已经完 全忘记不久之前所做过的事一样
现在HTTP3都要应用了
(2)非持续连接和持续连接
1、非持续连接(non-persistent connection):每个请求/响应对是经一个单独的TCP连接发送
发送一个web页面过程:
- HTTP客户进程在端口号80发起一个到服务器www. someSchool. edu的TCP连接, 该端口号是HTTP的默认端口。在客户和服务器上分别有一个套接字与该连接相关联
- HTTP客户经它的套接字向该服务器发送一个HTTP请求报文。请求报文中包含了路径名
/someDepartment/home. index
- HTTP服务器进程经它的套接字接收该请求报文,从其存储器(RAM或磁盘)中 检索出对象
www. someSchool. edu/someDepartment/home. index
,在一个 HTTP 响应报文中封 装对象,并通过其套接字向客户发送响应报文 - HTTP服务器进程通知TCP断开该TCP连接。(但是直到TCP确认客户已经完整 地收到响应报文为止,它才会实际中断连接)
- HTTP客户接收响应报文,TCP连接关闭。该报文指岀封装的对象是一个html文 件,客户从响应报文中提取出该文件,检査该HTML文件,得到对10个JPEG图形的引用。
- 对每个引用的JPEG图形对象重复前4个步骤。
往返时间(Round-Trip Time, RTT):一个短分组从客户到服务器然后再返回客户所花费的时间。总的响应时间就是两个RTT加上服务器传输HTML文件的时间
缺点:
- 必须为每一个请求的对象建立和维护一个全新的连接,这给Web服务器带来了严重的负担
- 每一个对象经受两倍RTT的交付时延,即一个RTT用于创建TCP,另一个RTT用于请求和接收一个对象
2、持续连接(persistent connection) :所有的请求及其响应经相同的TCP连接发送
- 在采用HTTP 1.1持续连接的情况下,服务器在发送响应后保持该TCP连接打开
- HTTP/2 [RFC 7540]是在HTTP 1. 1基础上构建 的,它允许在相同连接中多个请求和回答交错,并增加了在该连接中优化HTTP报文请求 和回答的机制
(3)HTTP报文格式
HTTP 规范[RFC 1945; RFC 2616; RFC 7540] 包含了对HTTP 报文格式的定义
1、请求报文
一个例子如下:
2、相应报文
一个例子如下:
(4)cookie
cookie在[RFC 6265 ]中定义,它允许 站点对用户进行跟踪。有4个组件:
- 在HTTP响应报文中的一个cookie首部行
- 在HTTP请求报文中的一个cookie首部行
- 在用户端系统中保留有一个cookie文件,并由用户的浏览器进行管理
- 位于Web站点的一个后端数据库
(5)web缓存
Web缓存器(Web cache)也叫代理服务器(proxy server),它是能够代表初 始Web服务器来满足HTTP请求的网络实体。Web缓存器有自己的磁盘存储空间, 并在存储空间中保存最近请求过的对象的 副本。
若浏览器正在请求对象 http ://www. someschool. edu/ campus. gif
,将会发生如下情况:
- 浏览器创建一个到Web缓存器的TCP连接,并向Web缓存器中的对象发送一个HTTP请求
- Web缓存器进行检查,看看本地是否存储了该对象副本。如果有,Web缓存器就向客户浏览器用HTTP响应报文返回该对象
- 如果Web缓存器中没有该对象,它就打开一个与该对象的初始服务器(即 WWW. someschool. edu)的TCP连接。Web缓存器则在这个缓存器到服务器的TCP连接上发 送一个对该对象的HTTP请求。在收到该请求后,初始服务器向该Web缓存器发送具有该 对象的HTTP响应
- 当Web缓存器接收到该对象时,它在本地存储空间存储一份副本,并向客户的浏览 器用HTTP响应报文发送该副本(通过现有的客户浏览器和Web缓存器之间的TCP连接)
(6)条件GET方法
条件GET (conditional GET)方法:
- 请求报文使用GET 方法
- 请求报文中包含一个“ If-Modified-Since: ”首部行
3、电子邮件
(1)SMTP
RFC 5321给出了 SMTP的定义。基本流程:
- Alice调用她的邮件代理程序并提供Bob的邮件地址(例如bob® someschool. edu), 撰写报文,然后指示用户代理发送该报文
- Alice的用户代理把报文发给她的邮件服务器,在那里该报文被放在报文队列中
- 运行在Alice的邮件服务器上的SMTP客户端发现了报文队列中的这个报文,它就 创建一个到运行在Bob的邮件服务器上的SMTP服务器的TCP连接
- 在经过一些初始SMTP握手后,SMTP客户通过该TCP连接发送Alice的报文
- 在Bob的邮件服务器上,SMTP的服务器端接收该报文。Bob的邮件服务器然后将 该报文放入Bob的邮箱中
- 在Bob方便的时候,他调用用户代理阅读该报文
(2)邮件访问协议
1、POP3
POP3是一个极为简单的邮件访问协议,由RFC 1939进行定义
- 在第一个阶段即特许阶段,用户代理发送(以明文形式)用户名和口令以鉴别用户
- 在第二个阶段即事务处理阶段,用户代理取回报文;同时在这个阶段用户代理还能进行如下操作,对报文做删除标记,取消报文删除标记,以及获取邮件的统计信息
- 在第三个阶段即更新阶段,它出现在客户发出了 quit命令之后,目的是结束该POP3会话;这时,该邮件服务器删除那些被标记为删除的报文
2、IMAP
由RFC 3501定义的因特网邮件访问协议 (IMAP)器把每个报文与一个文件夹联系起来,提供了创建文件夹以及将邮件从一个文件夹移动到另一个文件夹的命,允许用户代理获取报文某些部分的命令
4、DNS
之前有详细整理过DNS
5、P2P
主要考虑扩展性,设C-S体系的分发时间是Dcs,有
简单分析会发现,分发时间随着对等方N的数量线性地增加
而P2P体系有
画图直观可见
6、套接字编程
使用UDP的C-S体系
使用TCP的C-S体系
一些相关代码可参见《Python黑帽子:黑客与渗透测试编程之道》读书笔记(一):网络基础
结语
应用层主要是HTTP、SMTP、DNS和套接字编程
以上是关于《计算机网络自顶向下方法》读书笔记:应用层的主要内容,如果未能解决你的问题,请参考以下文章