石墨文档链接: https://shimo.im/docs/xlnempLTnDMK1LRs/
第一章
- 因特网是什么?
- 描述因特网的具体组成,即构成因特网的基本硬件与软件组成
- 端系统(主机):桌面计算机、服务器、移动计算机
- 通信链路与分组交换机(路由器与链路层交换机)
- 分组与路径
- ISP因特网服务提供商
- 协议:
- TCP传输层协议:transmission control protocol
- IP网络层协议:internet protocol
- 根据分布式应用提供服务的联网基础设备来描述因特网
- 分布式应用程序,因特网应用程序运行在端系统上,并不运行于网络核心中的分组交换机。
- 与因特网相连的端系统提供了一个应用程序编程接口(API),API规定了运行在一个端系统上的软件请求因特网基础设施向运行在另一个端系统上的特定目的地软件交付数据的方式。
- 名词释义
- 端系统:
- 服务器:相当于更为强大的机器
- 客户:等同于桌面PC、移动PC和智能手机
- 接入网:指端系统连接到其边缘路由器的物理链路(边缘路由器,端系统连接的第一台路由器)
- 接入网
- 家庭接入:
- DSL数字用户线(基于现有的电话线)
1. 用户的本地电话公司也就是ISP
2. 分频机制实现的FDM(Frequency-Division Multiplexing)
2. 电缆(利用有线电视公司的有线电视基础设施)
1. 光缆将电缆头端连接到地区的枢纽,从这里使用传统的同轴电缆到达各家各户,一般每个地区的枢纽通常支持500-5000个家庭
2. 物理材料:HFC 混合光纤同轴
3. 重要的特征是:
1. 共享广播媒体:上行与下行信道都是共享的(上行信道需要一个分布式多路访问来协调传输与避免碰撞)
3. 光纤到户(FTTH)
1. 主动光纤网络(Active Optical Network, AON):等价于交换因特网
2. 被动光纤网络(Passive Optical Network, PON)
2. 企业接入:
1. 以太网:LAN local area network
2. WiFi
3. 广域无线接入:
1. 3G
2. LTE
4. 物理媒体
- 引导型媒体:沿着固体媒体前行
- 非引导型媒体:在空气或者外层空间中传播
- 种类:
- 双绞铜线:
- 无屏蔽双绞线UTP
- 同轴电缆:
- 光纤:
- 陆地无线电信道:
- 卫星无线电信道:同步卫星、近地轨道
- 分组交换机的特点:
- 存储转发传输:store and forward transmission
- 导致了存储转发时延:
2. 排队时延与分组丢失:
1. 因为每一个分组交换机都有一个输出缓存,也就是输出队列。
3. 转发表与路由选择协议:
6. 电路交换与分组交换
- 电路交换:
- 在端系统通信会话期间,预留了端系统间通信路径所需要的资源(缓存,链路传输速率)
- 例子:传统的电话网络
- 创建一条专用的端到端连接,每一条连接成为电路,是一个名副其实的连接,因为此时沿着发送方和接收方之间路径上的交换机都为了该链接维护连接状态。
- 电路交换网络中复用:
- FDM与TDM
- 对比:
- 分组交换机的优点:
- 提供了比电路交换更好的带宽
- 比电路交换更简单,更高效,实现成本更低
- 分组交换机缺点:
- 不适合实时服务
- 端到端时延是可变的和不可预测的
- 电路交换机的坏处:(有电路创建时间)
- 在静默期专用电路空闲且效率比较低
- 创建端到端电路和预留端到端带宽是复杂的,需要复杂的信令软件协助
- ISP
- 任何的ISP可以选择为多宿,也就是可以与两个或更多的提供商ISP连接
- 分组交换网中的时延、丢包和吞吐量
- 时延的种类(以下加起来是结点总时延)
- 结点处理时延(node processing delay):微妙级,对一台路由器的最大吞吐速率是有重要影响的。
- 排队时延(queuing delay):流量的强度与性质的函数
- 传输时延(transmission delay):L/R L比特表示该分组的长度,R表示传输速率(路由器的传输能力决定的)
- 传播时延(propagation delay):d/s物理传输的时间(物理材料所决定的)
- 流量强度:
- 丢包:
- 端到端时延:
- 吞吐量:
- 瞬间吞吐量
- 平局吞吐量
- 瓶颈链路(在现在的因特网中对吞吐量的限制因素通常是接入网)
- 协议层次及其服务模型
- 协议栈:各层的所有协议
- 结构:
3. 应用层:
1. HTTP、SMTP、FTP、DNS
2. 分布在多个端系统上。位于应用层的分组信息成为message 报文
4. 运输层:
1. 在应用程序之间进行应用层报文的传送
2. 运输层分组成为segment 报文段
5. 网络层:
1. 负责将成为数据报的网络层分组从一台主机移动到另一台主机
2. 网络层分组称为datagram 数据报
6. 链路层;
1. 为了将网络层分组从一个结点移动到路径上的下一个结点,需要链路层的服务
2. 链路层分组称为frame 帧
7. 物理层:
1. 比特为单位
10. 封装:
第二章:
- 应用层协议的核心:写出能够运行在不同的端系统和通过网络彼此通信的程序
- 应用程序的体系结构;
- CS客户-服务器体系结构:
- 应用程序:Web、FTP、Telnet和电子邮件
- P2P体系结构:
- 应用程序:文件共享、对等方协助下载、skype
- 自扩展性
- 三个挑战:
- ISP友好,大多数的住宅ISP受限于“非对称”带宽应用,但是P2P改变了从服务器到ISP的上载流量,对ISP带来了巨大的压力
- 安全性:高度分布于开放特性
- 激励:要说服用户自愿向应用提供带宽、存储和计算资源
- 进程通信
- 在给定的一对进程之间的通信会话场景中,发起通信的进程被标识为客户,在会话开始时等待联系的进程是服务器。
- 多数应用程序是由通信进程对组成,每对中的两个进程互相发送报文。进程通过一个称为套接字的软件接口想网络发送报文和接受报文。
- 套接字也成为应用程序和网络之间的应用程序编程接口
- 应用程序开发者可以控制套接字在应用层端的一切,但是对该套接字的运输层端几乎没有控制权。应用程序开发者对于运输层的控制仅仅限于:
- 选择运输层协议
- 设定几个运输层参数
- 进程寻址:定义两个信息:
- 主机的地址:使用IP地址
- 定义在目的主机中的接受进程的标识符:端口号
- *应用程序服务要求分类:
- 可靠数据传输:容忍丢失的应用
- 吞吐量:带宽敏感的应用、弹性应用
- 定时:也就是延迟的保证
- 安全:加密性
- TCP与UDP服务
- TCP服务:
- 面向连接的服务:握手阶段->一条TCP连接建立(双工的)->拆除
- 可靠数据传送服务
- 等等
- TCP的加强版(SSL安全套接字层)
- UDP服务:
- 最小的服务,无连接的,不可靠
- Web和HTTP
- Web最吸引人的就是:按需操作
- Web的应用层协议是超文本传输协议(HyperText Transfer Protocol, HTTP)
- Web的术语:
- Web页面, page,是由对象组成的
- 对象,object,一个文件
- 多数的web页面都含有一个HTML基本文件(HTML file)以及几个引用对象
- HTML基本文件通过对象的url地址引用页面中的其他对象。每一个url地址由两个部分组成:存放对象的服务器主机名和对象的路径名。
4. Web浏览器实现了HTTP的客户端,所以交替使用“浏览器”与“客户”这两个术语
4. Web服务器总是打开着,具有一个固定的ip地址,且它服务于可能来自数以万计的不同的浏览器的请求
5. HTTP:无状态协议
1. HTTP服务器并不保存关于用户的任何信息
7. HTTP
- 非持续连接与持续连接:
- 非持续连接:每一个请求与响应都是经过一个单独的TCP链接发送的。
- 每一个TCP连接之传输一个请求报文和一个响应报文
- 持续连接:所有的请求及相应经相同TCP连接发送
- RTT(Round Trip time):一个短分组从客户到服务器然后再返回客户所花费的时间。
- 非持续连接:传输一个文件的时候总的响应时间也就是三次握手的加上传输文件的时间
- 也就是2RTT + l/s(传播时间,pro)
4. 非持续连接的缺点:
1. 必须为每一个请求的对象建立和维护一个全新的连接,这样在客户与服务器中都要分配TCP的缓冲区和保持TCP变量,这给Web服务器带来了负担
2. 每一个对象经受两倍RTT的交付时延,即一个RTT用于创建TCP,另一个RTT用于请求和接收一个对象
5. HTTP的默认模式是使用带流水线的持续连接
6. HTTP报文格式
1. 两种报文:请求报文与响应报文
1. 请求报文
1. 由5行组成,每一行由一个回车和换行符结束。最后一行后再附加一个回车换行符
2. 第一行为请求行,有三个字段:方法字段、URL字段和HTTP版本字段
3. 其后继的行叫做首部行:
1. 主机
2. 告诉服务器是否使用持续连接
3. 用户代理,指明向服务器发送请求的浏览器的类型(服务器可以有效地为不同类型的用户代理发送相同对象的不同版本)
4. 表示用户想要得到的对象的版本
4. get与post的区别
2. 响应报文
1. 三个部分组成:一个初始状态行(status line)、6个首部行(header line),然后是实体体(entity body)
2. 状态行有3个字段:协议版本、状态码和相应的状态信息
3. 其后的看就知道了
4. 其中last-modified表示的是对象创建或者最后修改的日期的时间。对即可能在本地用户也可能在网络缓存服务器上的对象缓存很重要
5. content-length:字节数
6. 常见的状态码:
8. 用户与服务器的交互:cookie
- cookie技术有4个组件:
- 在HTTP相应报文中的一个cookie首部行
- 在HTTP请求报文中的一个cookie首部行
- 在用户端系统中保留一个cookie文件,并由用户的浏览器进行管理
- 位于Web站点的一个后端数据库
9. Web缓存
- Web缓存器也叫代理服务器
- 可以在存储空间中保存最近请求过的对象的副本
- 过程:
4. 在因特网上部署Web缓存器的原因如下:
1. Web缓存器可以大大减少对客户请求的响应时间,特别是当客户与初始服务器之间的瓶颈带宽远低于客户与Web缓存器之间时
2. Web缓存器可以迅速将该对象交付给用户,同时可以大大减少一个机构的接入链路到因特网的通信量。从而降低了费用
5. **内容分发网络CDN(**content distribution network):也就是使用web缓存服务器
10. 条件get方法:
- 解决的问题:放在缓存服务器中的数据有可能是陈旧的
- 特征:
- 请求报文使用get方法
- 请求报文中包含一个 if - modified -since首部行
- 304 not modified
- 文件传输协议:FTP
- 使用两个并行的TCP连接来传输文件,一个是控制连接一个是数据连接
- 因此FTP称为是带外的传输的,HTTP是带内的
- FTP服务器在整个会话期间必须保留用户的状态。
- FTP命令与问答:
- 每个命令是由4个大写字母ASCII字符组成
- 因特网中的电子邮件
- 主要组成部分:
- 用户代理
- 邮件服务器:核心
- 每一个用户在某个邮箱服务器上有一个邮箱,用于管理和维护发送给他的报文
- 简单邮件传输协议(SMTP)
2. 一些陈旧的特性:
1. 限制所有的邮件报文的体部分(不只是首部)只能采用简单的7比特ASCII表示。(这是因为当时的传输能力不足)
3. SMTP一般不使用中间邮件服务器发送邮件。这意味着邮件并不会在中间的某个邮件服务器中存留
4. SMTP之运行在发送与接收邮件服务器上
5. 命令都是自解释的:比如HELO、MAIL FROM、RCPT TO、DATA 和 QUIT
6. SMTP用的是持续连接
13. SMTP与HTTP的对比
- 第一个区别:
- HTTP是一个拉协议,也就是用户主要是从服务器上拉取信息,TCP连接是由要拉取信息的机器发起的,
- SMTP是一个推协议,也就是用户主要是向服务器发送数据,TCP连接是由要发送信息的机器发起的
- 第二个区别:
- SMTP要求每个报文使用7比特ASCII码格式
- HTTP不受这种约束
- 第三个区别:处理一个既包含文本又包含图形的文档的方式不一样
- HTTP把每一个对象封装到它自己的HTTP响应报文中
- SMTP则把所有的保温对象放在一个报文之中
- 邮件访问协议
- 解决的问题:前面的SMTP只是服务器之间的传输协议,所以用户需要登陆服务器才能查看邮件,另外在PC端跑服务器也是不现实的。
- SMTP使用在发送方PC与发送方的服务器、发送方的服务器与接受方的服务器之间
- 接受方与接受方服务器之间是一个拉的操作,所以需要邮件访问协议
4. POP3
1. 简单但是功能有限
2. 按照三个阶段进行工作
1. 特许:用户代理使用明文用户名和口令鉴别用户
2. 事务处理:用户代理取回报文以及一系列的操作
3. 更新:quit(此时完成删除操作)
5. IMAP
1. 解决的问题:POP3在服务器上没有层次文件夹
2. 两个特性:
1. 只是服务器上的层次文件夹
2. 允许用户代理获取报文组件的命令(在低带宽连接的时候十分有用)
15. DNS(Domain Name System)域名系统
- 是什么:
- 一个由分层的DNS服务器实现的分布式数据库
- 一个使得主机能够查询分布式数据库的应用层协议,DNS服务器通常是运行BIND软件的UNIX机器。
- 运行在UDP之上,使用53号端口
- 连接的过程(DNS查询在TCP连接之前)
3. DNS的服务:
1. 进行主机名到IP地址的转换
2. 主机别名:应用程序可以调用DNS来获得主机别名对应的规范主机名以及主机IP
3. 邮件服务器别名:电子邮件应用程序调用DNS来对提供的邮件服务器别名进行解析…
4. 负载分配:(因为存在多个服务器有着同一个别名,所以DNS需要在这些冗余的web服务器之间循环分配负载)
4. DNS的设计:
1. 第一种:简单一个
问题有:单点故障、通信容量、远距离的集中式数据库、维护
2. 第二种:分布式
1. 三种类型的DNS服务器:根DNS服务器、顶级域(Top-Level Domain)DNS服务器、权威DNS服务器
2. 还有一类DNS,称为DNS服务器(严格意义上不属于该服务器的层次结构)
3. DNS缓存:
1. 解决的问题:下面的查询的过程太过冗长
2. 与Web缓存类似
3. 两种查询方式:
1. 递归查询:
1. 递归查询是一种DNS 服务器的查询模式,在该模式下DNS 服务器接收到客户机请求,必须使用一个准确的查询结果回复客户机。如果DNS 服务器本地没有存储查询DNS 信息,那么该服务器会询问其他服务器,并将返回的查询结果提交给客户机。
2. 迭代查询:
1. DNS 服务器另外一种查询方式为迭代查询,DNS 服务器会向客户机提供其他能够解析查询请求的DNS 服务器地址,当客户机发送查询请求时,DNS 服务器并不直接回复查询结果,而是告诉客户机另一台DNS 服务器地址,客户机再向这台DNS 服务器提交请求,依次循环直到返回查询的结果为止
5. DNS记录与报文:
1. 记录资源(Resource Record)RR
1. 是一个4元组(Name,Value,Type,TTL)
Type | Name | Value |
---|---|---|
A | 主机名 | 对应的IP |
NS | 域 | 一个知道如何获得该域中主机IP地址的权威DNS服务器的主机名 |
CNAME | 主机规范名 | 别名 |
MX | 别名 | 主机规范名 |
2. TTL表示的记录生存时间
2. DNS报文
1. 两种报文:查询与回答报文
2. 有着相同的格式
6. 在DNS数据库中插入记录
1. 注册登记机构
16. P2P应用
- 解决的问题:在CS客户-服务器的体系结构中,极大的依赖于总是打开的基础设施服务器
- 两种设计:
- 第一种应用是文件分发,其中应用程序从单个源向大量的对等方发送一个文件
- 第二种应用是分布在大型对等方社区中的数据库—分布式散列表
- P2P文件分发
- P2P体系结构的扩展性
- 一个CS结构中的时间为:
- 在P2P中每一个对等方利用自己的上载能力发送文件,因此服务器可能只需要发送文件一次
- 最小的发送时间是:
- 扩展性的原因是:对等方出了事比特的消费者外还是他们的重新分发者
- BitTorrnet:
- **洪流:**参与一个特定文件分发的所有对等方的集合
- 在一个洪流中的对等方彼此下载等长度的文件块,典型的块长度是256
- 每一个洪流有一个基础设施节点,称为追踪器,每一个对等方加入某洪流时,则向追踪器注册自己,并周期性的同之追踪器他仍在该洪流中
- 策略:稀缺优先计术:针对某一个对等方没有的块在它的邻居中决定最稀缺的块,然后请求这一些最稀缺的块是的能够更为迅速的重新发送。
- 对换算法
- 分布式散列表 Distributed Hash Table DHT
- 设计方法:为每一个对等方分配一个标识符,这个标识符是[0, 2^n - 1]范围的整数。每一个键也是同一范围内的一个整数
- 环形DHT:
- 解决的问题:规模的问题
- DHT可以被设计成每个对等方的邻居数量以及每个请求的报文数量可以均为O(logN)
- 对等方扰动:
- 解决的问题:对等方能够不加警示地到来和离去
- 每个对等方周期性的验证它的两个后继是存活的。
- TCP套接字编程
第三章 运输层(报文段)
- 运输层协议:
- 运行在不同主机上的应用程序之间提供了逻辑通信功能,从应用程序的角度看,通过逻辑通信,运行不同进程的主机好像直接相连一样。
- 报文段:应用层报文分段之后加报文头
- (解释)
- 把主机间交付扩展到进程间交付被称为运输层的多路复用与多路分解
- 多路复用与多路分解
- 多路分解(分发):在接收端,运输层检查报文段中的字段然后标识出接受套接字,进而将报文段定向到该套接字。将运输层报文段中的数据交付给i正确的套接字的工作。
- 多路复用(收集):在源主机从不同的套接字中收集数据块,为每个数据块封装上首部信息从而生成报文段,然后将报文段传递给网络层的工作
- 要求:
- 套接字有唯一标识符
- 每个报文段有特殊字段来只是该保温索要交付的套接字
- 源端口号字段与目的端口号字段
- 一个UDP套接字是用一个二元组来标识的,一个目的IP地址与一个目的端口号
- 一个TCP套接字是用一个四元组来标识的
6. Web服务器与TCP
3. UDP无连接运输
- UDP相比于TCP的好处:
- 应用层的控制更多、更为精细(比如实时应用通常要求最小的发送速率,不希望过分地延迟报文段的传送)
- 无需连接建立(这是DNS运行在UDP上的主要原因)(但是一些比较精确的报文段却是比较重要的)
- 无连接状态,可以支持更多的活跃用户
- 分组首部开销小。每个TCP报文段都有20字节的首部开销,而UDP仅有8字节
2. 使用UDP的应用是可以实现可靠数据传输的。这是通过应用程序自身建立可靠机制来完成的(例如,可通过增加确认与重传机制来实现)
3. 报文结构:
4. 检验和:(16位)
1. 求和回卷求反
2. 在接收方的检验是:将报文所有的比特相加(包括校验和),如果结果是111…111,则为正确,如果有0则表示分组出现差错
3. 原因:UDP必须在端到端基础上在运输层提供差错检测。-----端到端原则
4. 可靠数据传输原理
- **经完全可靠信道的可靠数据传输:**rdt1.0
- **具有比特差错信道的可靠数据传输:**rdt2.0
- ARQ自动重传请求:
要求的机制如下:
1. 差错检测:检验和
2. 接收方反馈:NAK与ACK,0表示NAK,1表示ACK
3. 重传
2. rdt2.0被称为停等协议
3. rdt2.0有一个致命的缺陷,也就是没有考虑到ACK与NAK分组受损的可能性
3. 解决上面rdt2.0的问题:rdt2.1
1. 将发送数据分组的序号放在该分组的字段中
2. 对于停等协议,只需要1个比特序号就好了---->造成状态数是rdt2.0的两倍
3. 显式发送NAK数据包
4. 如果不显式发送NAK数据包而是发送对上一次正确接受的分组的一个ACK,也能够实现与NAK一样的效果。也就是冗余ACK------rdt2.2
1. 发送方:
2.
3.
5. 经具有比特差错的丢包信道的可靠数据传输:rdt3.0**(比特交替协议)**
1. 解决的问题:丢包
2. 引入的机制:
1. 引入一个时间值,以判定可能发生了丢包------>产生重传-------->冗余数据分组
2. 定时器
3.
4. 各种情况
5. 流水线可靠数据传输协议
- 解决的问题:rdt3.0的性能问题的核心在于是一个停等协议
2. 流水线计数带来的新的要求:
1. 必须增加序号范围,
2. 协议的发送方和接收方两端必须缓存多个分组
3. 所需序号范围和对缓存的要求取决于数据传输协议如何处理丢失、损坏和延时过大的分组。方法有:GBN(go back n)与SR(selective Repeat)
6. 回退N步GBN(滑动窗口协议)
- 定义:
- 允许放松放发送多个分组而不需要等待确认
- 但是也受限于流水线中未确认的分组书不能够超过N
- 图示
3.
4. TCP序号是按照字节流中的字节进行计数的,而不是按分组计数的。
5. FSM
6. GBN发送方需要相应的三种类型的事件:
1. 上层的调用:rdt_send()时,要判断当前发送的窗口是否已经满
2. 收到一个ACK,采用的是累积确认
3. 超时事件,重新发送并重新计时
7. GBN接受方:当一个序号为n的分组被正确接收到并且是按序的,则为分组n发送一个ACK,否则则为最近的按需接收到的分组重新发送ACK并丢弃该分组
8. 问题:丢弃一个失序但是正确的分组是随后该分组的重传可能会丢失或者出错,因此甚至需要更多的重传。
9.
7. 选择重传(SR)
- 解决的问题:
- GBN协议中潜在地允许发送方用多个分组“填充流水线”,因此避免了停等协议中所提到的信道利用率问题。
- GBN本身也有一些情况存在着性能问题。尤其是当窗口长度和带宽时延积都很大时,单个分组的差错就会引起GBN重传大量的分组。
- 选择重传(SR)协议通过让发送方仅重传那些在接受方出错(即丢失或受损)的分组而避免的不必要的重传。
- 图示:
4. 发送方:
1. 从上层收到数据
2. 超时
3. 收到ACK
5. 接受方:分为三种情况进行处理(处理的范围是2*N,其余的情况全部忽略)
6. 可靠数据传输机制及其用途的总结
1. 检验和
2. 定时器
3. 序号
4. 确认、否认确认
5. 窗口、流水线
8. 面向连接的运输:TCP(后面的都是TCP的)
- 细节:
- TCP连接不是一条像电路交换网络中的端到端的TDM或者FDM电路
- TCP连接也不是一条虚电路.
- TCP协议旨在端系统中运行,不在中间的网络元素(路由器和链路层交换机)中运行,所以中间的网络元素不会维持TCP连接状态。
- TCP链接提供的是全双工服务
单工:简单的说就是一方只能发信息,另一方则只能收信息,通信是单向的。
半双工:比单工先进一点,就是双方都能发信息,但同一时间则只能一方发信息。
全双工:比半双工再先进一点,就是双方不仅都能发信息,而且能够同时发送。
5. TCP连接也总是点对点的,即在单个发送方与单个接收方之间的连接。
- 建立连接的过程:(三次握手)
- 所谓的三次握手及时对每次发送的数据量是怎么跟踪进行协商是数据段的发送和接收同步。根据所接收到的数据量而确定的数据确认数以及数据发送,接收完毕后何时撤销联系,并建立虚连接。
- SYN:同步序列编号
3. TCP在建立完连接之后可以从缓存中取出并放入报文段的数据数量受限于最大**报文段长度MSS,**MSS通常是根据最初确定的的有本地发送主机发送的最大链路层帧长度(也就是所谓的最大传输单元MTU来设置的。设置的MSS要保证一个TCP报文段(当封装在一个IP数据包中时,TCP/IP的首部长度为40字节,)加上TCP/IP首部适合单个链路层帧。MSS指的是报文段中应用层数据的最大长度,不包括TCP首部!!!!!
4. 传输数据的图示
9. TCP报文段结构
-
一些需要注意之处:MSS(MAximum Segment Size),当TCP发送一个大文件,例如某Web页面上的一个图像时,TCP通常对文件进行划分成长度为MSS的若干块。
-
接收窗口字段:用于流量控制(表示接受方愿意接收的字节的数量)
-
选项字段:该字段用于发送方与接收方协商最大报文段长度(MSS),或在告诉网络环境下用作窗口调节因子时使用,首部字段中还定义了一个时间戳选项。
-
6比特标志字段:
| 字段 | 功能 |
|:----|:----|
| ACK | 用于指示确认字段中的值是有效的 |
| RST、SYN、FIN | 用于连接的建立与拆除 |
| PSH | 被设置的时候表示接收方应立即将数据交给上层 |
| URG | 用来只是报文段中存在着被发送端的上层实体置为“紧急”的数据 | -
TCP序号和确认号
-
TCP报文段首部中两个最重要的字段是序号字段和确认号字段。TCP把数据看成一个无结构的、有序的字节流。我们从TCP的序号是建立在传送的字节流上,而不是建立在传送的报文段的序列之上。一个报文段的序号因此是该报文段首字节的字节流编号。
-
所以需要对原来的文件进行切割(如下,其中MSS为1000字节)
11. Telnet:
- 一个用于远程登陆的流行应用层协议。运行在TCP上,明文
- ACK的序号表示的是期待的序号
- 往返时间的估计与超时(TCP定时器的管理)
- TCP绝不为已被重传的报文段计算SampleRTT,他仅仅为传输一次的报文段测量SampleRTT.
- TCP会根据以下的公式来更新EstimatedRTT
EstimatedRTT = 0.875 * EstimatedRTT + 0.125 * Sample
3. 这种平均称为指数加权移动平均 EWMA (Exponential Weighted Moving Average)
4. 除了估算RTT外,测量RTT的变化也是有价值的。定义RTT偏差DevRTT,用于估算SampleRTT一般会偏离EstimatedRTT的程度。
DevRTT = (1 - b) * DevRTT + b * | SampleRTT - EstimatedRTT |
5. 设置和管理重传超时间隔
TimeoutInterval = EstimatedRTT + 4 * DevRTT (初始只推荐为1秒)
13. 可靠数据传输
- 推荐的定时器管理过程仅仅使用单一的重传定时器。即使有多个已发送但未确认的报文段。
- 三个主要的事件:
- 从上层接受数据(启动计时器)
- 超时(重启计时器)
- 来自接收方的确认报文段的到达
- 简化所带来的问题:
- 丢包现象的处理
- 超时所造成的问题
- 超时间隔加倍
- 在超时的时候进行翻倍
- 但是在其他的情况下(收到上层应用的数据和收到ack)中的任意一个启动时,使用前面的公式进行推算。
- 快速重传
- 超时触发重传存在的问题之一就是超时洲际可能相对较长。
- 冗余ACK
- 三次冗余ACK
- 重传机制
- TCP发送方仅仅需要维持已发送过但未被确认的字节的最小序号(选择确认)
- 流量控制
- 流量控制服务是一个速度匹配服务,也就是发送方的发送速率与接受方的应用程序读取速率相匹配。
- TCP通过让发送方维护一个称为接收窗口(receive windows)的变量来提供流量控制。接收窗口用于给发送方一个提示 – 该接收方还有多少可用的缓存空间。另外还有其他的变量。
3. 因为TCP不允许分配的缓存溢出,所以有以下的公式成立
LastByteRevd - LastByteRead <= RecvBuffer
其中接收窗口用rwnd表示,所以有rwnd = RecvBuffer - [LastByteRevd - LastByteRead]
4.
16. TCP连接管理
三次握手:(其中第二阶段的报文有时也称为SYNACK报文段)
四次挥手
17. 拥塞控制原理
**ATM (异步传递方式)网络 **
ABR (可用比特率)服务
- 拥塞的原因与代价:
- 情况1:两个发送方和一台具有无穷大缓存的路由器
2. 情况2:两个发送方和一台具有有限缓存的路由器
1. 两个速率:
1. 应用程序将初始数据发送到套接字中的速率
2. 运输层像网络中发送报文段的速率
2. 两种情况:
1. 不存在丢包现象
2. 存在丢包现象:
1. 网络拥塞所带来的另一个代价是发送方必须执行重传以补偿因为缓存溢出而丢弃(丢失)的分组。
2. 另一个代价是发送方在遇到大时延时所进行的不必要的重传会引起路由器利用其链路带宽来转发不必要的分组副本。
注意纵坐标是out,也就是有效的到达的
3. 4个发送方和具有优先缓存的多台路由器及多跳路径
1.
2. 可以看到另外一个拥塞导致的问题:一个分组沿一条路径被丢弃时,每个上游路由器由于转发该分组到丢弃该分组而使用的传输容量最终被浪费掉了。
2. 拥塞控制方法
1. 端到端的拥塞控制:原因如下
1. IP层不会向端系统提供有关网络拥塞的反馈信息
2. TCP报文段的丢失(超时或者三次冗余确认)被认为是网络拥塞的一个迹象,TCP会相应的减小器窗口长度
2. 网络辅助的拥塞控制
1. 两种方式:
1. 一种阻塞分组的形式,直接反馈信息发送给发送方
2. 路由器标记和更新从发送方流向接收方的分组中的某个字段来指示拥塞的产生。
3. ATM 、ABR拥塞控制
1. ATM **是一种采用面向虚电路VC的方法来处理分组交换的。**也就是从源到目的地路径上的每台交换机将维护有关源到目的地VC的状态。这样更有利于网络辅助拥塞控制的实现。
2. ATM的术语:
1. 交换机 (路由器)
2. 信源(cell) (分组)
3. 资源管理单元 (Resource-Management Cell) RM信元
3. 在两个交换机之间传递的时候夹杂着RM信元,可以用来提供直接网络反馈
4. ATM ABR拥塞控制是一种基于速率的方法。提供的机制有:
1. EFCI比特 (Explicit Forward Congestion Indication)显示转发拥塞指示(1表示拥塞)
2. CI 和 NI比特, Congestion Indication 拥塞指示比特 和 No Increase 无增长比特。
3. ER的设置, 显示速率(Explicit Rate, ER)
整个过程与细节:
18. TCP拥塞控制(端到端的拥塞控制)
- 在前面的流控制的基础上添加一个额外的变量,也就是拥塞窗口。表示为cwnd表示的未被确认的数据量不会超过cwnd与rwnd之间的最小值(注意是Sent与ACK)
2. 每一个RTT的起始点,只允许发送cwnd个字节,所以发送速率是cwnd/RTT字节/秒
3. TCP使用确认来出发(或计时)来增大cwnd长度。所以也被说成是自计时的.
4. 三个冗余ACK表示的是总共有4个ACK
5. 拥塞控制的FSM描述
6. 快速恢复:
1. 在早期的TCP Tahoe中没有快速恢复
2. TCPReno中综合了快速恢复
3.
7. 称为:加性增,乘性减(AIMD Additive Increase Multiplicative Decrease)
8. TCP吞吐量的宏观描述:
1. 一个高度简化的模型:
1. 当速率增长到W/RTT时,网络开始丢弃来自连接的分组,则会导致发送速率变成原来的一半,然后又开始增长,不断重复,所以
一条连接的平均吞吐量 = 0.75 * W /RTT
2.
证明:
9. 公平性:
1. 理想化情形中是公平的,但是有条件的:
1. 只有TCP连接穿过瓶颈链路,所有的连接具有相同的RTT值
2. 并且对于一个主机-目的地对而言只有一条TCP与之相关联
2. 实践中是不公平的:
1. 多个连接共享一个共同的瓶颈链路时,具有较小的RTT的连接能够在链路空闲时更快地抢到可用带宽(因为可以更快地打开拥塞窗口)
3. 现实中的UDP是没有拥塞控制的,这也就是UDP源可能压制TCP流量。
4. TCP应用可以使用多个并行连接,web应用十分常见。
第四章 网络层(协议栈的核心 core)
前面的都是协议栈的边缘
-
粗略的本章节内容
-
区分转发与路由选择功能
-
硬件体系结构和组织
-
分组转发(IP、IPv4)
-
网络地址转换(NAT)、数据报分段、因特网控制报文协议(ICMP)与IPv6
-
路由选择功能
-
路由选择算法的理论:
-
LS
-
DV
-
等级制路由选择方法
-
因特网的自治系统内部的路由选择协议(RIP、OSPF、IS-IS)
-
因特网的自治系统之间的路由选择协议(BGP)
-
转发与路由选择
-
两者的区别:
-
转发指的是单个路由器将分组有输入链路移动到适当的输出链路
-
三种内部结构
-
路由选择:指的是从全局中分组发送的路由或路径。
-
每一个路由器都具有一张转发表。路由器通过检查到达的分组首部字段的值来转发分组。
-
路由器接收路由选择协议报文,该信息被用于配置其转发表。
| 分组交换机(包含后面两个) | 链路层交换机 | 路由器 |
|:----|:----|:----|
| 分组交换设备 | 基于链路层字段中的值做转发决定的 | 其他的分组交换机,基于网络层字段中的值做转发决定的 | -
网络层的功能:
-
转发
-
路由选择
-
连接建立
-
因特网的网络层
-
尽力而为服务(best-effort service)
-
不同服务模型的比较
3. **ATM CBR (Constant Bit Rate)恒定比特率 **(电话公司)
4. ATM ABR 见课本207页以及前面的知识点
5. 虚电路与数据报网络(重要 与其他的层相区别)
- 虚电路网络:VC
- 例子:ATM 、帧中继 等体系结构
- 意义:仅在网络层提供连接服务的计算机网络
- 虚电路的组成:
- 源和目的主机之间的路径(即一系列链路和路由器)
- VC号,沿着该路径的每段链路的一个号码
- 沿着该路径的每台路由器中的转发表表项(VC转发表表项)
4. 创建一个新的虚电路,转发表就增加一个新的表项
5. 终止一条虚电路,沿着该路径的每个表的相应项就被删除
4. 虚电路的3个不同的阶段:
1. 虚电路建立(该阶段还可以预留带宽)
2. 数据传送
3. 虚电路拆除
5. 虚电路与运输层的连接建立的区别:
1. 运输层的连接仅仅设计两个端系统,而网络中的路由器对这些完全不知情
2. 而对于一个虚电路网络层,沿着两个端系统之间路径上的路由都要参与虚电路的简历,且每台路由器都完全知道经过它的所有虚电路。
6. 信令 signaling
2. 数据报网络
1. 例子:因特网
2. 不同之处:
1. 每个路由器中的每台都是用分组的目的地址来转发该分组。
2. 每台路由器有一个将目的地址映射到链路接口的转发表。
3. 最长前缀匹配原则:
4. 数据包网络中路由器不维持连接状态信息,但是需要维护转发表这一个转发状态信息。然而实际上变化的时间尺度比较慢,是通过前面的路由选择算法协议进行修改的,通常1-5分钟改一次。
3. 由来:
1. 虚电路与前面的电路交换类似,来源于电话界
2. 数据报则是因为高层已经实现,而且方便新主机的加入
6. 路由器工作原理(转发功能)
- 结构如下:
2. 四个结构:
1. 输入端口
1. 功能:
1. 一条输入的物理链路与路由器相连接的物理层功能
2. 需要与位于入链路远端的数据链路层交互的数据链路层功能
3. 查找功能,控制分组
2. 交换结构(路由器中的网络)
3. 输出端口
1. 双向的链路时,输出端口通常是与输入端口在同一线路卡上成对出现的
4. 路由选择处理器
3. 输入端口:
1. 在输入端口中执行的查找对于路由器的运行是重要的
2. 通常转发表的一份影子副本会被存放在每个输入端口。转发表从路由选择处理器经过独立总线复制到线路卡。也就上面图的虚线。
3. 有了影子副本,转发决策能够在每一个输入端口本地做出,无需调用中央路由选择处理器。避免了集中式处理的瓶颈。
4.
5. 由于查找表的速度要足够快,所以有了一个三态内容可寻址存储器(TCAM)用于查找。
6. 一系列在端口完成的操作:
1. 必须出现物理层与链路层处理
2. 必须检查分组的版本号、检验和以及寿命字段,并重写后面两个字段
3. 必须更新用于网络管理的计数器
4. 交换结构
1. 交换结构位于一台路由器的核心部位
2. 三种:
1. 内存:
1. 许多的现代路由器通过讲分组存储进适当的内存存储位置
2. 总线:
1. 每一时刻只能够传一个
3. 纵横式:
1. 可以同时传,除非通过端口输出
5. 路由器缓存的大小:
1. 线路前部阻塞(HOL),即在一个输入队列中排队的分组必须等待通过交换结构发送(即使输出端口时空闲的),因为她被位于线路前部的另一个分组所阻塞。
7. 因特网的网络层的三个主要组件:
- IP协议
- 路由选择部分,决定数据报的路径
- 报告数据包中的差错和对某些网络层信息请求进行相应的设施 ICMP
8. IP数据报格式(IPv4)
版本 | IPv4、IPv6 |
---|---|
首部长度 | 一般情况下是20 |
服务类型TOS | 将不同类型的IP数据报区分开(比如IP电话或者FTP什么的) |
数据报长度 | IP数据报的总长度 |
标识、标志、片偏移 | 用于分片机制 |
寿命TTL | 用于确保数据报不会永远在网络中循环(ICMP有用到) |
协议 | 表明应该交给哪个运输层协议 |
首部检验和 | 检验和(16位 2个字节) |
源和目的IP地址 | 通过DNS获取的IP地址 |
选项 | |
数据 | 该字段还可以承载ICMP报文 |
- IP数据报分片
- 原因:
- 在前面运输层有进行分段,但是因为不同链路的可能使用的是不同的链路协议,每种协议可能具有不同的MTU,所以需要进行IP的分片
- 组装数据报的工作放在端中而不是路由器中。
- 通过标识(identifier)、标志(flag)、以及片偏移来判断哪个是最后一片。
- 发送主机通常将为它发送的每个数据报的标识号加1
- 最后一片的标志比特为0
- 注意偏移是用8字节的背书进行计算的,规定8字节块为单位
5. 存在的问题:
1. 分片是有开销的,使得变得复杂
2. 其次是会引发攻击
3. 所以IPv6从根本上废止了分片
10. IPv4编址
- 接口、子网、子网掩码
- CIDR classless interdomain routing. 因特网的地址分配策略
- 分类编址 A、B、C 8、16、24
- 广播地址 255.255.255.255
- 获取一个地址块:根据每一个子网的规模进行分配
- 获取主机地址:动态主机配置协议 DHCP
- DHCP : Dynamic Host Configuration
- 除了主机IP地址分配外,DHCP还允许一台主机得知其他信息,比如子网掩码、它的第一跳路由器(常称为默认网关)与它的本地DNS服务器的地址。
- 即插即用协议
- 每个子网(将具有一个DHCP服务器,如果该子网没有服务器,则需要一个DHCP中继代理(通常是一个路由器))
5. DHCP的4个步骤:
1. DHCP发现的过程通过广播,也就是链路层将该帧广播到所有与该子网连接的子网。
2. DHCP提供,提供推荐的IP地址与网络掩码、IP地址租用期,通常是几个小时
3. DHCP请求,回显配置参数
4. DHCP ACK证实参数
12. 网络地址转化NAT
- NAT使能路由器对于外部世界来说甚至不像一台路由器。NAT路由器对外界的行为反过来就是如同一个具有单IP地址的单一设备
- NAT使能路由器对外界隐藏了家庭网络的细节
- NAT-DHCP:获取内部IP地址
- NAT转换表:
5. 有很多的缺点:
1. 端口号是用于进程编址而不是用于主机编址
2. 路由器通常仅应处理高达第三层的分组
3. NAT违反了端到端的原则(这样导致TCP不能建立)
4. 应该使用IPv6来解决IP地址短缺的问题
13. UPnP 通用即插即用
- UPnP是一种允许主机发现并配置邻近NAT的协议,同时要求主机与NAT都是UPnP兼容的。
- 使用UPnP,在主机上运行的应用程序能够为某些请求的公公端口号请求一个NAT映射。也就是(专用IP地址,专用IP端口号) 到 (公共IP地址,公共IP端口号)
- 示例:
14. ICMP 因特网控制报文协议
-
ICMP被主机和路由器用来批次沟通网络层的信息。最典型的用途是差错报告
-
ICMP通常被认为是IP的一部分,但从体系结构上是位于IP之上的。因为ICMP报文时承载在IP分组中的
-
ICMP报文:
-
常用的
| ICMP类型 | 编码 | 描述 |
|:----|:----|:----|
| 0 | 0 | 回显回答 |
| 8 | 0 | 回显请求 |
| 11 | 0 | TTL过期 |
| 3 | * | error | -
ICMP报文**另一个是源抑制报文,**也就是强制主机减少其发送速率
-
常用的也就是Traceroute程序
-
IPv6
-
| 主要变化 | |
|:----?:----|
| 扩大的地址容量 | 任播地址(anycast address)的新型地址,可以将数据报交付给任意一组主机中的任意一个 |
| 简化高效的40字节首部 | 更加高效(抛弃了很多的IPv4的标签) |
| 流标签和优先级 | 需要特殊处理的流,如一种非默认服务质量或者需要实时服务的流 |
| 版本 | 4个比特表示IP版本号 |
| 流量类型 | 与IPv4TOS类似 |
| 流标签 | 标识一条数据报的流 |
| 有效载荷长度 | 长度 |
| 下一个首部 | 表示的是交付给哪一个协议 |
| 跳限制 | 与TTL类似 |
| 源地址和目的地址 | |
| 数据 | |
| 分片/重新组装 | IPv6不允许在中间路由器上进行分片与重新组装,如果数据报太大则丢弃并返回一个分组太大的ICMP差错报文 |
| 首部检验和 | |
| 选项 | | -
一种用于IPv6的新版ICMP,新增的有:“分组太大”和“未识别的IPv6选项”
-
还包括后面的IGMP(管理主机加入和离开多播组)
-
从IPv4到IPv6的迁移
-
双栈方法
-
使用该方法的IPv6节点还具有完整的IPv4实现,这样的节点称为IPv6/IPv4节点,具有发送和接收IPv4和IPv6两种数据报的能力
-
可以通过DNS来判断节点是IPv6还是IPv4
-
但是就会丢失一部分IPv6特有的字段
2. 建隧道
1. 两台IPv6路由器之间的中间IPv4路由器的集合称为一个隧道
2. 将IPv6数据报直接放在IPv4的数据中
3. 图示:
17. 路由选择算法
-
背景知识:
-
默认路由器/第一跳路由器
-
将源主机的默认路由器称为源路由器,把目的主机的默认路由称为目的路由器
-
用图G = (N, E)表示
-
邻居
-
路径 最低费用路径 最短路径
-
理想化:
-
假设是无向图,同时双向的费用一样
-
路由选择算法的分类
| 全局/分散 | 全局式路由选择算法 | 链路状态算法 LS |
|:----?:----|:----|
| | 分散式路由选择算法 | 距离向量算法 DV |
| 静态/动态 | 静态 | 人工干预进行调整 |
| | 动态 | 能够随网络流量负载或拓扑变化而变化。 容易出现路由选择循环、路由震荡的问题 |
| 负载敏感/迟钝 | 敏感 | |
| | 迟钝 | RIP、OSPF、BGP | -
链路状态路由选择算法(复杂度:O(n^2))
-
使用链路状态广播算法完成
-
使用Dijkstra算法
-
特点:k次迭代后,可知道到k个目的结点的最低费用路径
-
使用的记号
3. 计算的过程
原图:
步骤:
产生的转发表
4. 出现的问题 — 链路振荡
1. 定义:链路费用等于链路的负载
2. 背景:非对称的,不是无向图
3. 图示 x、z输入1,y输入e
4. 解决方法:
1. 强制链路费用不依赖于所承载的流量(不太现实)
2. 确保并非所有的路由器都运行LS算法,让每台路由器发送链路通告的时间随机化。
19. 距离向量路由选择算法 DV RIP(routing information protocol)
- 特点:迭代的、异步的、分布式
- 使用的是Bellman-Ford公式
3. 其中v是x的所有邻居
4. 每个节点所需要维护的信息:
1. 对于每个邻居v,从x到直接相连邻居v的费用为c(x,v)
2. 结点x的距离向量,即x到N中所有目的地y的费用的估计值
3. 它的每个邻居的距离向量
5. 发送更新的条件:本身的距离向量发生了变化
6. 图示
7. 问题:链路费用改变与链路故障
1. 路由选择环路
2. 图示
8. 解决方法:增加毒性逆转
1. 也就是z如果通过y路由选择到目的地x,则z将通告y,z到x的距离是无穷大
2. 3个或者更多结点 的环路无法使用毒性逆转技术检测到
20. LS与DV路由选择算法的比较
算法 | LS | DV |
---|---|---|
报文复杂性 | O(N E) | 在新的链路费用变化时才广播 |
收敛速度 | O(N^2) | 比较慢 |
健壮性 | 比较好 | 比较差(分散式的) |
- 电路交换路由选择算法
- 层次路由选择
- 解决的问题:
- 规模:在规模大的时候LS与DV的收敛效果或者资源消耗都十分巨大
- 管理自治:因为每一个公司要求按自己的意愿运行路由器,或者对外部隐藏其网络中的内部组织面貌。
- 解决方式:将路由器组织进自治系统(Autonomous System。AS)来解决。
- Intra-antonomous system routing protocol:在一个自治系统内部运行的路由选择算法
网关路由器(gateway router)
4. inter-autonomous system routing protocol:在自治系统之间运行的路由选择算法 BGP4
转发表的生成
5. 热土豆路由选择
1. AS尽可能快地扔掉分组(热土豆)。这通过让路由向某网关路由器发送分组来完成。同时该网关路由器在到目的地路径上的所有网关路由器中最低的路由器到网关的费用
2. 具体步骤的图示如下
6. ISP与AS之间的关系
1. 某些第一层ISP对它们的整个网络使用一个AS,其他的ISP则将它们的ISP划分成数十个互联的AS。
23. RIP Routing Information Protocol 路由选择信息协议
- 简介
- RIP是一种距离向量协议。
- RIP版本使用跳数作为其费用测量,也就是每条链路的费用为1
- 为了简单起见,费用被定义在路由器对之间(实际上是从源路由器到目的子网)
有用的链接:
TCP流控制小程序: http://www.ccs-labs.org/teaching/rn/animations/flow/
三次握手与四次挥手以及一些问题:https://www.jianshu.com/p/9968b16b607e
TCP/IP之网络地址转换(NAT) : https://www.jianshu.com/p/83738ff01b8e
ICMP : https://blog.csdn.net/qq_37964547/article/details/80503760