3.5 面向连接的运输:TCP
Last updated
Was this helpful?
Last updated
Was this helpful?
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)。
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 紧急数据指针:用于指向紧急数据
估计往返时间
超时间隔必须大于连接的往返时间(RTT)
SampleRTT:为某一时刻RTT采样。
EstimatedRTT:(1 - å) EstimatedRTT + å SampleRTT;å 一般为0.125
指数加权移动平均(Exponential Weighted Moving Average,EWMA):用于表示RTT的变化,DevRTT = (1 - ß) DevRTT + ß | SampleRTT - EstimatedRTT |
设置和管理重传超时
TimeoutInterval = EstimatedRTT + 4 DevRTT
TCP的可靠数据传输服务确保一个进程从其缓存读出的数据流是无损坏、无间隔、非冗余和按序的。
TCP连接的发送需要:从上层应用程序接受数据、响应定时器超时和接受ACK(TCP采用累积确认,确认y则表示y之前的分组均被成功接收)
超时则时间间隔加倍:如果发生超时事件,则TimeoutInterval = 2 * TimeoutInterval。
快速重传(Fast Retransmit):一旦收到三个冗余ACK,TCP立即执行快速重传。
回退N步还是选择重传:TCP采用两个机制的混合版
一条TCP连接每一侧主机都为该连接提供了接受缓存,当该TCP连接收到正确、按序的字节后,就将数据放入接收缓存。TCP为它的应用程序提供了流量控制服务(Flow-control Service)以消除缓存溢出的情况,该服务也称速度匹配服务,发送方去匹配接收方从缓存中读取数据的速度。
拥塞控制(Congestion Control):TCP发送方因为IP网络的拥塞而被遏制。
TCP通过让发送方维护一个接受窗口(Receive Window)的变量,即接收方还有多少缓存空间,来实现流量控制。
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报文请求建立连接,而不完成第三次握手,导致服务器不断为半开连接分配资源直至资源耗尽。