应用层协议
知识点
- 传输层服务的基本原理
- 复用/解复用
- 可靠数据传输
- 流量控制
- 拥塞控制
- Internet的传输层
- UDP
- TCP
UDP协议
- 校验字段:将内容视为16位整数,将所有整数相加,进位加在和的后面,得到的值按位求反
- 优点:
- 无需建立连接(减少延迟)
- 实现简单,无需维护连接状态
- 头部开销较小(udp8字节,tcp20字节)
- 没有拥塞控制:应用可更好地控制发送时间和速率
可靠数据传输协议
- 什么是可靠:不错,不丢,不乱
- 信道的不可靠特性决定了可靠数据传输协议(RDT)的复杂性
Rdt2.0:解决数据出错的问题
- ACK/NAK校验和纠错
Rdt2.1:解决ACK/NAK出错的问题
- 为ACK/NAK增加检验和,检错纠错
- 采用ACK/NAK错误重传
- 使用两个序列号0/1防止重复数据
Rdt2.2:优化
- 可以采用ACK+序列号代替NAK,从而去掉NAK
Rdt3.0:解决数据丢失的问题
- 等待一个合理时间,如果没收到ACK则重传
效率极低
流水机制和滑动窗口协议
- 为了解决RDT效率低的问题
- 允许发送方在收到ACK前连续发送多个分组
- 需要更大的序列号范围
- 发送方和/或接收方需要更大的储存空间以缓存分组
- 滑动窗口协议:Sliding-window protocol
Go-Back-N协议
-
分组头部包含k-bit序列号
-
窗口尺寸为N,最多允许N个分组未确认
-
ACK(n):确认收到序列号n(包含n)的分组均已被正确接收
- 可能重复收到ACK
-
为空中的分组设置计时器(timer)
-
超时Timeout(n)事件:重传序列号大于等于n,还未收到ACK的所有分组
潜在存在资源浪费
-
ACK机制:发送拥有最高序列号、已被正确接收的分组的ACK
- 可能产生重复ACK
- 只需记住唯一的expectedseqnum(期待的序列号)
-
乱序到达的分组:
- 直接丢弃→接收方没有缓存
- 重新确认序列号最大的、按序到达的分组
Selective Repeat协议
- 接受对方每个分组单独进行确认
- 设置缓存,缓存乱序到达的分组
- 发送方只重传那些没收到ACK的分组
- 为每个分组设置定时器
- 发送方窗口
- N个连续的序列号
- 限制已发送且未确认的分组
TCP协议
概述
- 点对点
- 一个发送方,一个接收方
- 可靠的、按序的字节流
- 流水线机制
- TCP拥塞控制和流量控制机制设置窗口尺寸
- 发送方/接收方缓存
- 全双工(full-duplex)
- 同一连接中能够传输双向数据
- 面向连接
- 通信双方在发送数据之前必须建立链接
- 连接状态只在连接的两端维护,在沿途的节点中并不维护状态
- TCP连接包括:两台主机上的缓存、连接状态变量、socket等
- 流量控制机制
结构
序列号和ACK
-
序列号
- 序列号指的是segment中第一个字节的编号,而不是segment的编号
- 建立TCP连接时,双方随即选择序列号
-
ACKs
- 希望接收到的下一个字节的序号
- 累计确认:该序列号之前的所有字节均已被正确接收到
-
乱序到达的协议中没有规定,交给开发者实现
RTT和超时
- sample RTT:测量从段发出去到收到ACK的时间
- 忽略重传
- sample RTT变化
- 测量多个sample RTT,求平均值,形成RTT的估计值EsimatedRTT
快速重传机制
- 通过重复ACK检测分组丢失
- sender会背靠背地发送多个分组
- 如果分组丢失,可能会引发多个重复的ACK
- 如果sender收到对同一数据的3个ACK,则假定该数据之后的段已经丢失
- 快速重传:在定时器超时之前即进行重传
流量控制
- 将剩余缓存空间大小放在头部发送给sender
- 流量控制是不要让个体数据发送太快让对方处理不了
拥塞控制
-
表现
- 分组丢失(路由器缓存溢出)
- 分组延迟过大(在路由器缓存中排队)
-
拥塞控制是群体不要发送太快让网络承受不了
-
方法:
- 端到端拥塞控制:
- 通过观察loss,delay等网络行为判断是否发生拥塞
- 不需要显示地提供支持
- TCP采用这种方式
- 网络辅助的拥塞控制:
- 路由器向发送方显式地反馈网络拥塞信息
- 简单点拥塞指示(1bit):SNA,DECbit,TCP/IP ECN,ATM
- 端到端拥塞控制:
TCP的拥塞控制
网络层
核心功能
- 从发送主机向接收主机传送数据(segment)
- 发送主机:将数据段封装到数据报(datagram)中
- 接收主机:向传输层交付数据段(segment)
- 每个主机和路由都运行网络层协议
- 路由器校验所有穿越它的IP数据报的头部域
- 决策如何处理IP数据报
转发与路由
-
每个路由器维护一个转发表
连接建立
- 数据分组传输之前,两端主机需要首先建立虚拟/逻辑连接
- 网络设备(如路由器)参与连接的建立
- 网络层连接与传输层连接的对比:
- 网络层连接:两个主机之间(路径上的路由器等网络设备参与其中)
- 传输层连接:两个应用进程之间(对中间网络设备透明)
网络层连接模型
无连接服务(connection-less service)
- 不事先为系列分组的传输确定传输路径
- 每个分组独立确定传输路径
- 不同分组可能传输路径不同
- **数据报网络 ** (datagram network)
连接服务(connection service)
- 首先为系列分组的传输确定从源到目的的经过的路径(建立链接)
- 然后沿该路径(连接)传输系列分组
- 系列分组传输路径相同
- 传输结束后拆除连接
- 虚电路网络 (virtual-circuit network)
虚电路网络
- 一条从源主机到目的主机,类似于电路的路径(逻辑链接)
- 分组交互
- 每个分组的传输利用链路的全部带宽
- 源到目的路径经过的网络层设备共同完成虚拟电路功能
通信过程
- 呼叫建立(call setup)→数据传输→拆除呼叫
- 每个分组携带虚电路标识(VCID),而不是目的的主机地址
- 虚电路经过的每个网络设备(如路由器),维护每条经过它的虚电路状态连接
- 链路、网络设备资源(如带宽、缓存等)可以面向VC经行预分配
- 预分配资源=可预期服务性能
- 如ATM仿真电路(CBR)
VC具体实现
- 每条虚电路包括:
- 从源主机到目的主机的一条路径
- 虚电路号(VCID),沿路每段链路一个编号
- 沿路每个网络层设备(如路由器),利用转发表记录经过的每条虚电路
- 沿某条虚电路传输分组,携带对应虚电路的VCID,而不是目的地址
- 同一条VC,在每段链路上的VCID通常不同
- 路由器转发分组时,依据转发表改写/替换虚电路号
虚电路信令协议(signaling protocols)
- 用于VC的建立、维护与拆除
- 路径选择
- 应用于虚电路网络
- 如ATM、帧中继(frame-relay)网络等
- 目前Internet不采用
数据报网络
- 网络层无连接
- 每个分组携带目的的地址
- 路由器根据分组的目的地地址转发分组
- 基于路由协议/算法构建转发表
- 检索转发表
- 每个分组独立选路
- 在检索转发表时,优先选择与分组目的地址匹配前缀最长的入口(entry)
数据报网络与VC网络对比
Internet(数据报网络)
- 计算机之间的数据交换
- “弹性”服务,没有严格时间需求
- 链路类型众多
- 特点、性能各异
- 统一服务困难
ATM(VC网络)
- 电话网络演化而来
- 核心业务是实时对话:
- 严格的时间、可靠性需求
- 需要有保障的服务
- “哑(dumb)”端系统(非智能)
- 电话机
- 传真机