课程资源
- 课程网站:http://staff.ustc.edu.cn/~qzheng/teaching.html
- 课程视频:https://www.bilibili.com/video/BV1JV411t7ow/
- 课程教材:计算机网络(自顶向下方法 第7版),机械工业出版社,2016
第二章
应用层
1、协议原理:
网络应用程序体系结构
- 客户-服务器体系结构(c-s):
- 服务器:
- 一直运行
- 固定的IP地址和周知的端口号(约定)
- 扩展性:服务器场数据中心进行扩展扩展性差
- 客户端:
- 主动与服务器通信
- 与互联网有间歇性的连接)
- 可能是动态IP地址
- 不直接与其它客户端通信
- 可拓展性差 达到一定能限(阈值),性能暴跌 可靠性差
- P2P体系结构(对等体):
- (几乎)没有一直运行的服务器
- 任意端系统之间可以进行通信
- 每一个节点既是客户端又是服务器
- 自扩展性-新peer节点带来新的服务能力,当然也带来新的服务请求
- 参与的主机间歇性连接且可以改变地址
- 难以管理(缺点)
- 混合体
进程通信
- 客户和服务器进程
- 客户端进程:发起通信的进程
- 服务器进程:等待连接的进程
- 进程与计算机网络之间的接口
进程通过套接字socket(一种软件接口)向网络发送或接收报文- 进程类似于房子,则socket则是房子的门,报文要从这间房子到另一间去,首先从这间房子的门出去,通过基础设施传输到另一间房子的门前,穿过门到达另一间房子里。
- 层间接口必须要携带的信息
- 要传输的报文(对于本层来说:SDU) (SDU——未经本层封装的) (发的什么)
- 谁传的:对方的应用进程的标示:IP+TCP(UDP)端口 (谁发的)
- 传给谁:对方的应用进程的标示:对方的IP+TCP(UDP)端口号 (发给谁)
- 传输层实体(tcp或者udp实体)根据这些信息进行TCP报文段(UDP数据报)的封装
- 源端口号,目标端口号,数据等
- 将IP地址往下交IP实体,用于封装IP数据报:源IP,目标IP
- 进程寻址
进程为了接收报文,必须有一个标识,即: SAP(发送也需要标示):- 主机:唯一的32位IP地址,仅仅有IP地址不能够唯一标示一个进程,在一台端系统上有很多应用进程在运行
- 所采用的传输层协议:TCP or UDP
- 端口号(Port Numbers) 用来区分不同的应用进程
因特网提供的运输服务(两个运输层协议):
TCP socket(是一个整数(类似文件描述符)代表一个四元组(源IP,源port,目标IP,目标port))
- 面向连接的服务
- 可靠的数据传送服务
- 流量控制:发送方不会淹没接收方
- 拥塞控制:能抑制发送方
- 无法做到时间保证
UDP socket(二元组(源IP,源port))
- 无连接的服务
- 不可靠数据传送服务、
- 传输报文时要提供对方IP、port
- 接收报文时传输层要上传对方的IP,port
- 无法做到流量控制、拥塞控制、时间/带宽保证
2、Web与HTTP
HTTP(超文本传输协议)
- HTTP是无状态的,服务器不维护关于客户的任何信息
非持续连接与持续连接
- 非持续连接HTTP
响应时间: 一个RTT用来发起TCP连接 + 一个 RTT用来HTTP请求并 等待HTTP响应 + 文件传输时间
- 往返时间RTT(round-trip time):一个小的分组从客 户端到服务器,在回到客户 端的时间(传输时间忽略)
每个对象要2个 RTT
操作系统必须为每个TCP连接分 配资源
但浏览器通常打开并行TCP连接 ,以获取引用对象
- 持续连接HTTP
服务器在发送响应后,仍保持 TCP连接
在相同客户端和服务器之间的后 续请求和响应报文通过相同的连 接进行传送
客户端在遇到一个引用对象的时 候,就可以尽快发送该对象的请求
非流水方式的持久HTTP:
- 客户端只能在收到前一个响应后 才能发出新的请求
- 每个引用对象花费一个RTT
流水方式的持久HTTP:
- HTTP/1.1的默认模式
- 客户端遇到一个引用对象就立即 产生一个请求
- 所有引用(小)对象只花费一个RTT是可能的
HTTP报文
两种类型:请求、响应
格式
method类型
响应状态码
用户与服务器的交互:cookie
4个组成部分:
- 在HTTP响应报文中有 一个cookie的首部行
- 在HTTP请求报文含有 一个cookie的首部行
- 在用户端系统中保留有 一个cookie文件,由用户的浏览器管理
- 在Web站点有一个后端数据库
Web缓存
- 目标:不访问原始服务器,就满足客户的请求
- 为什么要使用Web缓存 ?
- 降低客户端的请求响应时间
- 可以大大减少一个机构内 部网络与Internent接入 链路上的流量
- 互联网大量采用了缓存: 可以使较弱的ICP也能够 有效提供内容
- 缓存既是客户端又是服务器
- 通常缓存是由ISP安装 (大学、公司、居民区ISP)
- 缓冲版本与服务器版本一致性问题
- 条件GET方法
- 条件GET方法
3、FTP
FTP:文件传输协议
FTP与HTTP对比
- FTP协议是有状态的
- FTP协议的控制命令和数据传输分别在两个TCP上进行
4、EMAIL
3个主要组成部分:
- 用户代理
- 邮件服务器
- 简单邮件传输协议:SMTP
SMTP
- 使用TCP在客户端和服务器之间传送报文,端口号为25
- 直接传输:从发送方服务器到接收方服务器
- 传输的3个阶段
- 握手
- 传输报文
- 关闭
- 命令/响应交互
- 命令:ASCII文本
- 响应:状态码和状态信息
- 报文必须为7位ASCII码 (规范传输内容)
SMTP与HTTP比较
POP3、IMAP
- SMTP: 传送到接收方的邮件服务器
- 邮件访问协议:从服务器访问邮件
- 邮局访问协议(Post Office Protocol)
- 用户身份确认 (代理<–>服务器) 并下载
- Internet邮件访问协议(Internet Mail Access Protocol)
- 更多特性 (更复杂)
- 在服务器上处理存储的报文
- HTTP
- 方便
- 邮局访问协议(Post Office Protocol)
5、DNS(Domain Name System):因特网的目录服务
DNS是:
- 一个由分层的DNS服务器实现的分布式数据库
- 一个使主机能够查询分布式数据库的应用层协议
DNS提供的服务
- 主要服务:“字符串”—IP地址的转换:分布式的数据库维护和响应名字查询
- 其他服务:主机别名、邮件服务器别名、负载分配
DNS工作机理
- 分布式、层次数据库
三种类型:
根DNS服务器:从本域往上,直到树根,中间使用“.”间隔不同的级别
顶级域(TLD)服务器:负责顶级域名(如com, org, net, edu和gov)和所有国家级的顶级域名(如cn, uk, fr, ca, jp )
权威DNS服务器:组织机构的DNS服务器, 提供组织机构服务器(如Web和mail)可访问的主机和IP之间的映射组织机构可以选择实现自己维护或由某个服务提供商来维护
- 区域的划分有区域管理者自己决定
- 将DNS名字空间划分为互不相交的区域,每个区域都是树的一部分
- 名字服务器:
- 每个区域都有一个名字服务器:维护着它所管辖区域的权威信息(authoritative record)
- 名字服务器允许被放置在区域之外,以保障可靠性
本地名字服务器(Local Name Server)
- 并不严格属于层次结构
- 当一个主机发起一个DNS查询时,查询被送到其本地DNS服务器
- 起着代理的作用,将查询转发到层次结构中
查询过程:
- DNS缓存
- 一旦名字服务器学到了一个映射,就将该映射缓存起来
- 根服务器通常都在本地服务器中缓存着
- 使得根服务器不用经常被访问
- 目的:提高效率
- 可能存在的问题:如果情况变化,缓存结果和权威资源记录不一致
- 解决方案:TTL(默认2天)
- DNS记录和报文
资源记录(resource records)
- 作用:维护 域名-IP地址(其它)的映射关系
- 位置:Name Server的分布式数据库中
- RR(资源记录)格式: (domain_name, ttl, type,class,Value)
- Domain_name: 域名
- Ttl: time to live : 生存时间(权威,缓冲记录)
- Class 类别 :对于Internet,值为IN
- Value 值:可以是数字,域名或ASCII串
- Type 类别:资源记录的类型:
DNS报文
- 查询和响应报文格式相同:
- 查询和响应报文格式相同:
6、P2P文件分发
纯P2P架构
- 特点:
- 没有(或极少)一直运行的服务器
- 任意端系统都可以直接通信
- 利用peer的服务能力
- Peer节点间歇上网,每次IP地址都有可能变化
- 例子:
- 文件分发 (BitTorrent)
- 流媒体(KanKan)
- VoIP (Skype)
- 问题
- 如何定位所需资源
- 如何处理对等方的加入/离开
- 可能的方案
集中
分散
- 半分散
7、CDN(Content Distribution Network内容分发网)
DASH(Dynamic Adaptive Streaming over HTTP经HTTP的动态适应性流)
- 全网部署缓存节点,存储服务内容,就近为用户提供服务,提高用户体验
- enter deep: 将CDN服务器深入到许多接入网
- 更接近用户,数量多,离用户近,管理困难,如Akamai, 1700个位置
- bring home: 部署在少数(10个左右)关键位置,如将服务器簇安装于POP附近(离若干第一层ISP POP较近)
- 采用租用线路将服务器簇连接起来,如Limelight
- enter deep: 将CDN服务器深入到许多接入网
- 服务器:
- 将视频文件分割成多个块
- 每个块独立存储,编码于不同码率(8-10种)
- 告示文件(manifest file): 提供不同块的URL
- 客户端:
- 先获取告示文件
- 周期性地测量服务器到客户端的带宽
- 查询告示文件,在一个时刻请求一个块,HTTP头部指定字节范围
- 如果带宽足够,选择最大码率的视频块
- 会话中的不同时刻,可以切换请求不同的编码块 (取决于当时的可用带宽)
- 向离自己近的服务器发送URL,或者向高可用带宽的服务器请求
8、套接字编程
- 套接字:应用进程与端到端传输协议(TCP或UDP)之间的门户
- 2种传输层服务的socket类型:
- TCP: 可靠的、字节流的服务
- UDP: 不可靠(数据UDP数据报)服务
TCP
- 服务器首先运行,等待连接建立;客户端主动和服务器建立连接:
- 1:服务器进程必须先处于运行状态
- 创建欢迎socket
- 和本地端口捆绑
- 在欢迎socket上阻塞式等待接收用户的连接
- 2:创建客户端本地套接字(隐式捆绑到本地port)
- 指定服务器进程的IP地址和端口号,与服务器进程连接
- 3 :当与客户端连接请求到来时
- 服务器接受来自用户端的请求,解除阻塞式等待,返回一个新的socket(与欢迎socket不一样),与客户端通信
- 允许服务器与多个客户端通信
- 使用源IP和源端口来区分不同的客户端
- 4:连接API调用有效时,客户端P与服务器建立了TCP连接
- 1:服务器进程必须先处于运行状态
UDP
- 在客户端和服务器之间没有连接
- 没有握手
- 发送端在每一个报文中明确地指定目标的IP地址和端口号
- 服务器必须从收到的分组中提取出发送端的IP地址和端口号
- 传送的数据可能乱序,也可能丢失
本文含有隐藏内容,请 开通VIP 后查看