2021.11.22
网络应用层
网络应用的体系结构
客户机/服务(C/S)
服务器
长时间提供服务
永久性访问地址/域名,不改变地址(如百度等网站,客户需要经常访问,因此不能随意改变)
利用大量服务器实现
客户机
与服务器通信
间歇性接入网络
可能动态使用ip
不会与其他客户机直接通信
点对点结构(P2P/peer to peer)
- 互相之间连接
- 没有一个永久的服务器
- 节点可能改变IP地址
- 间歇性接入网络
常用于文件共享
混合结构(Hybrid)
常见的有讲文件传输用p2p实现
文件搜索用cs结构
网络应用进程通信
同一主机中的进程通信由操作系统来决定
不同主机间的进程的通信通过消息交换
客户机进程:发起通信的进程
服务器进程:等待通信的进程
套接字
一个抽象的概念
进程通过套接字使用其下的协议(如TCP)进行通信
类似于寄信
- 发送方将消息放至门外邮箱
- 依赖门外的传输设施将信件传到接收方所在的位置
- 接收方获取消息
传输设备向进程提供API
寻址
如何在不同主机中找到需要交换信息的进程,需要引入标识符
寻找主机:IP地址
然而一台主机上有不同的进程,IP地址只能定位到相应的主机,定位到需要的进程还需要使用端口号
主机上每一个进程都需要分配一个端口号,进程的标识符:IP地址+端口号
应用层协议
网络应用需要遵循应用层协议
公开协议都包含了RFC(Request for Comments)
协议的内容
消息的类型
- 请求消息
- 响应消息
Internet提供的服务
网络应用的需求
- 数据丢失/可靠性
网络应用对于可靠性的要求不一样
网络电话等可以运行丢失一定的数据
文件传输则要求百分之百的准确 - 延迟
- 带宽
需要达到一定的带宽才能实现:网络视频
可以使用任意带宽:email/文件传输
Internet能提供的服务
TCP服务
- 面向连接,需要在客户机/服务器之间建立连接
- 可靠的传输
- 流量控制:发送方发送数据的速度不会超过接收方处理的速度
- 拥塞控制:当网络负载过重时能够限制发送方发送的速度
- 不提供时间/延迟保障
- 不提供最小带宽保障
UDP服务
- 无连接
- 不可靠的数据传输
- 不提供可靠性保障/流量控制/拥塞控制/延迟保障/带宽保障
- UDP的优势在于数据传输速率快
WEB应用
World Wide Web包含
网页
网页互相链接
网页
一个网页包含了多个对象(HTML文件,图片,视频等)
基本的HTML文件包含了对其他对象引用的链接
对象的寻址
通过URL(Uniform Resource Locator):统一资源定位器
URL的格式:Scheme://host:port/path
协议://主机(域名或IP地址):端口号/路径
HTTP协议
HyperText Transfer Protocol:超文本传输协议
HTTP协议采用CS结构
客户–Browser:请求、接收、展示Web对象
服务器–Web Server:响应客户请求,发送对象
传输服务
HTTP协议在传输层使用的协议是TCP传输服务
- 服务器在80端口等待客户的请求
- 浏览器发送到服务器的TCP连接(创建Socket套接字)
- 服务器接受来自浏览器的TCP连接
- 浏览器(HTTP客户端)与Web服务器(HTTP服务端)交换HTTP消息
- 关闭连接
无状态(stateless)
服务器不维护任何有关客户端发送的请求信息
无状态的优势在于不需要维护状态,并且在服务器失效,会产生和原始状态不一致的情况
HTTP连接
非持久性连接
这种连接方式每次接收一个对象都需要重新创建TCP连接,需要的时间会很长
每一个对象都需要2*RTT+发送文件需要的时间
RTT:Round Trip Time,从客户端发送一个数据包(小,发送时间忽略)到服务器并返回需要的时间
响应时间:
- 发送、建立TCP连接:1个RTT
- 发送HTTP请求到接受HTTP响应
- 发送文件需要的时间
非持久性HTTP每个对象需要两个RTT,时间过长
操作系统需要为每个TCP开销资源
持久性HTTP
发送响应打开后,保持这个TCP连接
后续的HTTP消息可以通过这个连接进行发送
无流水的持久性连接
客户端只有收到前一个响应后才发送新的请求,省略了每次需要建立TCP连接的时间,只需要一个RTT
带有流水机制
客户端只要遇到一个引用对象就尽快发送请求
理想情况下所有引用只需要一个RTT
HTTP请求消息
GET:请求方法
Host:主机
User-agent:浏览器代理
Connection:连接是否保持,发送完成后可以关闭(close)
Accept-language:可接受语言
通用格式
Entity Body中携带数据,请求消息携带的数据包括用户名密码等
上传数据的方法
POST方法
网页中填写form表格,在消息体中上传客户端的输入
URL方法
使用GET方法,在URL中输入需要上传的信息
请求消息的常用方法
HTTP响应消息
HTTP/1.1 :HTTP版本;状态响应码:200 OK 请求成功
Date:服务器生成响应的时间
Last-Modified:上一次修改时间
常见的状态响应码:
200 OK
301 Moved Permanently
400 Bad Request
404 Not Found
505 HTTP Version Not Supported
2021.11.26
Cookie技术
HTTP协议是无状态的,但很多应用是需要服务器掌握客户端的状态,例如网上购物的购物车
Cookie技术是为了辨别用户身份,进行session追踪而储存在用户本地终端上的数据
Cookie的组件
HTTP响应消息的头部行包含Cookie
HTTP请求消息的头部行包含Cookie
保存在客户端主机上的cookie文件,由浏览器管理
服务器端后台数据库也保存有cookie文件
Cookie原理
当客户端首次访问服务器时,服务器为用户创建一个ID并将客户信息放到数据库中,在响应消息的头部行中加入ID值和cookie信息,浏览器收到后再自己的文件上保存上该网站的cookie值
在此之后再访问该服务器时可以针对该用户返回特定的信息
Cookie的作用
身份认证
购物车
推荐
Cookie含有一定的隐私问题
Web缓存/代理服务器技术
Web缓存可以在不访问服务器的前提下满足客户端的HTTP请求,通过直接访问代理服务器获取
优势
缩短客户请求的响应时间,直接通过访问代理服务器
减少机构/组织的流量
在大范围内实现有效的内容分发
实现
客户端设定浏览器通过缓存进行web访问
浏览器向代理服务器发送所有的HTTP请求,如果请求对象在缓存中,则代理服务器再向原始服务器发送HTTP请求,然后返回给客户端并在代理服务器上保存该对象
缓存既充当客户端,也充当服务端
条件性GET
缓存的一个问题在于服务器端可能更新自己的数据,而代理服务器中没有更新该数据,因此需要每次向服务器端发起确认
在缓存的HTTP请求中声明所持有的版本的日期,然后在服务器中检查是否是该日期的版本
如果服务器发现缓存中的版本是最新的,则响应消息中不包含对象,反之则需要新发送对象
Email应用
邮件服务器(Mail Server)
邮件服务器之间通过SMTP协议传递消息
邮件服务器会存储用户要发送的消息和发送给该用户的信息
由于用户不会一直接入网络中,而服务器会始终处于网络中,因此采用服务器可以不需要双方都在线
SMTP协议
使用TCP进行email消息可靠传输
采用端口:25
传输过程的三个阶段
- 握手
- 消息的传输
- 关闭
采用命令/响应模式
–命令:ASCII文本
–响应:状态代码和语句
SMTP示例
与HTTP对比
HTTP:拉式PULL(每个用户从服务器中拉取信息),每个对象封装在独立的响应消息中
SMTP:推式PUSH(用户将邮件推送到服务器中),多个对象在由多个部分构成的消息中发送
邮件报文的格式
邮件利用SMTP协议进行传输,在邮件报文中还包含了
–头部行:To, From, Subject
–消息体:消息本身,只能是ASCII字符
多媒体扩展
邮件内容通过上述方式传输,则只能包含ASCII字符,但邮件会有多媒体的需求,因此需要添加多媒体扩展
MIME
通过在邮件头部增加额外的行以声明MIME的内容,即包含多媒体,以及如何编码多媒体
邮件访问协议
邮件访问协议是用来从服务器端获取邮件的
POP
Post Office Protocol
- 认证过程
客户端命令:用户名,密码
服务器端响应:+OK,-ERR - 事务阶段
List:列出消息数量
Retr:用编号获取消息
Dele:删除消息
Quit:退出
下载模式
- 下载并删除模式
- 下载并保存模式
会对服务器造成压力
POP3是无状态的协议
IMAP
Internet Mail Access Protocol
- 所有消息都保存在服务器
- 允许用户创建文件夹组织消息
- 支持跨会话(不同客户端之间保留了创建使用的文件夹,即IMAP是有状态的协议)
HTTP
基于Web进行收发邮件
收件:服务端向收件人的浏览器发送邮件
发件:电子报文从发件人浏览器发送到服务器端
而邮件服务器之间通信仍然才用的是SMTP协议
2021.11.27
DNS
Domain Name System
Internet上的主机/路由器之间以IP地址进行交流,而人访问网络通常是使用域名进行访问,IP地址和域名之间的映射就要通过DNS来实现
域名解析系统DNS的定义
多层命名服务器构成的分布式数据库
是应用层协议,用来完成名字的解析,通常是由其他应用层的协议提供的,包括HTTP、SMTP等协议,将用户提供的主机名解析为IP地址
DNS解析过程
用户在浏览器上请求URL:www.someschool.edu/index.html
浏览器从URL中抽取出主机名www.someschool.edu,并将这台主机名传输给DNS应用的客户端
DNS客户向DNS服务器发送一个包含主机名的请求
DNS客户收到一份回答报文,包含该主机名的IP
浏览器接收到该IP地址,向位于该IP地址80端口的HTTP服务器发起一个TCP请求
DNS服务
域名向IP地址的翻译
主机别名,邮件服务器别名
负载均衡:较为繁忙的站点有不同的IP地址对应于同一个域名,DNS服务器可以每次循环选择这些IP地址来确保一定的负载均衡
DNS服务实现
集中式服务的缺点:
单点故障:如果该DNS服务器崩溃,整个因特网随之瘫痪
通信容量:无法同时处理上亿台主机的请求服务
远距离:远距离的查询可能导致很长的时延
维护:服务器中保存的数据过多,并且会需要对很多的IP地址进行更新,这样的开销过大
分布式、层次数据库
为了解决集中式存在的问题,采取分布式数据库
具体过程为:
当用户查询www.amazon.com时
- 客户端查询根服务器,得到com域名服务器
- 查询com域名服务器,得到amazon.com服务器的地址
- 查询amazon.com服务器,得到www.amazon.com的IP地址,并将地址返回
各层次结构
- 根DNS服务器
- 顶级域DNS服务器
对于每个顶级域(com,org,net,edu和gov)和国家的顶级域(uk,fr,ca等)都有TLD服务器 - 权威DNS服务器
提供组织内部服务器的解析服务
可以由组织提供维护或者由服务提供商进行维护
本地DNS服务器
本地服务器作为代理将这些请求转发到DNS服务器
每个ISP都有一台本地DNS服务器,所有用户查询时都通过这个本地服务器进行查询
DNS查询方式
- 迭代查询
本地DNS服务器向根服务器查询需要的域名,根服务器返回下一层的服务器IP地址,本地服务器再根据这个地址再向下查询 - 递归查询
本地服务器向根服务器查询,根服务器自己向下一层的服务器进行查询,直到查询到最终的地址,最后层层反馈到本地服务器当中
DNS缓存
当某个DNS服务器接受到一个DNS回答时,他会将映射缓存在本地存储器中,这样一来再次查询到该DNS服务器时,就可以直接给到需要的IP地址
DNS记录
DNS服务提供了资源记录Resource Record(RR)
资源记录包含了(Name,Value,Type,TTL),其中TTL表示了存活时间
Type拥有四种类型
- Type=A
此时Name是主机名,Value是对应的IP地址 - Type=NS
Name是个域,Value是个如何知道该域中主机IP地址的权威DNS服务器的主机名 - Type=CNAME
Value是别名为Name的主机的规范主机名 - Type=MX
Value是别名为Name的邮件服务器的规范主机名
DNS报文
DNS协议包含了查询(query)和回复(reply)两种,他们的消息格式相同
头部包含了
- Identification:16位查询编号,回复使用相同的编号
- flags:标识位
查询或回复,是否期望递归,递归是否可用,是否是权威服务器的回答
域名的注册
- 向域名管理机构提供权威服务器的名字和IP地址
- 域名管理机构向顶层com服务器插入两条记录
- 在自己的权威域名服务器中加入需要的网址www.xxx.com的A类记录
还需要加入MX记录以保存邮件服务器
P2P
服务器/客户机模式下,服务器发送N个文件需要串行地发送N个副本,总共需要的用时:max(NF/us, F/di)
前者表明了服务器的上传时间,后者表示下载时间
F表示一个文件的大小,us表示服务器发送速率,di表示第i个客户端的下载速度
而在P2P模式下,服务器只需要发送至少一个文件,最快的上传速率由服务器和多个用户机共同上传us+Σui
用时为:max(F/us, F/di, NF/(us+Σui))
BitTorrent
torrent(洪流):参与一个特定文件分发的所有对等方的集合
当一个对等方首次加入一个洪流时,它没有块,随后他积累了越来越多的块,当他下载时,也会为其他对等方上载多个块。
Tracker(追踪器):每个洪流具有的一个基础设施节点,当一个对等方加入洪流时,他向追踪器注册自己,并周期性地通知追踪器他仍在洪流中,追踪器也会向这个对等方发送需要的节点的洪流的一部分子集IP地址
传输的选择
- 获取哪个文件块(最稀缺优先技术rarest first)
在bt中,每个文件被分为多个文件块,每个用户去获取的块选择都是从最稀缺的资源当中获取,这样一来获得到的稀缺资源就会越来越多,从而也能够再向外界传输。 - 从哪个邻居获取数据
每个用户根据传输给自己文件的速率来决定选择,每次选择以最高速率传送的多个邻居,这样的邻居称为疏通(unchoked),每隔十秒该用户会重新选择传送给自己速率最快的邻居 - 发送到哪个邻居
在另一方面,每个用户每隔30秒会随机向一个新的用户发送文件,而接收方这边则同样需要回传数据,若两者都满足彼此的最高速率,那么会保持这个传输方式直到发现了新的交换伴侣。
这样的交换机制被称为“一报还一报”(tit-for-tat)
2021.11.28
P2P索引
在P2P传输中需要利用索引来表示信息到节点位置(IP地址+端口号)的映射
在文件共享(电驴)中,索引动态记录了哪些节点拥有哪些文件,节点可以通过访问索引来获得自己能够获取的文件
在即时消息(QQ)中,索引将用户名映射到具体的位置,用户开启应用时需要通知索引他的位置,节点也会检索索引以确定用户的IP地址
集中式索引
以中央目录服务器记录节点信息,每个节点都向中央服务器存储
这样做的缺点和众多集中式服务器有着一样的缺
- 单点失效问题
- 性能瓶颈
- 版权问题
洪泛式查询(Query Flooding)
每个节点对自己共享的文件进行索引,且仅对该文件进行索引,这样引入了一个问题:如何查询某个节点需要的文件
覆盖网络
节点之间利用TCP进行连接,连接的节点之间构成一条边,所有的这些活动节点和边构成一个覆盖网络
通过已有的TCP连接进行查询,节点转发查询消息,直到查询到为止,如果查询命中则利用反向路径返回
缺陷:给网络带来较大负担
层次式覆盖网络
介于两者之间,引入一个超级节点的概念,每个节点或被划分为超级节点,或被分配一个超级节点,超级节点之间采用TCP连接构成覆盖网络,小节点和超级节点之间采用集中式
P2P例子
Skype应用
用户之间通信本质上采用P2P模式,但索引采取层次式结构,负责维护用户名与IP之间的映射,另外还保有一个登录服务器