第三章 传输层
博文为博主复习期末考试时做的的书本小笔记和大纲(书本为《计算机网络自顶向下方法》第六版),同时也部分参考了网上的资料
概述
1.网络层提供主机之间的逻辑通讯机制,传输层提供应用进程之间的逻辑通讯机制
2.基本理论和基本机制:
- 多路复用
- 可靠数据传输机制
- 流量控制机制
- 拥塞控制机制
3.TCP:面向连接的,可靠的,按序的交付服务,具有拥塞控制,流量控制。
4.UDP:不可靠的交付服务
多路复用/分用
1.一个进程有一个或者多个套接字,相当于从网络向进程传递数据和从进程向网络传递数据的门户。接收主机中的传输层实际上没有将数据交付给进程,而是交给一个中间套接字。由于接收主机中可能不止有一个套接字,所以每一个套接字都有唯一的标识符
2.接收端进行多路分解(demultiplexing):传输层依据头部信息将收到的segment交给正确的socket,即不同进程
3.发送端进行多路复用(multiplexing):从多个socket接收数据,为每块数据封装上头部信息,生成segment,交给网络层
4.多路复用要求:
- 套接字有唯一标识符
- 每一个报文段有特殊字段来指示该报文段所要交付到的套接字,如源端口号和目标端口号
5.UDP套接字是由一个二元组全面标识,该二元组包含一个目的ip地址和目的端口号()
6.TCP套接字是由一个四元组(源ip地址,源端口号,目的ip地址,目的端口)来标识
7.面向连接的分用:**多线程**web服务器
UDP
1.特点:
- 无连接
- 不可靠传输、尽力而为,发送的分组不保证一定按序到达
- 带有简单的差错检验,但是不可以实现差错恢复
- 优点:减少延迟,实现简单,头部开销小,可以更好控制发送速率和时间
2.UDP报文结构
3.*检验和(checksum):
可靠传输原理
可靠传输协议
1.rdt1.0:底层信道完全可靠
- 不会发生错误,不会丢弃分组
- 发送方和接收方的FSM独立
2.rdt2.X:经比特差错信道;引入的新机制就是差错检测,接收方反馈控制消息ACK/NAK,重传
- 确认机制ACK,NAK;如果收到NAK就会重传分组 -> rdt2.0
- rdt2.0的缺陷:ACK,NAK消息可能发生错误/被破坏 -> 重传,但是为了解决重复分组的问题,需要给每一个分组加上序列号 -> rdt2.1
- rdt2.2:没有NAK消息:因为只需要在ACK中加入确认的分组序列号
3.rdt3.0:比特差错的丢包信道的可靠数据传输
- 停等操作:信道可能发生错误,也可能丢失分组 -> 发送方等待合理的时间,如果没有收到ACK那么就重传 -> 需要定时器,但是停等操作让性能下降了
流水线可靠数据传输
1.流水线机制和滑动窗口机制
(1)发送多个分组
(2)需要更大的序列范围
(3)接收方和发送方需要更大的缓存
滑动窗口协议之GBN
1.base:最早的没有确认分组的序号
2.nextseqnum:最小的没有发送的序号
3.window size
4.累计确认机制:ACKn -> 确认到序列号n的分组均已经被正确接受
5.为每一个分组设置计时器
6.超时Timeout(n):重传序列号大于等于n(到窗口最右侧),还没有收到ACK的所有分组(因为接收方不会接收乱序的分组,不是现在需要的序号的分组都不会缓存起来)
7.接收方
- ACK:发送拥有最高序列号的、已经被正确接受的分组ACK,所以发送的ACK可能会有重复的
- 乱序到达的分组:直接丢弃,接收方不会缓存,重新确认序列号最大的、按序到达的分组的ACK
滑动窗口协议之SR
1.接收方对每一个分组单独进行确认,设置缓存机制(接收窗口),缓存乱序到达的分组
2.发送方只重传那些没有收到ACK的分组,因此需要为每一个分组设置一个计时器
TCP
1.特点
- 面向连接
- 可靠的,按序的字节流(可靠传输传输服务)
- 提供流量控制
TCP报文段
1.MSS(最大报文长度)限制了报文段数据字段的长度
2.结构
3.序号和确认号:TCP只确认该流中至第一个丢失字节为止的字节 -> 累积确认
往返时间估计和超时
1.测量SampleRTT,测量多个SampleRTT,求出平均值,形成RTT的估计值EstimatedRTT;RTT偏差DevRtt -> 计算出TimeoutInterval
可靠传输服务
1.tcp可靠数据传输
- 快速重传:重复收到ACK意味着某一个分组丢失,因此规定如果sender收到对同一数据的3个ACK,则假定该数据之后的段已经丢失了,使用快速重传 -> 在定时器过期之前就立刻重传丢失的报文段(ACK的序号)
- 既不是GBN也不是SR,两者的结合:TCP是累计式的,正确的接收但是失序的报文段是不会被接收方逐个确认的(像GBN),但是许多TCP的实现都会将正确接收但是失序的报文段缓存起来(偏向于SR)。而且,如果n报文超时,GBN会重传n…N,但是TCP的发送方只会重传至多一个n(类似SR)
流量控制
1.接收方为TCP连接分配Buffer,但是上层应用可能处理buffer中数据的速度较慢,这样子容易造成buffer溢出 -> 流量控制:发送方不会传输太多、太快以至于淹没接收方 -> 速度匹配机制:计算buffer中可用空间的大小,接收方通过在segment的头部字段将RevWindow(接收窗口)告诉sender,sender限制自己已经发送的但是还没有接受ACK的数据不超过接收方的空闲空间
连接管理
1.sender和receiver建立连接(三次握手)
- 客户端TCP向服务端发送一个特殊报文:SYN=1,seq=client_isn, Buffer
- 服务端提取SYN报文段,分配缓存和变量,返回报文:SYN=1,seq=server_isn,ack=client_isn+1
- 客户端:分配缓存和变量,发送另一个报文(对服务端的允许连续的报文段进行确认):SYN=0,seq=client_isn+1,ack=server_isn+1
2.关闭连接
- client向server发送TCP FIN=1的控制segment
- server收到FIN,回复ACK;然后再发送FIN=1的segment
- client收到FIN,回复ACK;进入等待 -> 如果收到FIN,就会重新发送ACK
- server收到ACK,关闭连接
拥塞控制(Congestion Controll)
1.通俗:太多发送主机发送了太多的数据或者发送速度太快以至于网络无法处理
2.表现:①分组丢失(路由器缓存溢出)②分组延迟过大(在路由器缓存中排队)
3.拥塞的成因和代价
4.拥塞控制的方法:
- 端到端拥塞控制:网络层不需要显示提供支持,端系统通过观察loss、delay等网络行为判断是否发生拥塞 -> TCP采用这种方法
- 网络辅助的拥塞控制:路由器向发送方显式反馈网络的拥塞信息,指定发送方应该采用何种速率
TCP拥塞控制
1.sender控制发送速率: LastByteSent-LastByAcked <= min{cwnd, rwnd},发送速率为cwnd/RTT
2.网络拥塞感知:丢包事件 -> timeout 或者收到3个重复ACK,此时sender会降低发送速率
3.下面介绍TCP拥塞控制算法,主要由3种
慢启动ss
1.cwnd的值以1个MSS开始并且每当传输的报文段首次被确认就增加一个MSS,呈指数增长
2.ssthresh = cwnd/2;出现丢包事件…看总结图
拥塞避免
1.