## 第三章小结
### 运输层的作用(多路复用和多路分解)
将两个端系统间IP的交付服务扩展为运行在端系统上两个进程之间的交付服务,即运输层的多路复用和多路分解;保证数据的正确性;实现可靠数据传输;拥塞控制。
### TCP 三次握手和四次挥手
**三次握手**:
* 客户端发送一个请求建立连接的报文给服务端。
* 服务端接收到请求报文,为连接分配缓存和变量,并返回一个确认报文。
* 客户端接收到 SYNACK 报文,为连接分配缓存和变量,并返回一个确认报文。
**为什么要三次握手**:主要目的防止server端一直等待,浪费资源。

**四次挥手**:
* 主动关闭方发送一个 FIN,用来关闭主动方到被动关闭方的数据传送。
* 被动关闭方收到 FIN 包后,发送一个 ACK 给对方。
* 被动关闭方发送一个 FIN,用来关闭被动关闭方到主动关闭方的数据传送。
* 主动关闭方收到 FIN 后,发送一个 ACK 给被动关闭方。
**为什么要四次挥手**:由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。
* 当主动方请求关闭TCP连接,向被动方发送一个FIN。
* 被动方接受到关闭请求,会立即回复一个ACK,**以防主动方重复的发送关闭请求**,然后通知应用进程。
* 应用进程确认后,被动方会发送一个FIN到主动方。
* 主动方回复一个ACK给被动方。
### TCP 和 UDP 报文头格式
* TCP报文头格式:首部9个字段,2个字节的源端口号和目的端口号,4个字节的确认号(解决不丢包的问题)和序列号(解决网络包乱序问题), 4个比特首部长度和6个比特的标志字段(剩余6个比特为保留字段),2个字节的接收窗口(解决流控)、因特网效验和和紧急指针。
* UDP报文头格式:首部仅4个字段,每个字段两个字节,源端口号、目的端口号、长度和检验和,一共八个字节。
### TCP 和 UDP 的区别
* TCP提供面向连接的、可靠的数据流传输;而UDP提供的是非面向连接的、不可靠的数据流传输。
* TCP面向字节流,UDP面向报文。
* TCP注重数据安全性,UDP数据传输快。
* TCP提供拥塞控制,而UDP没有。
* TCP首部开销20字节,UDP的首部开销小,只有8个字节。
使用TCP的应用层协议:HTTP、Telnet、SMTP;使用UDP的应用层协议:DNS、TFTP。
### TCP SYN泛洪攻击
SYN泛洪攻击(SYN Flood Attack):发送大量的SYN报文请求建立连接,而不完成第三次握手,导致服务器不断为半开连接分配资源直至资源耗尽。
### TCP 重传机制
TCP要保证所有的数据包都可以到达,所以,必需要有重传机制。而在TCP协议中接收端给发送端的Ack确认只会确认最后一个连续的包。例如发送端发送了1-5一共5份数据包,接收端收到了1和2,于是回复Ack=2,然后又收到了4,但是3还未收到。
**超时重传机制**:死等3,当发送方发现收不到3的ack超时后,会重传3。一旦接收方收到3后,会回复Ack=4,意味着3和4都收到了。而对于发送方,重发数据有两种选择:
* 仅重传timeout的包,这种方法节省带宽,但是慢,需要等待接收方的确认。
* 重传timeout后面所有的包,这种方法虽然较快,但是浪费带宽。
**快速重传机制**:发送端收到了三个Ack=2的确认后,知道3发送失败,会重新发送3。
**SACK 方法**:在TCP头里加一个SACK的东西,ACK还是Fast Retransmit的ACK,SACK则是汇报收到的数据碎版。

