传输层的基本理论和基本机制
Internet的传输层协议
传输层的服务和协议
传输层协议为运行在不同HOST(主机 / 端)上的进程之间提供了一种逻辑通信机制
逻辑通信机制
两个进程之间仿佛是直接连接的,它不需要关心这中间有多远的物理距离、经过了多少个路由器、使用了哪些物理层的媒介
端系统上运行传输层协议的作用
发送方:将应用递交的消息/报文分成一个或多个的Segment(段),并向下传给网络层
接收方:将接收到的Segment(段)组装成消息/报文,并向上交给应用层
传输层和网络层的异同
网络层:提供主机之间的逻辑通信机制
传输层:提供进程间的逻辑通信机制
发送端进行多路复用
从多个Socket接收数据,为每块数据封装上头部信息,生成Segment,交给网络层
接收端进行多路分用
传输层依据头部信息将收到的Segment交给正确的Socket,即不同的进程
tips:Socket是应用层和传输层之间的“门”
主机接收到IP数据报(datagram)
主机接受到Segment后,传输层协议提取IP地址和端口号信息,将Segment导向相应的Socket
接收端利用端口号创建Socket
UDP的Socket用二元组标识
主机收到UDP段后
TCP的Socket用四元组标识
接收端利用所有的四个值将段导向合适的Socket
服务器可能同时支持多个TCP的Socket
Web服务器为每个客户端开不同的Socket
UDP协议在Internet IP协议(网络层)的基础上,做了以下扩展:
UDP的服务模型:
UDP是用户数据报协议,是无连接的:
UDP的优点:
UDP的应用:
如何在UDP上实现可靠数据传输:
UDP校验和(checksum)
可靠:不错、不丢、不乱
rdt(Reliable Data Transfer):可靠数据传输
可靠数据传输协议的基本结构:接口
注意图中的单向数据传输和双向信息流动箭头
网络层的IP协议是不可靠的
利用有限状态机(FSM)刻画传输协议
可靠信道上的可靠数据传输(过于理想)
底层信道完全可靠
发送方和接收方的FSM独立
只产生位错误(0和1),不产生其他错误(数据不丢失,数据按序到达)的信道。
底层信道可能翻转分组中的位(bit)
如何从错误中恢复:
基于这种重传机制的rdt协议称为ARQ(Automatic Repeat request)协议
rdt2.0中引入的新机制
rdt2.0的缺陷:ACK/NAK可能发生错误/被破坏
解决办法:
如何解决重复分组问题:
无NAK消息协议
与rdt2.1功能相同,但是只使用ACK不使用NAK
如何实现:
发送方收到重复ACK之后,采取与收到NAK消息相同地动作
信道既可能发生错误,也可能丢失分组
如果分组在发送方到接收方过程中丢失,接收方会一直等待;如果ACK在接收方到发送方过程中丢失,发送方会一直等待
rdt2.X中的校验和+序列号+ACK+重传方法无法解决该问题
解决方法:发送方等待“合理”时间
性能分析:
rdt3.0是一个停等操作
流水线机制
如果允许发送方在收到ACK之前连续发送多个分组就需要:
滑动窗口协议
滑动窗口协议:Sliding-windows protocol
窗口:
滑动窗口:
滑动窗口协议:GBN、SR
GBN(Go-Back-N)协议
GBN中乱序到达的分组直接丢弃
SR中乱序到达的分组进行缓存
SR(Selective Repeat)协议
GBN的缺陷:
重传时会重传很多分组
SR协议的改进:单个确认、不丢弃乱序分组
接受方对每个分组单独进行确认
发送方只重传那些没收到ACK的分组
发送方窗口
发送方窗口/接收方窗口
TCP提供的是点对点的通信机制
TCP提供的是可靠的、按序的字节流传输机制。
TCP使用了流水线机制,提高了可靠传输的性能
TCP在发送方和接收方都有缓存
TCP是面向连接的传输协议
TCP是全双工的传输机制,连接的双方都要管理和维护连接,通过连接可以实现双向数据流传输
在传输层,我们研究和处理的是Segment.
源端口号、目的端口号、序列号、ACK序列号、紧急数据、ACK是否有效、立刻推送数据、连接的建立和拆除、接受窗口大小(字节大小)、校验和
TCP段中的序列号(sequence number)和ACK number不是段的编号,而是用数据的字节数来计数。
序列号(sequence number)
序列号指的是segment中第一个字节的编号,而不是segment的编号。
有1k字节的数据拆成两个segment,第二个segment的序列号不是2或1,而是500或501,是字节的编号,而不是segment的个数编号
疑问:为什么要这么做?
建立TCP连接时,双方随机选择开始的序列号。
ACK number
希望接受到的下一个字节的序列号
累计确认:该序列号之前的所有字节均已被正确接收到(GBN)
TCP介于GBN和SR之间,偏向SR
乱序到达的分组由TCP实现者决策
Round-Trip Time:往返时间
设置定时器的超时时间
如何估计RTT
为什么要控制流量:
接收方为TCP连接分配缓存(buffer)
上层应用如果处理buffer中数据的速度较慢,可能会产生buffer溢出
流量控制(flow control)
控制发送方不会传输的太多太快以至于淹没接收方
流量控制机制原理
TCP是面向连接的传输协议,所以在进行数据传输之前要建立连接,数据传输完成后要关闭连接。这就需要用到连接管理。
三次握手即建立连接的三个阶段
定义:太多发送主机数据太多,网络无法处理
表现:
研究对象是网络
流量控制vs拥塞控制
流量控制:控制发送方不要发送的太快,以至于接收方处理不了
拥塞控制:控制发送方不要发送的太快,以至于网络处理不了
限制发送方的发送速率
r a t e = C o n g W i n R T T rate = \frac{CongWin}{RTT} rate=RTTCongWin
单位:Bytes/sec
CongestionWindow:拥塞窗口
如何感知网络拥塞
如何合理地调整发送速率
加性增——乘性减:AIMD
慢启动:SS
**原理:**逐渐增加发送速率,谨慎探测可用带宽,直到发生loss
**方法:**AIMD
**原理:**当连接开始时,指数性增长
指数性增长:
每个RTT将CongWin翻倍
收到每个ACK进行操作
初始速率很慢,但是快速攀升
何时将指数增长切换为线性增长(拥塞避免)
当CongWin达到Loss事件前值的1/2时
实现方法
3个重复ACK
Timeout事件
3个重复ACK表示网络还能传输一些segments
timeout事件表明拥塞更为严重
传输层服务的基本原理
Internet的传输层