## 3.5 面向连接的运输:TCP
### 3.5.1 TCP连接
TCP是面向连接的(Connection-oriented),TCP协议的连接状态只维护在两个端系统中。TCP连接是全双工服务(Full-duplex Service\)和点对点(Point-to-Point)服务。
每次发送报文,连接均从发送缓存(Send Buffer)中取出受限于最大报文长度(Maximum Segment Size,MSS)的报文数据,MSS的取值取决于最大传输单元(Maximum Transmission Unit,MTU)。
TCP会为每一个传输单位加上一个TCP首部,使其成为TCP报文段(TCP Segment)。

### 3.5.2 TCP报文段结构
* 16 bit源端口号和16 bit 目的端口号
* 32 bit序号(Sequence Number Field)和32 bit 确认号(Acknowledgment Number Field):用于实现可靠传输,序列号为发送方的分组序列,确认号为确认之前的分组是否被成功接收
* 16 bit 接受窗口字段(Receive Window Field):用于流量控制
* 4 bit 首部长度(Header Length Field):TCP首部长度可变
* 可选可变长的选项字段(Options Field):协商最大报文长度MSS
* 6 bit 标志字段(Flag Field):
* ACK 确认字段值有效
* RST、SYN、FIN:连接建立和拆除
* PSH:数据直接上角应用层
* URG:报文中是否存在紧急数据
* 16 bit 紧急数据指针:用于指向紧急数据

### 3.5.3 往返时间估计与超时
**估计往返时间**:
* 超时间隔必须大于连接的往返时间(RTT)
* SampleRTT:为某一时刻RTT采样。
* EstimatedRTT:\(1 - å\) EstimatedRTT + å SampleRTT;å 一般为0.125
* 指数加权移动平均(Exponential Weighted Moving Average,EWMA):用于表示RTT的变化,DevRTT = \(1 - ß\) DevRTT + ß \| SampleRTT - EstimatedRTT \|
**设置和管理重传超时**:TimeoutInterval = EstimatedRTT + 4 DevRTT
### 3.5.4 可靠数据传输
TCP的可靠数据传输服务确保一个进程从其缓存读出的数据流是无损坏、无间隔、非冗余和按序的。
TCP连接的发送需要:从上层应用程序接受数据、响应定时器超时和接受ACK(TCP采用累积确认,确认y则表示y之前的分组均被成功接收)
* 超时则时间间隔加倍:如果发生超时事件,则TimeoutInterval = 2 \* TimeoutInterval。
* 快速重传(Fast Retransmit):一旦收到三个冗余ACK,TCP立即执行快速重传。
* 回退N步还是选择重传:TCP采用两个机制的混合版

### 3.5.5 流量控制
一条TCP连接每一侧主机都为该连接提供了接受缓存,当该TCP连接收到正确、按序的字节后,就将数据放入接收缓存。TCP为它的应用程序提供了流量控制服务(Flow-control Service)以消除缓存溢出的情况,该服务也称速度匹配服务,发送方去匹配接收方从缓存中读取数据的速度。
拥塞控制(Congestion Control):TCP发送方因为IP网络的拥塞而被遏制。
TCP通过让发送方维护一个接受窗口(Receive Window)的变量,即接收方还有多少缓存空间,来实现流量控制。
### 3.5.6 TCP连接管理
TCP三次握手(Three-way Handshake):
* 客户端发送一个请求建立连接的报文给服务端,SYN=1、client-isn为随机值。
* 服务端接收到请求报文,为连接分配缓存和变量,并返回一个确认报文,SYN=1、client-isn=client-isn+1、server-isn=xxx(服务器生成),该报文称为SYNACK报文。
* 客户端接收到SYNACK报文,为连接分配缓存和变量,并返回一个确认报文,SYN=0,server-isn=server-isn+1

TCP四次挥手:

SYN泛洪攻击(SYN Flood Attack):发送大量的SYN报文请求建立连接,而不完成第三次握手,导致服务器不断为半开连接分配资源直至资源耗尽。
- 介绍
- 第一章 计算机网络和因特网
- 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 第五章小结