### TCP 如何保证可靠数据传输
滑动窗口协议:滑动窗口协议是传输层进行流控的一种措施,它允许发送方在停止并等待确认前发送多个数据分组。发送窗口大小 swnd = min\(rwnd, cwnd\),其中 rwnd 为接收窗口大小,cwnd 为拥塞窗口。(例:连续ARQ协议)
拥塞控制:
* 慢启动状态(Slow-start):初始 cwnd 值较小,为一个最大报文段(MSS)大小。
* 每接收到一个确认报文,cwnd 增加一个的MSS,即无拥塞状态下指数增长;
* 当 cwnd 大于等于 ssthresh 时,慢启动模式停止,进入拥塞避免模式;
* 出现丢包事件,采用快速重传机制;
* 检测到3个冗余ACK,采用快速恢复机制;
* 拥塞避免状态:每个 RTT 只将 cwnd 增加一个 MSS,线性增加。
* 出现丢包事件,采用快速重传机制;
* 检测到3个冗余ACK,采用快速恢复机制;
* 快速重传机制:ssthresh=cwnd/2,cwnd=1,进入慢启动状态。
* 快速恢复机制:ssthresh=cwnd/2,cwnd=ssthresh,进入拥塞避免状态。
### TCP 协议中的 KeepAlive
为什么要 KeepAlive:链接建立之后,如果应用程序或者上层协议一直不发送数据,或者隔很长时间才发送一次数据,当链接很久没有数据报文传输时如何去确定对方还在线,到底是掉线了还是确实没有数据传输,链接还需不需要保持,这种情况在 TCP 协议设计中是需要考虑到的。
KeepAlive:当超过一段时间之后,TCP自动发送一个数据为空的报文给对方,如果对方回应了这个报文,说明对方还在线,链接可以继续保持,如果对方没有报文返回,并且重试了多次之后则认为链接丢失,没有必要保持链接。
- 介绍
- 第一章 计算机网络和因特网
- 1.1 什么是因特网
- 1.2 网络边缘
- 1.3 网络核心
- 1.4 分组交换网中的时延、丢包和吞吐量
- 1 .5 协议层次及其服务模型
- 1.6 面对网络攻击
- 1 .7 计算机网络和因特网的历史
- 第二章 应用层
- 2.1 应用层协议原理
- 2.2 Web 和 HTTP
- 2.3 文本传输协议:FTP
- 2.4 因特网中的电子邮件
- 2.5 DNS:因特网的目录服务
- 2.6 P2P应用
- 2.7 套接字编程
- 第三章 运输层
- 3.1 概述和运输层服务
- 3.2 多路复用与多路分解
- 3.3 无连接运输:UDP
- 3.4 可靠数据传输原理
- 3.5 面向连接的运输:TCP
- 3.6 拥塞控制原理
- 3.7 TCP拥塞控制
- 第四章 网络层
- 4.1 概述
- 4.2 虚电路和数据报网络
- 4.3 路由器工作原理
- 4.4 网际协议:因特网的转发和编址
- 4.5 路由选择算法
- 4.6 因特网中的路由选择
- 4.7 广播和多播路由选择
- 第五章 链路层:链路、接入网和局域网
- 5.1 链路层概述
- 5.2 差错检测和纠正技术
- 5.3 多路访问链路和协议
- 5.4 交换局域网
- 5.5 链路虚拟地址:网络作为链路层
- 5.6 数据中心网络
- 5.7 回顾:WEB页面请求的历程
- 第六章 无线网络和移动网络
- 6.1 概述
- 6.2 无线链路和网络特征
- 6.3 WiFi:802.11 无线LAN
- 6.4 蜂窝因特网接入
- 6.5 移动管理:原理
- 6.6 移动IP
- 6.7 蜂窝网中的移动性管理
- 第七章 多媒体网络
- 7.1 多媒体网络应用
- 7.2 流式储存视频
- 7.3 IP语音
- 7.4 实时会话式应用的协议
- 7.5 支持多媒体的网络
- 第八章 计算机网络中的安全
- 8.1 什么是网络安全
- 8.2 密码学的原则
- 8.3 报文完整性和数字签名
- 8.4 端点鉴别
- 8.5 安全电子邮件
- 8.6 使用TCP连接安全:SSL
- 8.7 网络层安全性:IPsec和虚拟专用网
- 8.8 使无线LAN安全
- 8.9 运行安全性:防火墙和入侵检测系统
- 第九章 网络管理
- 9.1 什么是网络管理
- 9.2 网络管理的基础设施
- 9.3 因特网标准管理框架
- 9.4 ASN.1
- 总结
- c.1 第一章小结
- c.2 第二章小结
- c.3 第三章小结
- c.4 第四章小结
- c.5 第五章小结
