2019-06-11

协议概述:

1.点对点(只有一个发送方一个接收方)

2.可靠的,按序的字节流

3.流水线机制:

通过tcp拥塞控制和流量控制机制动态设置窗口尺寸

4.发送方接收方都有缓存机制

5.全双工(full—duplex)同一连接中能够传输双向的数据流

6,面向连接:

通信双方在发送数据之前必须建立连接,连接状态只在连接的两端中维护,在沿途节点中并不维护状态,tcp连接包括:两台主机上的缓存,连接状态变量,socket等

7.流量控制机制

TCP段结构:

RTT(Round Trip Time,一个连接的往返时间)和超时:

如何设置定时器的超时时间?

RTT过长对段丢失时间反应慢,过短造成不必要的重传

如何估计RTT:

SampleRTT:测量从段发出去到收到ACK的时间(忽略重传)

SampleRTT变换:测量多个SampleRTT求平均值

定时器超时时间设置:

EstimatedRTT+安全边界

EstimatedRTT变化大->较大的边界

测量RTT的变化值:SampleRTT和EstimatedRTT的差值

TCP发送方事件:

1.从应用层收到数据:

创建Segment

序列号是Segment第一个字节的编号

开启计时器

设置超时时间:TimeOutInterval

2.超时:

重传引起超时的Segment

重启定时器

3.收到ACK:

如果确认此前未确认的Segment:

更新SendBase

如果窗口中还有未被确认的分组,重新启动定时器

快速重传机制:

TCP实现中,如果发生超时,超时时间间隔将重新设置,即将超时时间间隔加倍,导致其很大。

重发丢失的分组之前要等待更长的时间。

通过重复的ack检测分组的丢失。

如果sender收到对同一数据的3个ack,则假定该数据之后的段已经丢失

快速重传:在定时器超时之前即进行重传。

TCP流量控制(速度匹配机制):

接收方为TCP连接分配bufer

上层应用可能处理buffer中数据的速度较慢,则发送方不会传输的太多,太快以至于淹没接收方(buffer溢出)

RecWindow=0时发送方也会发送一小段数据 来获取更新的缓冲大小,防止发生死锁现象

TCP连接管理(建立):

TCP sender和receiver在传输数据前需要建立连接

初始化TCP变量:

初始序列号,buffer 和流量控制信息等

Client:连接的发起者

Server:等待客户连接请求:

三次握手:

1.客户端主机向服务器发送一个SYN段(带着初始序列号,SYN标志位置为1,不包含任何数据)

2.服务器主机收到SYN段,如果同意访问,会返回一个SYNACK 段(为该连接分配缓存,返回自己的初始序列号)

3.客户机收到SYNACK 后返回ACK报文段(SYN置0,可能会包含数据)

TCP连接管理(关闭):

客户机关闭连接clientSocket.close()

1.客户机向服务器发送TCP FIN 控制报文端(FIN置1)

2服务器收到FIN ,回复ACK,数据传输完毕后,关闭连接发送FIN

3.客户机收到FIN回复ACK

进入等待,如果收到FIN会重新发送ACK(防止丢包)

4.服务器收到ACK,连接关闭

你可能感兴趣的:(2019-06-11)