前言
本篇文章记录了我阅读《计算机网络自顶向下方法》第三章的笔记,概括总结了一些要点,其中详细记录了TCP三握两挥过程。
第三章
一.多路分解和多路复用
多路分解:将运输层报文段中的数据交付到正确的套接字的工作
多路复用:在源主机从不同套接字中收集数据库,并为每个数据块上封装上首部信息从而生成报文段,然后将报文段传递到网络层
UDP套接字:(目的IP地址,目的端口号)
TCP套接字:(源IP地址,源端口号,目的IP地址,目的端口号)
二.无连接传输UDP
UDP校验和
1.相加
2.溢出回滚
3.反码运算
接收方相加为111…1则未出错
三.可靠数据传输
1.rdt
rdt1.0:
rdt2.0:停等协议 (加了个ack 以及编号0 1)
rdt3.0:比特交替协议 (加了个计时器)
技术点校验和、序号、定时器、肯定与否定确认分组
2.流水线协议
1.回退N步(GBN/滑动窗口协议)
发送方:
累计确认 n:表明接收方已正确接收到序号为n的以前且包括n在内的所有分组
如果出现超时,发送方重传所有已发送但还未被确认过的分组。
仅使用一个定时器 如果收到一个ACK,但仍有已发送但未被确认的分组,则定时器被重新启动
接收方:
丢弃所有失序分组
技术点:使用序号、累计确认、检验和、超时/重传
只需维护一个信息:下一个按序接收的分组的序号 保存在expectedseqnum中
2.选择重传(SR)
让发送方仅重传那些他怀疑在接收方出错的分组而避免不必要的重传
窗口长度必须小于或等于序号空间大小的一半
四.面向连接的传输TCP
1.TCP报文段结构
序号:数据字段首字节的序号
确认号:主机正在等待的数据的下一个字节序号
2.往返时间的估计与超时
2.1SampleRTT均值(EstimatedRTT)
EstimatedRTT=(1-a)·EstimatedRTT+a·SampleRTT a推荐设为0.125
2.2RTT偏差DevRTT
DevRTT=(1-b)·DevRTT+b·|SampleRTT-EstimatedRTT| b推荐设为0.25
2.3重传超时间隔
TimeoutInterval=EstimatedRTT+4·DevRTT
3.定时器
只有一个定时器 与最早未被确认的报文段相关联
超时重传具有最小序号的还未被确认的报文段
4.超时间隔加倍
超时事件发生,每次TCP重传都会将下一次的超时间隔设为先前值得两倍(指数增长),直到收到上层应用数据或收到ACK时恢复正常计算值
5.快速重传
在该报文段的定时器过期之前,若收到3个冗余ACK,TCP执行快速重传
6.TCP的差错恢复机制是GBN和SR的混合体
7流量控制
7.1让发送方维护一个称为接收窗口rwnd(该接收方还有多少可用的缓存空间)的变量来提供流量控制
接受方:rwnd=RcvBuffer-[LastByteRcvd-LastByteRead]
发送方:LastByteSent-LastByteAcked<=rwnd
7.2当接收方B的接收窗口为0时,发送方A继续发送只有一个字节数据的报文段。这些报文段将会被接收方确认。最终缓存将开始清空,并且确认报文里将包含一个非0的rwnd值
8.TCP连接管理
8.1建立连接(3次握手)
第一步:
客户TCP——>服务器
发送SYN报文段(不含应用层数据):
- SYN比特置为1
- 随机选择一个初始序号client_isn,放于序号字段
第二步:
一旦包含TCP SYN报文段的IP数据报到达,服务器提取数据报并为TCP连接分配TCP缓存和变量(易受称为SYN洪泛的拒绝服务攻击)
服务器——>客户TCP
发送SYNACK报文段(不含应用层数据):
- SYN比特置为1
- 确认字段置为client_isn+1
- 随机选择初始序号server_isn。放于序号字段
第三步:
收到SYNACK报文段后,客户为该连接分配缓存和变量
客户TCP——>服务器
对服务器允许连接的报文段进行确认(可在报文段负载中携带客户到服务器的数据)
- SYN置为0
- 确认字段置为server_isn+1
8.2终止连接(两次挥手)
双方都可以主动终止连接
第一步:
客户TCP——>服务器
发送关闭连接命令/终止报文段 FIN比特置为1
第二步:
服务器——>客户TCP
发送确认报文段
第三步:
服务器——>客户TCP
发送终止报文段 FIN比特置为1
第四步:
客户TCP——>服务器
发送确认报文段
连接结束后,用于连接的所有资源(缓存和变量)都被释放
8.3TCP状态
在一个TCP连接的生命周期内,运行在每台主机中的TCP协议在各种TCP状态之间迁移
五.拥塞控制原理
1网络拥塞的征兆:
分组重传
2.拥塞的代价
- 当分组的到达速率接近链路容量时,分组经历巨大的排队时延
- 发送方必须执行重传以补偿因为缓存溢出而丢弃(丢失)的分组
- 发送方在遇到大时延时所进行的不必要重传会引起路由器利用其链路带宽来转发不必要的分组副本
- 当一个分组沿一条路径被丢弃时,每个上游路由器用于转发该分组到丢弃该分组而使用的传输容量最终被浪费掉了
3.拥塞控制方法
3.1端到端拥塞控制
网络层不为运输层拥塞控制提供显式支持,端系统通过对网络行为(如分组丢失和时延)的观察来推断
3.2网络辅助的拥塞控制
路由器向发送方提供关于网络中拥塞状态的显式反馈信息
- 直接网络反馈(路由器)
- 经由接收方的网络反馈
六.TCP拥塞控制
采用端到端拥塞控制
1.拥塞窗口cwnd
cwnd:拥塞窗口,对一个TCP发送方能向网络中发送流量的速率进行了限制
rwnd:接收窗口,该接收方还有多少可用的缓存空间
LastByteSent-LastByteAcked(未被确认的数据量)<=min{cwnd,rwnd}
发送速率≈cwnd/RTT字节/秒
2.TCP拥塞控制算法
2.1慢启动
TCP连接开始时,初始cwdn=1MSS
每收到一个ACK确认 cwdn*=2 (指数增长)
慢启动结束:
- 由超时指示的丢包事件(拥塞)
- 慢启动阈值sstresh=cwnd/2
- cwnd=1 重新开始慢启动(✖2)
- cwnd>=sstresh 转移到拥塞避免模式(➕1)
- 监测到3个冗余ACK
- 快速重传并进入快速恢复状态
2.2拥塞避免
开始:到达一个新的确认,cwnn+=1MSS
结束:
- 超时
- sstresh=cwnd/2
- cwnd=1
- 三个冗余ACK事件
- csstresh=cwnd/2
- cwnd=csstresh+3
2.3快速恢复
收到一个冗余ACK cwnd=cwnd+MSS
出现3个冗余ACK事件时 cwnd=cwnd/2
2.4个人总结:
- 超过慢启动阈值+1 否则×2
- 超时cwnd=1 三个冗余ACK cwnd=cwnd/2
3.对TCP吞吐量的宏观描述
一条连接的平均吞吐量=0.75W/RTT W:丢包事件发生时的窗口长度
4.公平性
- 具有较小RTT的连接能够在链路空闲时更快地抢到可用带宽
- 当应用运行在UDP上时,能够以恒定地速率将音频和视频数据注入网络之中,不会在拥塞时降低发送速率(对TCP来说不公平)
- 当一个应用使用多条并行连接时,占用拥塞链路中较大比例的带宽
总结
刚开始觉得啃大部头黑书好生涩困难,放弃了转去看中科大郑老师的网课
链接: 中科大郑烇、杨坚全套《计算机网络(自顶向下方法 第7版,James F.Kurose,Keit…。看过一次网课后再阅读教材,感觉通畅顺利了不少,而且网课与教材互为补充,强烈建议大家结合网课和黑书一起学习。