互联网原理
SP. edition 信息社会传奇
- 信息网络 能源 交通 是现代社会的三大基础
- 数据$\Rightarrow$ 传输和存储的 可识别的数字符号
- 信息交互 (一对一 一对多 多对多)
- 有效性
- 安全性
- 计算机网络$\Rightarrow$ 将计算机或外部设备连接在一起,实现 信息交互和应用服务的设备 通信链路 通信规约和软件的集合
- 因特网 $\Rightarrow$ 特指由美国创建和管理的全球互联网
计算机网络发展(Web发展/快速发展期)
- Tim Berners-Lee 1989年提出了 Web, 1991年开通了第一个 WWW网站https://info.cern.ch/ 1993年制定了全球信息浏览的Web规范
- 1994年8月11日 netMarket公司 建立了第一个电子商务网站并完成了全球第一笔网络零售交易
- 1995年 杰夫·贝佐斯创建了 Amazon
- 1994年4月20日 中国科学技术网成功和Internet连接(64k/s)
- 1994年10月 Grand Juction公司推出第一套快速以太网
- 1995年3月 IEEE宣布了快速以太网标准 Fast Ethernet LAN进入100M时代
- 1997年6月 IEEE802.11标准出台 无线网络代替了有线网络实现高效 高速的联网方案 (WIFI)
- 1998~1999 高速以太网标准形成
- 1998年9月7日 Google成立 / qq出现
- 2001年 万兆以太网出现(有线)(用于组网核心 城域网)
- 2004年 Mark Zuckerberg 建立Facebook
- 2006年 Twitter出现
- 2007年6月29日 Steve Jobs的iPhone上市 移动互联网时代开启
- 2007年11月 Google发起的手机联盟推出Android 以Apache开源许可证的授权方式开放源代码
计算机网络提供的服务
三大核心$\Rightarrow$应用 交互 管理
- 网络应用服务
- 具体联网和信息交互(解决不同速率 距离 成本需要的组网技术) 1973年 Vinton Cerf/Robert Kahn指出不可能存在能满足所有需求的单一分组网络技术
- 大规模的组网和信息交互技术
- 网络辅助技术 解决网络运行时的问题
计算机网络应用
互联网网络应用(服务) 建立在TCP/IP协议之上的应用服务
连接 $\Rightarrow$ 联合
早期的Internet应用 Telnet(远程计算机访问) Email FTP(文件传送) Newsgroup(新闻组) BBS论坛
应用的发展过程
E-mail FTP $\Rightarrow$ 静态网页 $\Rightarrow$ 动态网页 $\Rightarrow$ 网上营销 $\Rightarrow$ 电子商务 $\Rightarrow$ 移动应用服务
宏观来看 信息交互 $\Rightarrow$ 综合业务应用 多媒体应用 $\Rightarrow$ 物联网 云计算应用
万维网 World Wide Web
万维网起源于欧洲粒子物理研究中心CERN
核心创新: 广泛关联 文档定位 文档快速传输 多格式文档阅读
网页(超文本) 表达的不再是线性的信息 而是非线性 联想式 信息关联的信息网。 Web表示这种由超文本连接起来的信息网
网址 $\Rightarrow$ 统一资源定位符 URL (Uniform Resource Locator)
http://www.baidu.com/view/25482.htm
$\Uparrow$ $\Uparrow$ $\Uparrow$
Protocol Name of Computer Index and File name
支持缺省输入(支持默认)
指定URL后 如何传输?
浏览器按URL链接服务器 请求服务 $\Rightarrow$ 网页服务器应答 返回 $\Rightarrow$ 浏览器完成解析之后显示网页
使用超文本传输协议HTTP 让网站和浏览器协商进行网页传输
浏览器
基本功能 $\Rightarrow$ 输入选取URL时 向Web服务器发送请求 接收文档 进行解析和显示
Chapter1 E-mail && WWW
E-MAIL 系统概述
⚠️ 邮件系统 在大型机上不同邮箱移动报文时 就已经出现了 (它的出现至少不晚于Internet)
而我们使用的 所谓 E-Mail 则是 特指通过计算机网络进行通信的 电子化信息传递系统
E-Mail 是 Internet上 使用最广泛的应用
E-Mail定义了SMTP 和 MIME
电子邮件需要实现以下的几个功能
- 创建电子邮件
- 发送和接收邮件
- 管理邮件 「管理:包括回复 转发 删除 存储 等等」
- 保证邮箱的私有性质 「虽然任何人都可以在邮箱里放入邮件 但只有邮箱的拥有者可以查看」
E-Mail的地址结构
一般认为 邮箱地址要保证唯一 需要 邮箱名+存放邮箱的主机域名
1357000274@qq.com $\Rightarrow$ 1357000274 为邮箱名 | qq.com 存放邮箱的主机域名
SMTP Simple Mail Transfer Protocol
- 1981年出现 **它只能传输字符 信息主体被限制为 ASCII码 **
- SMTP 规定相互通信的 C/S端两个 SMTP进程间如何进行信息交互
- ⚠️ SMTP没有定义 邮件采用何种格式 以及 如何存储邮件 发送和递交邮件
SMTP传送的过程
- 类似上图 用户按照格式填装邮件 输入发送命令后 电子邮件接口软件 首先将这个邮件放在 邮件暂存队列里
- 对邮件的控制权此时来到了 邮件传输程序这里。 它将判断这封邮件发往哪里。「可以发送给 本地的计算机」
- 如果要向互联网远程用户发送邮件 在确认连接互联网后 邮件传输软件作为客户 和 邮件服务器进行通信(它在远程计算机上), 传输软件会将 邮件的 一个副本发送到邮件服务器上
- 邮件现在来到了邮件缓存区 发送方SMTP软件会定时(几分钟或几时分钟)扫描缓冲区队列
- 如果SMTP软件检测到了待发邮件 它就会 作为客户和目的计算机SMTP服务器端口(25)建立TCP连接
- 服务器发出 220 Service ready 客户端发送 helo + 邮箱+主机名;
- 服务器如果可以接收 会应答 250 OK 否则返回代码 421 Service not available | 451 / 452 等异常命令
- SMTP定义了 14条命令(由4个字母组成) 和 21种应答(由3个数字开始)
- 开始传输邮件副本
- 由客户端在发送结束后 通过 QUIT 命令释放TCP连接
SMTP 是复杂的协商交互协议 通常会在后台工作(因为邮件系统从来就不是一个实时传输新系统)
SMTP可以用在两个用户之间 但主流情况下 使用 邮局和中转的概念「分发 转发 列表(按照列表分发) 多重接收(同一个计算机上的多个邮箱 只建立一个TCP连接)」
邮件中继: 当需要进行 大量的的邮件转发/分发时 一个独立且能力更强的计算机E-Mail Gateway / E-Mail Relay 出现了
组织地址:它帮助每个自己管理下的计算机完成邮件的收发「这个组织通常会运行一个组织网关来管理」
邮件网关实际隔离外部邮件地址与内部邮件地址(计算机与用户)
MIME Multipurpose Internet Mail Extension
邮件在这个协议里 被允许 分成几个部分 每个部分可以通过不同的格式来传送
- 头部 「发、收地址 日期 主题等条目 每个头部行开始是 行关键字和冒号 + 信息」
- 空行 用来分割 头部和信息文本
- 信息文本 包含了 多媒体二进制信息 可以实现任意编辑
存储传送方式(非端到端直接传送) | POP & IMAP
在目前邮箱通常被放在电子邮件系统服务器计算机上 接受者要自己去邮件服务器 读自己的邮件 而不是它主动发给你
常用的 远程读取的邮局协议POP(Post Office Protocol)(1996 POP3) | IMAP(Internet Mail Access Protocol)
用户计算机的电子邮件软件作为POP服务器的客户 来存取
POP相比SMTP的优越性 $\rightarrow$ POP不进行传输交互
pop主要完成 创建连接 用户认证 事务操作(列出 取回并删除等等) | 邮件将在被读取后的不久被POP删除
IMAP (2003 IMAP4) 和POP3一样采用C/S方式来工作 但比POP3复杂(用户能进行更多的操作 比如只看首部) 并且在不下令删除的情况下保留用户的邮件
目前 具有大邮箱数据库和SMTP/POP服务器+中继功能的计算机 相当于电子邮局
E-Mail传递的发展
- 两个主机间点对点的 SMTP邮件直接收发
- 邮件网关(中继) 和组织邮件地址 出现中间管理服务
- 电子邮局出现 形成现今的电子邮件系统框架
- SMTP完成发送 POP/IMAP完成电子邮局登陆 读取和管理邮件
MIME协议和实现
现在使用的 是多用途Internet邮件扩充MIME协议
MIME完成的是传输 ASCII码之外的 二进制信息(声音 图像 影视信号也可以发送了)
MIME的设计思路是不推翻SMTP架构而对其微调
做法是:
将所有不同类型的二进制数据分段编码为7位ASCII码 然后用SMTP作为一般的文本来发送 然后在接收端转换回去
在使用MIME时发送方会在邮件头部增加附加行 这一行将会指明这个报文遵循的MIME格式 数据类型和编码算法
比如 MIME-Version:1.0
MIME还允许发送方将报文分成多个部分(它们可以使用不一样的编码方法) 实际上就是 粘贴多个附件
MIME具有 兼容性「SMTP不需要解析MIME的编码 所以和早期的SMTP兼容」 和 灵活性「不规定编码方法和名称 」
1、为什么说电子邮件的使用超过了因特网的范围
电子邮件用户计算机完全可以不是Internet用户(没有因特网域名或IP地址) 而可以是在某个Internet计算机上注册了邮箱的普通计算机。 甚至还可以只和本地的传输邮件。
2、当你发送电子邮件给不同电子邮局用户时,需要经过哪些必要的环节?请画图 示意。
3、早期电子邮件直接在收发计算机之间传输完成,试说明这种模式的优缺点。
优点:效率高 是即时的传输 实现简单
缺点:
接收的计算机需要开着(并且要么连接互联网,要么和发送计算机直接相连), 这意味着接收方需要事先知道要接收邮件,也就丧失了邮件系统的非实时性。
常用的个人计算机无法配置邮件服务器,这使得利用邮件服务器完成的功能(如 分发 转发 列表) 收发计算机都无法完成,使得邮件系统可用性大幅下降
4、通过目前电子邮件系统发往某邮件,常常发现传输时间是不确定的,有时快而 有时慢,为什么?
因为用户邮件在发端是定时扫描、建立连接和批处理传输的;且发送到目的邮局服务器的邮箱后,需要用户登陆后取回;即E-mail系统工作过程不是一个实际收发的端到端连接通信,而是中间邮局的非实时处理,所以邮件传递快慢取决于个环节等待时间。
5、一个组织的电子邮件系统网关,通常具有什么功能
- 分发和管理组织内的电子邮件地址和电子邮箱
- 实现组织内部和组织内外之间进行大批量邮件分发或转发功能
- 对邮件进行一定的过滤和筛选(去除垃圾和病毒邮件)
6、SMTP的主要作用
电子邮件客户软件定时扫描邮件暂存队列,有待发邮件时,SMTP客户和目的地计算机SMTP服务器建立TCP连接。然后SMTP协议进行通过ASCII码命令和应答逐步协商,最后客户发出邮件副本,服务器接收副本。
7、POP的主要作用 见POP介绍
8、SMTP可以传递非ASCII码信息吗 当然可以了。。MIME
WWW 概述
World Wide Web 是Internet上最受欢迎 应用 其思路来自CERN(欧洲粒子物理研究中心)
Tim Berners-Lee 在1990年开发了第一个基于超文本的分布式信息系统 1991年Gopher在Internet上运行
第一个图形界面的浏览器产生于1993年「Mosaic」
www的设计基于超文本 HTML HTTP和浏览器
超文本 = 一般文本 + 到其他文档的链接 「其数据结构是指针链接的 网状结构(⚠️和树状区分)」
超媒体 $\Rightarrow$ 超文本 + 图像、声音、视频的链接 (即把超文本扩展为更多的媒体) 「它们被总称为 Web文档」
- 所谓的 Web文档IE(也被称为HTML文档) $\Rightarrow$ 网页
超文本和超媒体 决定了WWW是 非线性、联想式的文档集合 和一个布满链接的信息网
所谓的 Web 指的是由超文本 连接而成的信息集合 而WWW则是指 在世界范围内分布的Web服务器的集合
- WWW => 建立在超文本和超媒体基础上的 全球分布的 在线式的信息网 (这一概念有时会和Web混用)
- Web服务器同时也集成了E-Mail FTP TELNET等服务
HTML Hypertext MakeUp Language 超文本标记语言 用来创建和识别标准的 Web文档
标记语言 $\Rightarrow$ 在文本中嵌入一系列 控制符号 使得文件按照作者的想法 显示或者打印
HTML和普通的标记语言区别$\Rightarrow$在它们的基础上 扩展了 超文本引用(通过点击实现自动跳转)
「Web文档的格式 一般情况下 就是 HTML格式 当然也支持HTML以外的格式」
- 超文本引用的原理:文本中被预先设置指向另一个文档的被动指针(被动是指 需要用户主动选择)
- 任何内容都可以作为超文本引用可选项(声音 图像也是可以的) 而这种机制 被称为 anchor 锚
当然 除了利用超文本引用来实现定位之外 URL的应用也十分广泛
通过 URL Uniform(精确) Resource Locater 实现网页的定位 「见sp edition 互联网传奇」
找到存放Web的计算机 $\Rightarrow$ 找到是这个计算机中存放的哪个网页 $\Rightarrow$ 确认访问此网页需要的协议 $\Rightarrow$ 对接网页显示的格式
URL的一般格式:
$$
协议://计算机域名:端口号(optional)/路径/Web文档名称
$$
「端口号 http/Web => 80 ; FTP => 21 在采用默认端口号时 可以省略」
值得注意的是 虽然URL输入时 可以大小写, 但实际上URL不区分大小写
使用URL定位时 因为必须指明特定的主机 如果访问量太大 会炸。 这时只能 就近访问和负载均衡。 而正在发展的URI(Universal Resource Indentifier) 尝试将资源名称和主机位置分离开
网页传输 和 HTTP 协议
我们先把浏览器和客户等同起来, 这时浏览器和Web服务器的交流就属于典型的C/S模式(但连接时间短 不记忆状态)
- 浏览器作为客户 根据URL指定的域名 向DNS服务器请求解析 $\Rightarrow$ 得到目的IP地址
- 浏览器作为客户 和目的IP对应的计算机(和这个计算机上的 Web服务器) 建立TCP连接
- 浏览器作为客户 向Web服务器发送请求获取Web文档命令 (GET)
- Web服务器响应请求 然后返回网页(Web文档)
- 浏览器接收完成并释放TCP连接, 在这之后显示网页
我们也把HTTP的这种连接方式称为 「无状态连接」它可以实现快速的传输和调用 缺点在于如果访问同一个计算机上的多个网页,需要多次连接 产生额外的开销
HTTP的请求和响应格式
这是一条HTTP请求命令
以下是HTTP的某些响应命令
HTTP具有以下的特点
分布式Web(普通)与非分布式Web(公司内) | Web代理服务
普通的Web文档被存放在不同的计算机上 由不同人员独立管理 由于管理人员之间信息不一定互通 所以可能会出现无效网页 错误定位等意外情况。
而非分布式的 Web系统会将每个Web文档集中存放在某个计算机上,其Web文档的超链接也是本地的 并且由专门的人员统一管理, 相比分布式Web 更能保证链接的有效性和一致性
Web代理服务 「大量的Web访问可能占满Internet的带宽 所以做一个cache」
Web Proxy/Cache Server 会用一个高速缓存存储被大量访问的Web文档
如果你连接了校园网 一般在访问WWW时 先被校园网出口的路由器重定向到Web Cache 如果里面没有再进行访问(同时把结果存在Proxy中)
浏览器 Browser Web系统最重要部分 是用户进入Internet的主要入口「本质上是Web系统的客户端」
浏览器实现的功能 「为了满足多功能客户端桌面的需求 」
- 网页浏览
- 作为HTTP客户 通过TCP/IP网络 完成用户对选择URL的请求和文档接受
- 解析Web文档(HTML文档) 这个功能也包括控制外设来显示这个Web文档
- 提供额外的服务 支持多格式文档(比如flash服务) 从实际设计角度上看 Browser甚至比Web服务器更加的复杂
- 这一项同时也意味着 浏览器可以包含支持其他服务的客户端软件(FTP/E-Mail等)
- 所以 Browser/Web Server 「B/S」已经逐渐发展为互联网应用的统一形式
Web体系结构 | Browser/Web Server模式 B/S模式|Web技术的发展
浏览器通过URL 在TCP基础上 HTTP协议规定B/S之间遵循的规则和需要进行的操作
这也体现出WWW的核心: 超文本|HTML/URL结构|HTTP|浏览器
B/S体系结构 是作为C/S的后继发展类型
Browser在90年代中期开始逐渐成为主流 其客户端采用标准化浏览器(Java虚拟机 多媒体解析显示+简单逻辑操作)
Web服务器要做的事 解决应用开发 逻辑计算 网页封装和管理 使网络应用系统的升级 扩展和维护更加方便
在现在的B/S服务器端 Web服务器演变为新的 MVC结构「WebSever+应用服务器+数据库服务器」
M $\Rightarrow$ 业务逻辑 V $\Rightarrow$ 展示 C $\Rightarrow$ 控制 这种结构是目前电子商务、政务广泛流行的架构
Web技术的发展
1. HTML $\Rightarrow$ XML 表示数据时 HTML的个性化不够 所以需要建立一种具有理解数据格式和结构的规则和方法
2. Web2.0和语义Web
什么是超媒体、HTML 与Web?
超媒体:在超文本中加入了图像、声音和视频的链接。可调出指针指向多媒体的信息
HTML:超文本标记语言,在普通标记语言的基础上扩展了超文本引用
Web:由超文本(超媒体)连接而成的信息集合
为什么有时链接打开一个网页会发现无效?
WWW是基于互联网的分布式的超媒体(超文本), 每个Web文档存放在不同的计算机上,并由不同的人员独立管理,其修改、删除、增加或者重命名等不会(实际上是无法) 通知相连的其他节点。因此会出现链接无效 或者链接不一致的情况。
如何区分分布式Web和非分布式Web系统,试说明两者的可能的应用场合。
相比分布式Web系统,非分布式Web系统将所有的Web文档集中存放在某一个计算机上,通常通常其Web文档的超链也是本地的,并由专门人员统一管理,能够很好的保持链接的一致性和有效性。
分布式的Web将Web服务器散布在Internet的各处,所有Internet上的Web服务器构成了万维网,是Internet上最受欢迎的应用,
非分布式的Web系统可以应用在公司或组织的内部资料库中,由专门的人员管理,也只有公司本地网段的计算机可以访问。
试说明C/S结构和B/S结构的异同。
B/S结构是由C/S结构演变而来的,采用了客户层|中间层|服务器 的三层结构,是基于WWW产生的。
不同之处:
B/S的设计目的是为了满足接入Internet的普通用户需求,而C/S则更多的由专业用户使用,同时有一定的门槛
B/S建立在WWW(Internet)上,而C/S则常常被部署在局域网上
B/S的兼容性强 部署容易,而C/S的部署比较复杂
B/S系统的开发和维护开销都比较小,而C/S相对来说更大一些
B/S建立在广域网上,相比C/S结构对于安全性的要求更低
B/S架构是互联网应用基本形式,什么类应用不适合B/S架构?
B/S的架构开发和维护都相对简单 但由于是基于WWW而设计,只需要和本地服务器交互,不需要连接互联网的应用,不适合用B/S架构。
另外,由于其无状态连接的特点,需要点对点高强度交互的应用,不适合使用B/S架构。
虽然浏览器的功能非常强大,但如果用户需要某些特定的功能(比如游玩大型的网络游戏),就需要专门的客户端软件,而不适合B/S架构。
Chapter2 DNS
域名服务系统 DNS[Domain Name System]
DNS系统概述
我们显然可以通过输入 IP地址来访问网站。 使用DNS只是为了 让字符化的计算机域名 能够起到 特征标示的作用。
DNS 的作用是 将 用户使用的域名 和 计算机使用的IP地址 互相转换(translation)
备注:
1. DNS 同时也表示 Domain Name Server
2. DNS所实现的转换是 双向的
3. 域名的翻译是自动完成的 依赖分布在全球的一系列服务器完成, DNS实现的翻译 属于C/S交互
Internet 域名构造
因特网将这些域名划分成 树状体系 最高级的域名一般是通用域名/国家/基础结构域类。 在这些最高级域名下划分子类 逐渐延伸
我们的高级域名.cn
之下 定义了7个2级域名 ac(研究机构) com edu gov mil net org 以及34个行政区域名
如果你想要使用最高级域名, 必须向Internet管理机构ICANN(或其授权管理机构 比如中国的CCNIC)登记,层层递进
DNS层次结构和服务器分布模型
- 每个DNS服务器 都是域名体系中部分域名的实际管理者,要负责具有某后缀的所有计算机权威管理
- 每个计算机域名也必须在对应的DNS组织(服务器)登记
- DNS具有命名 和 服务器设置的 自治性
- 每个DNS服务器 只能完成部分计算机域名的处理,因此因特网所有的DNS服务器宏观上被连接成了一个系统。
- 这意味着:每个DNS服务器都知道如何找到根DNS服务器,以及如何找到下级的DNS服务器
- 对大型组织集中单一DNS服务很困难。但由于DNS服务具有 局部访问性原理 我们可以按照层次制定分布DNS服务策略
DNS记录和协议报文格式
DNS的拓扑
一般组织使用单一DNS服务器,小型公司作为用户,和提供DNS的ISP连接,DNS服务也由和其连接的ISP完成
试解释中文域名可能的工作原理
我认为现在的DNS系统已经比较成熟,所以中文域名的工作可以从从用户角度入手,即将用户输入的中文域名,翻译成英文域名,然后接入现有的DNS体系框架内。
在用户使用的浏览器中添加扩展,使得浏览器能够实现汉字输入转换,并考虑使用缺省和机器学习来优化
如输入 百度 则浏览器转化为 https://www.baidu.com 实际上仍然使用现有的DNS服务
试说明DNS服务器怎样获取请求客户主机域名的?
- 客户机想要查询时首先在本地计算机缓存中查找,如果无法获得查询信息,则向本地DNS服务器发送查询请求
- 本地DNS服务器收到请求,首先在其管理区域记录里查询,如果找到了,则直接解析并返回,没找到则执行3
- 本地DNS服务器将客户的请求发送到根域名DNS服务器。根域名服务器解析请求的根域部分,并以此获知管理下一级域名的DNS服务器地址,并将这个地址返回给本地DNS服务器。
- 本地DNS服务器利用上一级域名服务器给出的地址访问下一级DNS服务器,得到更下一级的DNS服务器地址,同样,这个地址被返回给本地DNS服务器。
- 返回递归执行步骤4 直到本地DNS服务器获取到知道域名对应IP的DNS服务器传回的IP地址
- 本地DNS服务器将查询结果返回客户 完成解析过程
两个DNS服务器包含完全相同的域名有意义吗?为什么?
是有意义的。因为DNS的解析是递归的过程,如果有两个不同的DNS服务器都包含这个域名,说不定可以减少递归的次数,提高DNS服务的效率。
试分析DNS体系的层次数对域名解析速度是否有影响?
有影响。如果你要访问的域名离自己的本地DNS服务器太远,你的访问请求将被迫一级一级的不断上传,同时一级一级的向下返回,虽然传输的时延不长,但处理和排队的时延累加起来就很长了。比如我们访问国外的网站,即使没有被屏蔽也会很慢。
DNS系统为什么要优化,优化措施主要有哪些?
无论是递归还是迭代的请求方式,本质上其实效率都很糟糕,特别是根服务器的负载非常大,并且根服务器作为枢纽一旦下线,非本地访问的DNS服务几乎就中断了。
但由于一台计算机经常访问本地域名或重复访问同样的域名,所以可以进行以下的优化处理:
- 复制。复制多个根服务器副本,按照地域分布,实现就地DNS域名服务
- 缓存。每次查找新域名 本地DNS服务器将地址联编副本进行缓存 实际上客户的浏览器也有类似的 域名缓存措施
Chapter3 FTP [File Transfer Protocol]
FTP 概述
FTP的产生 $\rightarrow$ 早期Internet(ARPANET) 的工作主要是 信息交互 (特别是文件交互共享)
从历史上讲 FTP的产生要早于TCP (现在则是使用新的FTP协议 ) 在95年之前 FTP占据因特网通信量的 1/3
FTP需要解决 在异构计算机之间的 通用文件传递 这需要克服不同文件系统的差异:
- 通用性
- 跨平台特性
- 传输和控制 $\rightarrow$ 控制 上传 下载
- FTP可以支持 任意类型的数据文件
- FTP可以加密 可以控制访问
FTP主要提供2种交互方式 即 实时交互 和 批处理
值得注意的是 可以建立一种 同时实现两种方式的 服务
FTP只有 文本 和 binary 两种格式「FTP传输的是 文件的副本 而不是文件本身」
视频 浮点数 图形… 只要不是文本 全部都使用binary 传输
当然 二进制会出现在FTP两边格式不一样的情况 这FTP不管
FTP工作原理 「两条连接 控制和数据传输分离」
两端的进程会分别启动 控制和数据传送进程(它们是主进程的从属进程 并且相互独立)
- 客户通过临时端口号N 和 FTP服务器(端口号 21 这是个熟知端口) 建立TCP链接
- 这条连接 只是用来控制 由客户发起 服务器接受。 客户端输入的命令从这里发到服务器中
- 服务器并不会马上 建立传输连接,而是在客户发起命令 确认一个文件之后
- 服务器通过 端口号20 与客户端口号N+1 建立TCP连接
- *这条连接 只是用来传输 由服务器发起 也会由服务器结束。*
FTP交互方式的特点
- 两个不同的端口号分别建立控制连接和数据连接 目的是让命令交互 和 文件数据交互 之间不互相干扰
- 服务器在完成文件传递后 关闭数据连接 给客户端一个 文件结束条件
- FTP命令可以控制远程计算机上的文件操作 就好像在操作本地文件一样
FTP登陆 和 常用命令
- 输入 Open计算机域名 和这个计算机建立TCP连接。 使用Close 来关闭连接(并不是关闭FTP程序!)
- 对于私有的FTP服务 需要输入用户名+口令; 而有些开放的FTP服务 使用anonymous(guest) / 电邮账户 即可实现访问了
FTP 一般使用命令行进行交互 客户端有约50条命令
通用标准化处理(解决跨平台(OS)传输)
我们想要做到OS对FTP的C/S透明。因此定义了 Telnet NVT(Network Vietual Terminal)网络虚拟终端
这样 FTP和OS就不进行直接的交互了 而是通过NVT标准格式接口 在传输过程中 实际上就是
本地终端格式 $\rightarrow$转换为 NVT格式 $\rightarrow$ 传输 $\rightarrow$ NVT转换为本地主机格式 $\rightarrow$ 本地主机格式
NVT格式 统一使用8bit通信 7位ASCII码 最高位 为1 $\rightarrow$ 控制命令
NFS(Network File System)
一般被集成在一个大的文件系统里
和FTP类似 但不传输文件副本 一般只传递 复制/改变 文件的小片段
使用TCP和UDP 实现不同操作系统的各种终端和主机间远程登录和文件命令操作
1、怎样理解NVT?
2、FTP目前主要使用在什么场合,为什么不十分流行?
FTP目前一般在公司或单位的内部进行公开的文件传输时使用。
不流行的原因:
\1. 使用命令行进行交互 没有图形界面 这意味着使用FTP的门槛要更高。\2. 安全性不够高,FTP的信息在信道上可能被劫持 这样信息就全部泄漏了。
\3. FTP诞生时间太早,不适合现在的网络架构。使用两条TCP连接比较浪费,虽然是稳定的传输,但效率不够高,会浪费一些网络资源。
3、在一条传输链路连接的网络两端,用FTP传输一个大文件,然后根据文件字节数和传输的时间测量链路的数据传输容量,是否准确?试说明理由。
不准确。因为FTP的底层是TCP传输(TCP传输又需要进行IP层的封装),这意味着大文件 会被封装成TCP报文段。大文件长度很可能大大超过了MTU,这意味着需要很多个TCP报文段来传输这个文件。如果只算文件字节数而忽略TCP报文头和IP报文头,算出的数据传输容量会有较大的偏差(会偏小)。
4、二进制模式和文本模式下传输同一个文本文件,试说明两种模式传输时间哪个大?为什么?
文本模式下 会花费更长时间。 FTP的文本使用ASCII/EBCDIC 字符集,在FTP发送和接收前需要经过转换(本地文本文件$\rightarrow$ ASCII/EBCDIC $\rightarrow$ 本地文本文件),并且还需要加入控制字符。而二进制是不进行任何表达转换处理,直接传输文件副本。
Chapter4 NAT&DHCP
NAT
对于TCP/IP的每一层, 有些是协议 有些是技术。
宏观来看,IPv4的地址空间不够用,导致了大量的问题
IPv6 (128bits)
NAT / Network Address Translation
VLSM 可变长 subnet mask
CIDR 无类域间路由
NAT 简介
Network Address Translation 发明于1994年
其思路是 内网域内使用私有的IP地址空间 10网段 172.16网段 192.168网段
10.0.0.0—10.255.255.255 A
172.16.0.0—172.31.255.255 B
192.168.0.0—192.168.255.255 C
私有IP只在局域网里使用 互联网上不会出现这些ip
NAT的普及程度 $\rightarrow$ 70%的P2P用户位于NAT网关以内 由于P2P主要运行在PC上,这意味着大部分的PC都是通过NAT网关连接到Internet
- NAT技术没有公认的发明者
NAT工作模型
NAT 通常被部署在一个局域网的网络出口位置 通过**将内部网络IP地址 替换成出口的IP地址提供公网可达性和上层协议连接能力**
目的$\rightarrow$提供一种虚拟的寻址机制
正常情况下 使用私有IP地址不需要向IANA提出申请 但是这些地址 不能作为源地址和目的地址
使用方法
- 在组织的出口部署 NAT gateway 其功能是:
- 报文离开局域网进入Internet时 将源地址替换成公网地址(一般是出口设备的interface地址)
- 对访问目标来说,访问源地址自然就是NAT gateway,target会回复给NAT gateway
- 收到回复后 NAT gateway再把目的地址替换成私有IP地址
- 显然 对通信的双方来说 NAT gateway是透明的 数量庞大的内网主机 也不需要公有的IP地址了
注意⚠️
外网 一般无法通过IP地址访问内网主机 想要访问有两种方法
一个全局地址 可以让不同PC同时访问不同服务器吗?$\rightarrow$ 可以 离开站点前的私有IP地址映射不一样
一个全局地址 可以让不同PC同时访问相同服务器吗?$\rightarrow$ 不可以 因为在NAT Gateway收到服务器传回的报文时 不知道是哪个PC发送的(这个报文的源地址是服务器 目的地址是NAT Gateway的IP地址)
为实现双方的持续交流,NAT gateway需要维护一张关联表 $\rightarrow$ 地址转换表(translation table) 存储重写地址时所需的信息来实现地址转换 具体实现方法:
- 当数据报离开站点 NAT将目的地址和发送方的私有地址记录在一起。
- 当数据报到达站点 NAT查询translation table 来确认哪台站内计算机接收这个相应。
全局地址数量M一般远小于主机数 一个一般对应4000个内部地址
- 内网轮流使用NAT地址池里的全局地址 当NAT地址池的全局地址被用完时 主机对外部的因特网访问将必须等待
NAT gateway对交流双方是透明的
NAPT 网络地址与端口转换
与NAT的区别在于 NAT是一对一转换 而NAPT则在转换时把端口号也作为参数 实现多对一转换
用于以下的两种情况 解决了 收到应答不知道给谁的问题。
内网里两台不同主机 要同一时间 访问同一个服务器
内网里 一台主机的 多个不同进程 要同时访问同一个服务器
生成一个本地的端口号(临时生成 只用来区分不同主机或进程)
NAPT的负载均衡器功能
外到内网服务器的访问 表的静态记录项 通过服务端口区分不同服务器的访问
接受外部主机的请求时 NAT根据已有的NAPT表 把全局地址翻译成不同内部地址 建立与多部主机的连接。根据NAPT表 转发数据包到多个内部服务器 实现服务器负载均衡(访问的是单个服务器 多个一起处理) 或不同服务器的访问
外部通过NAT的访问内网 NART表项动态建立
如果是一般主机非固定的服务器,由于NAPT表中一般主机和NAT公有地址只是内到外访问时临时建立的,即NAPT表无法自动构建转换映射表,所以外部访问一般无法根据IP地址访问内网主机。一种方法通过域名访问,即建立内网域名DNS(二级域名)和NAT联用机制,由DNS触发建立NAT表的一个记录项。这时NAPT动态建立对应表项,IP地址利用率更高
NAT的优缺点
优点
节约Internet地址
解决相同IP地址的负载扩展(均衡)
消除重新编址 (现有方案能继续使用)
缺点
延迟增加
降低地址的 Traceability
某些应用功能交互更加复杂或失效(FTP TCP要解决NAT穿越问题 而要求特定的源端口和源地址的应用无法工作)
因特网系统初始化设置 BOOTP & DHCP
- TCP/IP 协议参数和配置 需要参数:
- 硬件地址
- 使用协议类型
- IP地址
- 默认IP路由器地址(下一跳地址)
- 地址掩码(地址类型)
- DNS服务器地址
协议配置 : 协议软件被 协议通用性原则 约束。 需要协议软件参数化,所以要在编译之前对参数赋值
如何配置协议? 在不知道IP地址情况下交流的核心思路$\rightarrow$使用广播
人工配置 手动录入(仍然是常用的方法)
存储文件配置 打开配置文件进行配置(因为系统只在启动时读取配置文件 所以修改参数配置需要重启)
自动协议配置 只要出现大量设备或者频繁修改 前两种几乎都行不通
自动协议配置方法
要克服单机分散配置问题 在服务器端进行集中配置 然后通过请求/应答形式 当计算机启动入网前发出请求 网络服务器返回适当配置响应
- 配置协议前 使用RARP 用MAC多播(主要使用RARP的是无盘工作站 存储不了自己的IP地址 MAC地址在网卡上)
- 此时不知道默认网关 使用ICMP 掩码请求/网关发现 用IP广播方式获取路由器参数(获取地址掩码/默认网关地址)
- 地址屏蔽码(掩码)请求/应答Address Mask Request/ Reply:主机启动时,会广播一个地址屏蔽码请求报文。服务器或路由器收到地址屏蔽码请求报文后,回送一个包含本网使用的32位地址屏蔽码的应答报文。
总的来说 协议从底层到高层进行配置 通过底层广播协议/单播的方式逐步获得高层参数信息。
自举的过程如下
MAC 广播RARP request 获取IP地址
等待RARP reply 如果T1时间内无响应 返回1
广播ICMP地址掩码请求 获取IP地址掩码
等待回复 如果T2时间无响应 返回3
利用ICMP网关发现 找到默然路由器的IP地址 并将其加入路由表中
可以注意到 需要至少3次分散的协议过程 会出现分散 延时 报文不同
自举协议BOOTP(Bootstrap Protocol)
Bootstrap $\rightarrow$ pull or drag oneself by one’s own
功能:一次广播一个BOOTP协议请求包 BOOTP服务器查找各项信息返回
注意: BOOTP协议由于尚未配置参数 所以进行了特殊的地址定义 IP广播地址全1 作为目的地址 全0作为源地址
BOOTP服务器可使用MAC地址进行单播(此时工作站还不知道自己的IP地址 所以IP单播无效) 或者全1广播地址回送 自举协议使用UDP发送(68/67 端口)
自举协议的报文格式
BOOTP的局限性
在工作前 需要对BOOTP服务器上配置相关主机参数数据库 且是固定设置值。只能满足小区域固定IP配置和PC的静态接入网络需求。在大区域或不固定IP配置的情况下 很难实现。
DHCP/Dynamic Host Configuration Protocol
1997年 IETF设计了动态主机配置协议 这个协议是在BOOTP基础上的扩展改进
DHCP的最大特点就是 可以自动获取IP地址分配(不固定)机制,也就是即插即用的联网
仍然使用IP广播地址全1作为目的地址 全0作为源地址
DHCP服务器也可使用MAC地址进行单播 或者全1广播地址回送 (和BOOTP是一样的端口)
不同的是 如果有数据库中该主机的指定信息(这和BOOTP一致)就取出返回 如果没有(新增)从IP地址缓冲池动态选择一个IP地址分配给主机
IP租借:由于DHCP是一个IP地址按需分配的 不固定机制 DHCP需要地址租期的概念。产生的地址在过了有效期(1s-136years)后就会被回收。
- DHCP通过IP地址缓冲池和租借IP按需分配的形式 形成对移动计算机入网的动态配置信息,不需要管理员对配置数据库进行任何修改。
DHCP优化
使用DHCP的主机首先随机广播发送 DHCP发现报文(短报) 减少冲撞的概率,在确认DHCP服务器后再发送请求报文。DHCP服务器地址通常会被永久保存,以后会单播(类似我们的记住已经连接过的WIFI密码)
DHCP中继
不是每个网络都需要DHCP服务器 设置一个DHCP中继 可以代理转发DHCP服务器的请求和响应(一般的路由器都有此功能)
DHCP使用和DHCP报文
属性配置选择 $\rightarrow$ 固定IP地址/ 自动获取IP地址(选择这个就是使用DHCP)
DHCP报文和BOOTP差不多 添加了一个 FLAGS选项 让用户说明希望服务器使用广播应答还是直接应答
由于DHCP和DNS系统不关联 对有域名计算机来说 IP地址和DNS域名的映射在从DHCP中自动获取新的IP后,计算机名字将会失效
问题
请简述自举配置协议BOOTP要解决什么问题?
BOOTP用于解决在自动配置协议时 需要发送多次不同协议报文带来的分散、时延等麻烦。通过广播 一次发送一个BOOTP请求包,由BOOTP服务器查找各项信息返回。
标准答案:
第1发现协议地址,实际上我们还是可以通过RARP形式,在未知环境中获取本机参数;
第2获取配置服务器参数,实际上采用ICMP的掩码请求形式,以IP广播的方法请求获取
请简述DHCP 协议在BOOTP基础上主要改进了什么?。
DHCP可以自动获取IP地址分配(不固定)机制,也就是即插即用的联网。和BOOTP不同的地方在于,如果服务器数据库中没有发出请求的主机信息,DHCP能从IP地址缓冲池里动态选择一个IP地址分配给主机(在租期过后则回收这个地址)。
请列出在使用BOOTP协议前,一台计算机在利用网络启动之前,必须在本地需要具有什么协议与参数。
1.需要知道自己的MAC地址(硬件类型)
2.需要支持RARP协议(能进行MAC广播)
3.需要支持ICMP协议(用于获取地址掩码和找到默认路由)
4.需要支持UDP协议(用于发送BOOTP数据包)
比较使用绑定方案地址分配协议和DHCP动态地址分配协议,哪个更适用于广域网?
我认为DHCP动态地址分配协议更适合广域网。广域网区域大,而且用户变化大,静态的地址分配方案无法满足大量用户的需求,使用DHCP可以满足大量用户动态接入网络的需求,同时还能提高地址的利用率(不是每台主机都一直工作,如果静态分配会产生大量闲置时间)。与此同时,DHCP优化还可以减少发广播的次数。不管是从效率还是从可行性上看,都应该选择DHCP动态地址分配协议。
Chapter5 路由协议
RIP BGP位于应用层
3个概念:路由选择 路由协议 路由算法
路由选择$\rightarrow$通过互连网络从源节点向目的节点传输信息的通道,且中间至少有一个中间节点
路由协议$\rightarrow$路由指导IP数据报发送过程中事先约定好的规定和标准(规定了IP数据报在网络中存储和转发的方式)
路由协议决定了路由选择,而路由算法是路由协议的实现。
在一个Autonomous System内的路由协议被称为Interior Gateway Protocol
而AS之间的路由协议则是Exterior Gateway Protocol
内部网关协议:RIP IGRP EIGRP IS-IS OSPF
外部网关协议:EGP BGP
路由算法$\rightarrow$提高路由协议的功能,尽量减少路由时带来的开销的算法
分层的路由选择协议
实际上的Internet是由各个组织的自治域系统AS(Autonomous System)网络互连而成。
而作用在AS内部的 被称为内部网关协议IGP(RIP,OSPF),外部的则称为外部网关协议EGP(BGP)
目前主要使用自适应 分布式协议,对于理想的路由协议 如何实现?
正确性+完整性$\rightarrow$沿着路由表 肯定能到达所有主机
简洁性+合理性$\rightarrow$是保证时延最小 占有系统资源少 同时要求算法技术复杂性尽可能低
健壮性+可靠性$\rightarrow$根据结点故障,拥塞情况等进行动态的调整
稳定性$\rightarrow$网络结构稳定时避免路由表不断变化
公平性$\rightarrow$除非紧急,否则所有用户数据报进行一样的处理
内部网关协议RIP
RIP简介
路由信息协议Router Information Protocol 是最早的广泛应用的分布式路由选择协议
是比较简单的内部网关协议Interior Gateway Protocol
包括了RIP-1和RIP-2 其中2是1的扩充版
最大的特点:好消息传的快 坏消息传的慢
它的设计基于距离矢量算法(Distance-Vector),使用Hop Count(跳数)来度量和目的网络之间的距离
与设备直连时跳数为0,这个度量值等于到达目的网络间的设备数量。
为了限制收敛时间,RIP规定度量值取0~15之间的整数 大于等于16目的网络不可达 这也直接使得RIP不可能应用在大型网络里
ps: 什么是路由收敛,什么是收敛时间
路由收敛 $\rightarrow$ 所有路由器对当前的网络结构和路由转发达成一致的状态
收敛时间 $\rightarrow$ 从网络拓扑发生变化,到所有相关路由器都得知这个变化并作出相应改变所需要的时间
RIP如何工作
路由器A只和邻居路由器交换信息(同一网段所有路由器的接口),采用主动发送 被动接收的方式
RIP交换的信息是路由器当前所知的全部信息(路由表主体)
每30s完成一次信息交换,更新各自路由器的路由表 在更新时,RIPv1总是广播更新,而v2是组播更新
(具体的情况就是 在第一次交换之前 路由器只有直连网络的信息,在几次交换之后,会得到整个自治域的最短距离信息) 在几次交换之后,就能实现每次转发距离最小。
形成RIP路由表
- RouterA启动了RIP协议,向相邻路由器广播一个Request报文
- RouterB是A的邻居,受到Request报文后将自己的整个路由表封装在Response报文里,向接口对应的网络广播
- RouterA根据B的报文形成自己的路由表
与RIPv1相比,RIPv2的不同
- v1是有类路由协议,v2是无类路由协议
- v1不支持VLSM v2支持
- v1没有认证功能,v2有明文和MD5认证
- v1没有手工汇总,必须自动;v2可以关闭自动汇总
- V1总是广播更新,v2组播更新
- v1没有路由标记 不能过滤和实施策略
- v1发送的updata包没有next-hop属性,这个属性可以用来进行路由更新的重定
- 使用v1的路由器可以接收v2的报文,而使用v2的则不能接收v1的报文
RIP协议 如何出现环路?
在如下的网段里,R1和C直连 跳数为1 R2到C跳数则为2
现在C网段出现故障 R1到C距离为16 不可达
R1
准备在下一个30秒内告诉R2
这个坏消息,但是R2
先把自己的所有信息都告诉了R1
,R1
一看咦?R2
到C
的跳数是2,我到R2
就一跳,现在虽然我不能直接到C
了,那么绕道R2
不就可以了吗?说干就干,于是把自己到C
的跳数改为3
.好了,真相被谎言掩盖了。
R1
向R2
这个坦白所有的信息,R2
看到R1
到C
的距离变为3了,R2
知道自己是经过R1
才到达的C
,于是毫不犹豫的改为4.下一次再把全部信息告诉R1
,R1
收到一看,咋回事啊,怎么又加一跳了呢!R2
那边发生了什么?但是还是得根据规则,毫不犹豫的修改到C的距离跳数。就这样不断增加,直到都为16,才恍然大悟,原来大家都到不了了啊。
内部网关协议OSPF
OSPF简介
Open Shortest Path First 开放最短路径优先协议 是为了克服RIP的缺陷而设计的。
属于典型链路状态(link-state)协议。在区域内的所有路由器维护共同的链路状态数据库。
维护的数据包括 链路标号 两端连接路由器 链路度量(距离 费用 带宽 时延)
可以用在较大的网络中 但路由协议和算法比较复杂
AS 被OSPF划分成若干个区域,每个区域路由器数量不超过200个,并由32位区域标识符描述。
在某个区域的所有路由器,只需要知道本区域的网络拓扑结构即可。这使得OSPF协议的效率比较高
AS被划分成 Backbone Area(主干区域,0.0.0.0) 和Area,主干区域路由器就是主干路由器,区域之间设置区域边界路由器,这个路由器和主干路由器连接。
OSPF工作原理
在区域中使用flooding(泛洪法),由路由器所有输出接口向相邻路由器发送某个特定链路状态信息(我所知的相邻路由器的链路状态),再由相邻路由器向其他地方转发(不会发回来) 注意:转发的是人家的包?
经过信息交换,区域中的每个路由器都保存了所有路由链路状态信息 据此组成相同链路状态数据库(LSDB)
在进行数据报的路由选择时,可以通过链路状态计算得到最短路径,并且通过链路度量,能更加灵活的处理
链路发生变化时,OSPF才使用泛洪法发送变化的信息
分层区域设置 让交换路由信息的种类增加。随着层次增加,OSPF会逐渐变的更加复杂 但在更强大的设备加持下,OSPF能够有效的管理大规模的网络
网络按照层次结构设计时大规模网络普遍采用的设计原则。一般分为接入层、汇聚层(边缘层)、核心层;同样的设备在不同的层次时所完成的工作也是不同的。
OSPF路由算法
在建立链路状态数据库后 路由器相当于拥有了网络拓扑的完整信息,根据网络拓扑构建网络最短路径树,路由器就能建立自己的***隐式路由表***(只供自己使用)
根据本区域的 链路状态数据库 计算到本区域的各个网络路由
根据本AS的 链路状态数据库 计算到AS中其他区域各个网络路由。
主干路由器根据到区域边界路由器(ABR)距离,和ABR到区内网络的距离综合选择路由
根据到AS域边界路由器+AS边界路由器到外部目的网络的距离,计算选择的路由
OSPF可以根据IP首部的TOS(Type Of Service服务类型)对不同的链路设置代价(1-65535) 根据链路带宽 时延来计算
如果有多个相同代价的路由,还可以作多路径间多负载均衡,支持VLSM和CIDR 健壮性、稳定性、服务质量都不错。
OSPF和RIP的区别
RIP只关注最短路径(这个路径还是只看跳数决定的)和下一跳路由器;而OSPF则能进行链路状态计算,还有链路度量机制
RIP在进行信息交换时不是转发人家发来的包,而是根据他的人包更新,然后发送自己的包(OSPF是转发)
RIP的信息交换是定时的!而OSPF则是检测到链路变化时才发送。
OSPF虽然有着更好的服务效果,但对计算能力的要求比较高
对于距离矢量路由协议来说交换的是路由表,每个路由器的路由表都是照搬其他人的包,并不需要计算
而链路状态路由协议交换链路状态
边界网关协议BGP
BGP简介
自治域间的路由选择由外部网关协议负责。 早期出现的EGP(外部网关协议)已经不再使用
Border Gateway Protocol(version 4)占有重要地位 所有的 AS都需要通过BGP-4获取彼此路由信息。
在域间路由选择时面临的问题
可扩展性 :
域间路由器必须能转发Internet里所有可能的地址的分组。需要的路由表必须提供任何合法的IP地址分配
适应 域的自治特性:
每个自治域被允许使用自己的内部路由协议,选择一条穿越多个AS的路径的最优化是无意义的
对自治域的信任问题
在路由信息交互时,各个ISP提供的路由选择信息是否存在错误?以及域间路由的灵活策略(如一个多连接的ISP可制定通往AS1与AS3的策略 存在信任问题)
BGP的工作原理
首要目标是 找到任何一条 无环的 通往预定目的地的路径(可达优先,没必要最优)
其处理特点是:
能够进行路由优选 避免路由环路 更高效传递路由和维护大量路由信息
跨越多跳路由器建立邻居关系(基于TCP协议) 在BGP路由里携带丰富的属性值
- 自治域间路由,系统层次:自治域外提供路由信息,也就是边界路由器,一个AS设置一个发言人和其他AS交换信息
- 政策性约束,管理员可以配置BGP对某些路径不提供中转的策略,即使它知道如何到达目的地址
- 中转路由设施,当一个自治域同意某个业务流通过本系统转送到另外一个AS时,BGP会作为Transit System。当有一个以上的其他AS连接 但拒绝中转通信的AS称为Multihomed AS,只和一个AS连接 只传输本地业务流称为Stub System(桩AS)
- 可靠传输,BGP使用TCP通信。
路由器中路由协议和路由算法各自完成什么作用?
路由协议规定和指导IP数据报在网络中的存储转发方式。路由算法则需要提高路由协议的功能(工作效率),尽量减少路由时产生的开销,并且尽可能做到快速收敛。
路由协议完成路由信息动态交换,并以此建立路由表;路由算法是根据转发IP包的目的地址,依据路由表计算出最优转发路径和端口。
什么是跳数?RIP协议为什么将最大跳数设为16?
跳数(Hop Count),从源端口到目的端口所经过的路由设备个数
为了限制收敛时间。在网络中有一个设备出现故障时,与其直连的设备知道网络不可达,但在更新之前如果其他不知情的路由设备向故障网段发送报文,就会出现误解的情况从而出现环路,两个设备到故障网段的跳数不断增加直到达到16时才能确认不可达。
RIP协议工作的基本思想,主要问题在那里?
1.只和相邻路由器交换信息 采取主动发送 被动接收到方式
2.每30s一次交换,每次都交换整个路由表
主要的问题:
1. 规定最多16跳,所有路由器持有全部路由信息,不能用在大型网络上
2. 只根据跳数来判断传输效率,不考虑链路带宽和延时等等其他因素
3. 发生故障时,收敛速度慢
4. 无法考虑多链路的负载均衡机制
5. 不能识别服务等级和类型
目前网络路由协议主要考虑的哪些要素?
见理想路由协议如何实现
简述互联网为什么要定义自治域AS,解释为什么要分层路由。
定义自治域AS:全球有很多的公司和组织需要接入互联网,但根据其业务或条件的不同,其内部拓扑有着很大区别,并且其网络构成细节也希望不对外界公开,所以引入AS的概念来让不同的互联网实体可以无障碍沟通的同时保留自己的完整性。
分层路由:实际上的互联网是由各个AS互连而成,而由于业务等等因素的区别,每个AS的内部拓扑和使用的协议不一定相同,因此进行分层的路由,在AS内部使用IGP,只需要考虑内部的拓扑结构,而AS之间使用BGP也可以无视不同AS内部的差异。
RIP与OSPF协议主要特点,各自处理的自治域规模一般多大?
RIP是基于距离矢量算法设计,只考虑跳数,所以路由选择没有考虑到链路的带宽和延时,引入不可超过16跳来避免环路也让其只能用于早期的 小型的互联网。但其的算法思路简单,对路由设备算力的要求低于OSPF协议。
OSPF则属于典型链路状态协议。在区域内的所有路由器维护共同的链路状态数据库,能够考虑到各种链路因素。自治域在OSPF中被划分成了若干个区域(每区域不超过200个路由器),这使得OSPF不仅效率高,而且也能用在较大规模的自治域中。但随着层次的增加,OSPF协议会变的更加复杂,所以对设备的配置有一定要求。
RIP只能用在小型的自治域中(如果自治域中任意两个端点的最短距离大于等于16就不能再使用RIP协议了)
OSPF可以用在大规模的自治域中。
简单说明IGP和EGP协议主要区别。
IGP(Interior Gateway Protocol)用在自治域的内部,用来在AS内部交换路由信息。
EGP(Exterior Gateway Protocol)用于连接不同的自治域,通过策略和过滤来控制路由信息在不同AS间的传播。
简述自治域划分与因特网主干网、区域ISP和用户接入网的关系。
因特网主干网作为一个自治域和多个其他主干网互连,区域ISP则可以直接接入因特网主干网,而用户接入网则作为ISP的客户接入ISP,通过ISP来访问主干网。
BGP协议是否一定能提供最佳路径,为什么?
我认为不是。虽然BGP协议能路由优选 避免路由环路 更高效传递路由和维护大量路由信息。但首要目标是找到任何一条无环的通往预定目的地的路径(可达性为最优先)
简述因特网的实际结构和特点,中国因特网可能的基本组成结构是?
因特网实际上是由各个组织的自治域系统AS网络互连而成,并非平面结构而是层次结构。由核心层 分布层 接入层构成。主干网,城域网(ISP)和用户网(LAN)组成了其层次结构。
组成成分:
- 网根结构是多个主干网(AS)互连
- 大公司和ISP直接与一个或者多个主干网连接
- 小公司和个人用户作为ISP的客户接入ISP
RIP为什么称为距离向量协议?
基于距离矢量算法设计
路由协议有什么作用?
路由指导数据报转送方式,是传输过程中事先约定好的规定和标准
什么是自治域?举两个例子。
一个自治系统(Autonomous System,AS)是一组路由器的集合,它们拥有同样的选路策略、被同一技术管理部门管理运行。
OSPF协议交换什么信息,路径最优含义?
交换的是链路状态信息,包括接口上的IP地址 子网码 网络类型 代价 区域
开放最短路径优先,构建一颗最短路径优先树。
Chapter6 C/S模式与API
网络服务模式与API
Client/Server 模式
因特网的基本通信模式
C/S模式基本概念
一种基于网络的信息交互/计算 分布模式
网络软件被分为client和server 这两个名词直接指向通信中的两个进程,而不是主机
C/S模式的关系和特点
- 对于C/S模式 一定由客户发起请求,而服务器只被动响应 $\rightarrow$ 请求&应答 的分布计算(会话)模式
- 应用进程可以同时是服务器和客户
对于服务器软件 $\rightarrow$ 主体框架 + 单个服务请求处理 + 并发服务请求处理
- 在共享计算机上首先运行,当系统启动时自动调用并不断运行
- 被动等待并且接受来自任意客户的通信请求 在大部分情况下 服务器软件提供单一的服务
- 可以同时处理多个远地/本地客户的请求,但也需要强大的硬件和高级的操作系统支持 并发执行是服务器必须具备的
- 一个服务器软件包括 接收请求、处理单个请求和生成新线程三个部分
对于客户软件 $\rightarrow$ 客户软件只是一个应用程序在进行服务器访问时的称呼
- 是任意的应用程序,它一般还能在本地做其它的事情
- 被用户调用 主动向远地服务器发起通信
较复杂的C/S交互
- 客户应用不限制访问一个服务器,它需要同时和多个服务器通信。
- 服务器在提供服务的同时也需要作为另一个服务器的客户
- 服务器间可能会出现循环依赖
在早期C/S系统中 服务器计算机通常作为信息共享的设备部署(文件服务器、数据库服务器) 客户端自己来计算和跑程序
现今阶段 服务器是数据与业务功能处理中心 客户端则主要是UI界面+少量辅助功能处理
服务器识别
Protocol Port Number 协议端口号 (OSI 术语是运输层服务访问点TSAP) 是TCP/UDP给每种服务定义的标识
对于源进程(它发起了请求)交付通信时通过 端口号明确自己的身份 还有接收方身份
收端进程会通过端口号来向目的进程交付。(很明显 这一切都发生在运输层)
对于服务器 通过端口号来明确提供的服务
服务器端口号必须是唯一定义的 而客户端的端口号可以是临时指定的(只在本地有意义)
在使用TCP通信时 只有端口号是不够的 TCP的两个端点由Socket 插口 :(IP地址,端口号)定义 (或者叫端地址)
协议端口号定义
TCP/UDP定义一套16bit整数值 端口号被分为熟知端口号和一般端口号两列
熟知端口号 : FTP $\rightarrow$ 21 Telnet $\rightarrow$ 23 SMTP $\rightarrow$ 25 DNS $\rightarrow$ 53 TFTP $\rightarrow$ 69 HTTP $\rightarrow$ 80 SNMP $\rightarrow$ 161
一般端口号可以在规定区域内随意定义和分配
主要的端口号在1-225之间
端口号256-1023由Unix系统占用
1024-5000作为临时端口 5000+不常出现
其他的交互模式
C/S模式比较简单 但容易造成网络瓶颈 并且负载不均衡问题也会使得服务器常常过载
P2P (peer to peer):无中心服务器的流行网络技术 依赖所有参与者的计算能力和带宽 占到因特网流量的50%-90%
因特网通信模式和C/S模式各自说明什么问题
因特网通信模式:流模式和报文模式有着比较鲜明的特点,说明我们对因特网功能的需求是多样的,而网络技术也可以用不同的通信模式来满足不同的用户需求,但也说明想要实现稳定可能就需要牺牲效率,实现高效可能就保证不了可靠的传输。
C/S模式:早期的C/S模式以文件数据访问服务为主,客户程序也需要进行计算。而现今的C/S模式在强大的服务器算力支撑下,客户端几乎不用承担计算任务,这说明C/S模式的确得到了大规模的应用,所以服务器技术才能发展的如此迅速。
简述客户软件和服务器软件主要特点
服务器软件:
- 专门提供某类服务的程序,一定可以并行的处理多个客户请求。
- 运行在共享计算机上,只要系统不关闭,就一直运行。
- 被动等待并且接收来自任意用户的通信请求
- 一般需要较强大的硬件和高级的操作系统支持
客户软件:
- 只有在进行通信时才被称为客户,它也可能可以在本地进行其他的计算并且实现其他功能。
- 由用户调用,在用户本地计算机上运行,在用户有需要时主动向远地服务器发起通信请求。
- 可以与多个服务器通信 并且一般不需要特殊硬件和复杂的操作系统
一个服务器软件通常需要包括哪些主要的功能部分?
一个服务器软件主要包括:等待接收请求、处理单个请求和生成新线程
为什么通常服务器端口号是唯一定义的,而客户端的端口号可以临时指定?
服务器端口号唯一定义是为了让所有的客户都能正确找到它。因为C/S交互的身份问题,客户端的端口号只需要做到不和自己同时运行的其他进程混淆即可,临时指定端口号也可以实现同一个端口号的复用(当某个客户软件不运行时就不占用端口号了)
API [Application Program Interface]
API
是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节
- 在应用从操作系统中获得相关服务时 通过调用API 将任务和控制权都交给操作系统,在执行完毕后,操作系统会交还控制权
- 网络通信和数据交互调用API $\rightarrow$ 网络API(他是应用程序和TCP/IP协议通信交互的接口)
- API造就了 应用和网络 的一体 和 分离 $\rightarrow$ 在使用时一体,在开发时分离
互联网中主要有两类API 伯克利版 $\rightarrow$ Socket API 以及 A&AT版 $\rightarrow$ TLI[Transport Lay Interface]
其中Socket API被主流操作系统使用,成为标准。
Socket API
- 它来自Unix 由于Unix一切皆文件(open - read - write - close)的哲学影响,服务器和客户端各自维护一个”文件”,在建立连接打开后,可以向自己文件写入内容供对方读取或者读取对方内容,通讯结束时关闭文件。
- 在通信前 APP要向OS申请一个 套接字(也叫通信描述符),OS返回一个小的整形数作为描述符来识别这个套接字 在通信结束后,这个代表特殊参数的套接字会被回收
- 套接字API 定义并调用多个函数来确定参数和选项 (创建套接字(返回描述符),然后调用这些函数来完成对接)
实现套接字API的函数
Socket
函数 // 创建套接字并返回整型描述符$Descriptor = socket(pf,type,protocol)$
pf $\rightarrow$ ProtocolFamily:协议栈(TCP/IP) Type $\rightarrow$ 连接/无连接 protocol $\rightarrow$ 具体协议
Bind
函数 // 赋予套接字特定的端地址,实现socket和端地址的联编 联编相当于 绑定$Bind(socket,locaaddr,addrlen)$ // 不建立连接的话,bind函数之后就可以交互数据了
loca addr $\rightarrow$ 本地端地址的一般socket地址描述结构。
Close
函数 // 告诉系统终止对一个套接字的使用(释放这个套接字)$close(socket)$ // 如果面向连接,则先关闭连接,再回收套接字
Listen
函数 **// (只有面向连接使用) 套接字被设置为被动模式,等待连接请求*$Listen(socket,queuesize)$ Queue size $\rightarrow$ 客户请求队列长度
Connect
函数 // 面向连接时使用,启动与服务器的连接(前提是服务器已经调用了listen和accept)$connect(socket,saddress,saddresslen)$ //在UDP时 也可以使用 此时完成socket和目的服务器端地址联编
Accept
函数 **// (只有面向连接使用) 确定客户端的地址,确认连接,这时需要创建一个新的套接字,通信结束后回收*$newsock = accept(caddress,caddresslen)$
c address$\rightarrow$按照socket地址结构描述的客户端IP地址
Send
函数 // 客户和服务器使用这个函数来发送消息$send(socket,data,length,flags)$
data $\rightarrow$ 内存待发数据的地址 length $\rightarrow$ 数据字节数 flags $\rightarrow$ 特殊选项(用来调试系统)
$sendto(socket,data,length,flags,destaddress,addresslen)$ //无连接使用sendto函数
$sendmgs(socket,mgsstruct,flags)$ 作用和sendto类似
Recv
函数 // 客户和服务器从套接字接收数据$recv(socket,buffer,length,flags)$
buffer $\rightarrow$ 内存中收到数据的地址 length $\rightarrow$ 缓冲区大小 flags$\rightarrow$特殊选项
$recvfrom(socket,buffer,length,flags,sndraddr,saddrlen)$ //无连接使用recvfrom函数
$recvmgs(socket,mgsstrucct,flags)$ 作用和recvfrom类似 sendmgs和recvmgs是原函数的简化参数版本
其他
- $write(socket,buffer,length) / read(socket,buffer,length)$ Unix的I/O一般操作 在连接之后和send-recv一样
- $getpeername$ //调用accept接收连接请求后调用这个函数获取客户端地址
- $gethostname$ //调用这个函数获取本机的完整信息,可以是域名,也可能是其他
- $ gethostbyname$ //知道域名时 调用这个函数获取本机IP地址
- $getprotobyname$ //知道域名时 调用这个函数获取 socket使用的二进制形式IP地址
- $gethostbyaddr$ //知道IP地址,获取域名 这两个函数在API中完成IP地址和域名的转换
备注:
Accept
确认连接地址之后 需要创建一个新的socket (可以根据C/S模式理解成,服务器创建新线程),只要连接建立,原来的套接字就会用来和下一个客户进行连接。- 服务器可以并发,服务器创建并发线程时套接字也会产生一个副本,这样就实现了并发线程都能调用所有的套接字功能
Listen
和Accept
函数是面向连接通信时服务器必须进行的调用
套接字API与C/S
刚刚的程序每次收到请求都会打印一段信息(建立连接)。
可以注意的是 客户端不需要 socket和端地址联编 因为客户端的端口号可以是临时指定的(端地址也就相当于是可变的),如果客户端需要向服务器发送报文,那另说。
API是否由TCP/IP所定义,目前互联网最常用的API体系是什么。
不是。API是宏观的概念,而网络中使用的API主要分为Socket API(它由Berkeley UNIX定义)和TLI ,其中Socket API被主流的操作系统使用,所以Socket API是互联网最常用的API体系。
API接口与协议端口、插口有什么区别?
在网络中使用的API,指的是应用程序和TCP/IP协议通信交互的接口,它是经过抽象后定义的一组(函数)操作,由操作系统来调用它。API使得应用进程和TCP/IP(运输层)实现透明。
协议端口是TCP/UDP给每种服务定义的标识,在进程进行交互时协助对接。协议端口使得两端的操作系统都能识别身份和服务。
服务器套接字API有哪些专门的函数(过程);对一个面向连接的TCP通信,服务器端套接字API的实现要经过那些过程调用?
- socket bind listen accept connect close send(sendto) recv(recvfrom) getpeername gethostname gethostbyname getprotobyname gethostbyaddr等
- 对于面向连接 服务器端API的实现要经过
- getprotobyname 获取IP地址
- Socket 建立套接字
- bind (socket和端口号联编)
- listen 套接字设置为被动模式,等待连接请求
- accept 确定客户端的地址,确认连接,并且返回一个新创建的套接字
- send&recv 发送和接收数据
- close 关闭连接 回收套接字
对一个非连接通信,客户端套接字为什么不必和本地端地址绑定?
因为客户端的端口号可以是临时指定的(端地址也就相当于是可变的),这个端地址仅仅具有本地的意义,由于端地址已经可以在本地唯一的标识进程,即使不绑定套接字OS和TCP/IP也都能通过端地址来找到应用进程。
Chapter7 Web开发技术
远程过程调用 RPC 「Remote Procedure Call」
RPC模式 以及利用此模式制作的RPC中间件(通信插件) 旨在简化Web开发,使得程序员可以使用高级语言来建构程序(特别是网络分布式程序 如C/S架构) 而不是利用API来调用
套接字API
是底层通信过程最直接的抽象 直接面向TCP/IP通信过程 所以即使是使用API来调用底层硬件仍然比较麻烦 并且会出现异常 好在API不是网络应用程序间通信实现的唯一方法procedure 过程
指能解决一系列相关人物的可调用程序,(传统面向过程编程里的子程序)procedure call 过程调用
是面向过程编程机制 每个过程利用一组形式化参数定义,当过程被调用时 调用者要提供与形参匹配的实参(直接可以理解成 函数 和函数的调用)RPC
- 是最早被提出和开发的C/S通信工具的机制
- 使用传统编程语言结构向开发者提供接口,而不像API那样需要利用显式通信原语
- RPC允许程序员将过程适配到多个主机上,通过不同计算机间进行的远程过程调用自动生产代码并完成通信
RPC模式规范
- 我们需要的 RPC模式在现有的编程语言中扩展,设计了一种符合高级语言编写规范(考虑到不同计算机的适配问题 需要用高级语言 汇编不行) 并能自动处理网络通信细节
- RPC允许客户端 跨过网络调用服务器过程 在这种情况下就可以使用
RPC工具
,它将生成处理所需的通信过程插件communication stub/proxy
真正的通信任务交给插件来完成 如下图- 在使用通信插件后 程序员被允许在忽略底层通信拓扑的基础上使用高级语言和成熟的编程方法来进行架构 提高软件的可靠性
- 客户端 $\Rightarrow$ 客户插件 + 客户端主程序
- 服务器 $\Rightarrow$ 服务器插件 + 远程过程
- 在使用通信插件后 程序员被允许在忽略底层通信拓扑的基础上使用高级语言和成熟的编程方法来进行架构 提高软件的可靠性
中间件 middleware
是介于传统应用程序和系统平台(os和hardware system) 之间的通用服务工具 主要的作用是以下三点 我认为这和API有很多相似之处- 提供标准接口 | 支持分布式计算(负载均衡) | 支持跨平台
Chapter8 Multi-Media&VoIP
互联网中的实时业务
- 多媒体「multimedia」 一般用来指含有音频/视频的数据,当然也适用于文本
这类信号在数字化后如果按照因特网传输数据的方式到达接收方,并实时的展示出来 其结果是难以接受的
我们知道 音视频信号的传播过程 包括 抽样、编码(D=>S)、网络传输、解码
而因特网存在的 丢包 和 乱序问题
丢包 $\Rightarrow$ 抽样值丢失
乱序 $\Rightarrow$ 抽样值时延不一致!这会造成以下我们所说的 抖动
处理实时业务时碰到的最大困难, 不是分组丢失 而是 抖动「jitter」
这意味着「**与常规的传输协议不同,传输实时数据的协议 只需要处理抖动问题,而不需要重传丢失的分组
**」
抖动的定义:「信号的某特定时刻相对于其理想时间位置上的短期偏离」 相当于“跳ping、很小的延迟变化”
因特网无法要求底层的网络具有处理实时业务的功能 所以解决方案有两个
设计等时延、无抖动的网络(PSTN\TDM电路)
设计抖动补偿协议 实现平滑重放「playback」 这又包含了两种主要的模式
实现抖动缓冲 我们只需要维护一个cache然后延迟d个时间单位,虽然分组到达的时间略有不同,但总会在d时间之内到达,我们均匀的输出分组,就没有关系了
- 想要实现流式传输有两种方法 : 实时流式传输「RTS」 和 顺序流式传输
- 新世纪以来,流式存储下载的局限性越来越明显,而顺序流式传输「progressive streaming」成为主流
实时传输协议RTP「Real-time Transport Protocol」
基本信息
来自应用层|支持单播/多播|提供时间信息+实现流同步|通常使用UDP 也可在TCP/ATM等协议上工作
RTP = RTP数据协议+RTP控制协议
RTP的架构如下:
- version|P: 载荷是否为0填充|X:是否有扩展头部 | M:特殊帧标志
- CC「CSRC计数」:即有多少个源(媒体流被按照规则封装成一个个源)
- 一个多媒体文件中, 视频、音频、字幕···会来自不同的轨道 它们被封装成不同的源 然后在接收端混合输出
- PT:载荷的编码特性「包括 编码算法 采样频率 承载通道」 用来指示接收端如何解码
- 序列号 每个数据分组有一个16位的序列号,每次自加1。类似TCP序列号, 用来检测是否丢包 序列号初始值是随机的 因为要防范对加密数据的攻击
- 时间戳(时标) 32位 反映RTP数据包中第一个数据的 采样时刻 初始时间戳是随机选择的,而随后从单调且线性增加的时钟导出,以解决同步与抖动计算。 时间戳的单位不是固定的s/ms 而是根据载荷类型确定
序列号与时间戳 是完全独立的
因为分组顺序 和 时间顺序 并不是线性相关的
「⚠️ 意思不只是 每个分组和分组到达的时间不是线性相关。 问题的关键在于 信号是数字化(离散)的,而时间戳会随着时间一直累加,而如果信号进入了空白帧,那么分组可以进入缓变状态(等到有数据了 再发送这个分组)」
- CSRC列表:接收端会对多个源的数据进行混合输出 以此列表作为参照
- SSRC:标识多个源进行同步。 不是随机选择,每个RTP包里的每个同步源(需要同步播放)都有不同的SSRC标识
RTCP协议「Real-time Transport Control Protocol」它和RTP是连体婴儿 不可分割
不对实际音视频数据进行封装,是控制短分组协议
RTCP的任务:
- 服务质量监控和反馈
- 接收端会多播发送丢包率、抖动···,发送端会多播发送 分组数、时间戳、绝对时间
- 多源媒体之间的标识和同步
IP电话(IP telephony)/IP语音(Voice over IP/ VoIP)
使用IP路由器取代传统电话交换机的动机很简单:💰
而且由于底层的网络设施共享,只要有了基本的设备就可以实现IP通话
IP电话的应用所面对的最大挑战就是 设计者希望IP电话能和已有的公共电话交换网络PSTN(Public Switched Telephone Network)兼容(向后兼容),它们需要实现双向可通话。
信令与VoIP标准
目前有两个组织为IP电话制定了标准:
国际电信联盟International Telecommunications Union 制定电话标准
因特网工程任务组Internet Engineering Task Force/ IETF 制定TCP/IP标准
IP电话的基础技术
- 音频采用脉冲编码调制(PCM/ Pulse Code Modulation) 编码
- 数字化音频使用 RTP进行传输
IP电话的主要复杂之处在于 呼叫建立和呼叫管理 而我们把「建立和终止呼叫的过程 称为 信令(signaling)」
电话中处理呼叫管理所采用的机制 就是信令系统
为了和已有的电话系统兼容,我们需要和SS7(Signaling System 7)兼容 IETF剔除了 会话初启协议「Session Initiation Protocol,SIP」
SDP(Session Description Protocol)是一个用来描述多媒体会话的应用层控制协议,它是一个基于文本的协议,用于会话建立过程中的媒体类型和编码方案的协商等
H.323 ITU定义的IP电话信令协议
IP电话质量控制
要求:
- 使用光纤网络+特殊补偿算法 可以容忍最多30%的丢包率
- 电话通信端到端延时要求 < 250ms。
SIP协议「Session Initialization Protocol」
用以一个或多个用户的会话建立、更改、管理、终止。不能单独完成多媒体通信的呼叫。
STP和SDP+RTP/RTCP一起配合 组建完整的多媒体通信系统
SIP功能:
•用户定位:确定参加通信的终端用户位置。
•用户通信能力协商:确定通信的媒体类型和参 数。
•用户交互意愿:确定被叫加入通信的意愿。
•呼叫建立:建立主叫和被叫的会话参数。
•呼叫处理和控制:包括呼叫重定向、呼叫转移 ,终止呼叫等。
SIP特点
- 通过代理和重定向请求用户当前位置以支持用户移动性
- 独立于传输层协议,可以承载在不同的传输协议上 并扩展方便
- 只建立 更改 终止一个会话,和会话内容无关,这意味着其载体可以是任意的(甚至可以是视频和游戏)
SIP在网络中的主要实体:
用户代理( User Agent ):用来发起或接收请求 的逻辑实体设备(如 IP 电话机、计算机、媒体网关等)。
用户代理客户 UAC ( User Agent Client ):发 起请求的一方(如 SIP Phone );
用户代理服务器 UAS ( User Agent Server ): 接收 请求,产生响应的一方。
定位 服务器( Location Server ):管理提供被 叫的位置数据库 , 如每个用户的 IP 地址集合( IP 地址、电话号码、 email 地址)、用户订购业务 、用户偏好等,在呼叫过程中提供被叫用户的位 置信息
支持服务器( Support Server ):代理服务器、 重定向服务器、注册服务器,实际呼叫过程扩展 应用。
代理服务器:作为一个实体转发用户代理客户 UAC 的请求至被叫(用户代理服务器 UAS )或 一个代理服务器。
注册服务器:接收注册请求 , 将注册请求中的地 址映射关系更新到定位数据库中,并负责验证注 册请求和确保底层数据库一致性。
重定向服务器:为所收到的请求返回一个或多个 新的地址,用户代理客户 UAC 再向这些新的地址 发起请求。重定向服务器并不接收呼叫或拒绝呼 叫,主要完成路由重新定向,与注册过程配合可 以支持 SIP 终端的移动性
SIP协议消息类型
SIP分为请求和响应
试列举3-5种网络中可能产生的时延,什么是等时时延或非等时时延?
可能的时延有 信号传播时延、信号处理时延、路由器存储转发时延、丢包重传时延、播放时延等。
等时时延&非等时时延 :
以信号传输为例 就是信号总在一段固定时间后到达,这其中的时延称为等时时延
如果每次传输信号会在不同的时间后到达,就将这段时延称为非等时时延
在因特网丢包、乱序的状况下,分析比较对非实时email和实时IP电话所产生的影响?
对于E-Mail来说,如果不使用可靠的传输协议,接收方很难收到正确、完整的信息。但由于其非实时性,借助SMTP等可靠传输协议实现差错检测和报文重传,客户发送的E-Mail几乎总能正确、完整的到达接收方处。
对于实时IP电话来说,由于音视频信号在网络上传输的特点,网络丢包、乱序导致网络抖动,使得还原出的信号产生失真。如果借助可靠传输,由于网络层丢包、乱序的状况,传输会不可避免的花费时间,会丧失实时性。如果实时传输并引入超时重传,在接收端已经收到并提取信息之后再把错误或丢失的数据包插播进来是毫无意义的。因此智能设计等时延、无抖动的网络结构 或者 设计补偿抖动的协议实现平滑重放。
简述RTP协议中定义序列号、时标有什么作用?如何理解两者具有独立性。
序列号 类似TCP序列号,用来检测是否丢包。
时间戳(时标) 反映RTP数据包中第一个数据的采样时刻,初始时间戳随机选择,随后则从单调、线性增加的时钟导出,以解决同步与抖动计算。
序列号所对应的是 分组顺序,时间戳对应的则是 时间顺序。两者之间不一定是线性相关的,因为信号的特点可能使得在一段时间内并无信号(数据帧),或者出现可变长度视频编码(图像缓变)帧,而在这段时间内时间戳会一刻不停的累加。