一:TCP概述
1:特点
(1):TCP是面向连接的运输层协议,在使用之前需要先建立TCP连接,传输结束之后,需要释放连接。
(2):每个TCP连接只能有两个端点
(3):TCP提供可靠交付服务,通过TCP传送的数据 无差错、不丢失、不重复、按序到达
(4):TCP提供全双工通信 允许应用进程在任何时间发送数据。
(5):面向字节流 TCP根据对方所给的窗口值和当前的网络拥塞情况来决定一个报文段应该包含多少个字节。
2:TCP的连接
使用套接字连接 也就是 ip地址:端口号
3:可靠传输的工作原理
(1):停止等待协议
无差错情况下 发送M1-确认M1-发送M2-确认M2...
(2):出现差错
使用超时重传策略,每次发送一个分组之后就设置一个超时计时器,并且在发送完一个分组之后,暂时保留已发送的分组的副本
分组和确认分组都必须进行编号
超时计时器设置的重传时间应当数据在分组传输的平均往返时间更长一些。
4:连续ARQ协议
发送方维持发送窗口,窗口内的分组可以一次发送出去,接收方使用累积确认的方式,对按序到达的最后一个分组发送确认。
二:TCP报文的首部格式
1:TCP报文段的前20字节是固定的
源端口和目的端口 各占用2字节 序号 4字节 确认号 4字节 数据偏移 4位
保留 6位 紧急URG 确认ACK 推送 复位 同步 SYN 终止SYN 窗口 检验和 紧急指针 选项
三:TCP可靠传输的实现
以字节为单位的滑动窗口,当对方的通知窗口缩小了,可向后收缩,对按序收到的数据中的最高序号给出确认
超时重传的时间选择
RTT 报文段的往返时间 RTTS 加权平均往返时间 新的RTTS=(1-a)*旧的RTTS+ a*新的RTT
其中a的选择影响新的RTTS的值偏向于新值还是旧值。推荐位0.125
RTO超时重传时间 应大于上述的RTTS
RTO=RTTS+4*RTTD
RTTD是RTT的偏差加权平均值
新的RTTD=(1-b)* (旧的RTTD) +B*|RTTS-新的RTT样本|
选择确认SACK
对收到的数据中缺失的部分描述。左边界和右边界
四:TCP的连接
三次握手:
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据,在上述过程中,还有一些重要的概念:
四次挥手
3) 关闭服务器到客户端的连接:也是发送一个FIN给客户端。
4) 客户段收到FIN后,并发回一个ACK报文确认,并将确认序号seq设置为收到序号加1。