7. TCP可靠传输的实现( 三 )


6. 超时重传时间的选择
(1)、相关概念
RTT:一个TCP数据报文段的往返传播时间 。超时重传时间RTO不能小于RTT,不然会导致不必要的重传,使网络负荷增大
超时重传时间RTO不能远大于RTT,不然会使网络的空闲时间增大,降低传输效率 。
(2)、超时重传时间的计算公式
这里的超时重传时间是加权平均值 。因为单纯的几个不具有普遍性,会引起极端情况 。
(3)、超时重传后需要对超时重传时间进行更新吗?
因为发生了超时重传,不能准确的计算相应的RTT,因为会被相应的重传报文段混淆 。
所以报文段每重传一次,就把重传时间RTO增大一些,典型的做法就是增大为旧值的两倍 。
7. TCP可靠传输的实现
(1)、实现方式
TCP基于以字节为单位的滑动窗口来实现可靠传输 。
发送方在未收到接收方的确认时,可将发送窗口还未发送的数据全部发送出去 。接收方只接收序号落入窗口内的数据,如果是未按序到达的数据,接收方会先将其存下来 。
(2)、实现过程说明
按序
刚开始的时候,发送方会收到接收方的一个确认报文段(rwnd = 20 , ack = 34)(表示接收窗口为20,期望收到的数据的序号为34),然后发送方向接收方发送数据,如果是按序到达的,接收方接收到之后,将相关数据从相应的接收缓存中删除,然后接收方的窗口向前移动,并向发送方发送前面数据的累计确认分组,发送方接收到后将窗口向前移动,并将相关数据从发送缓存中删除;
不按序
如果不是按序到达的,那么接收方的窗口保持不变,并向接收方发送未收到的数据的序号,当超过超时时间就会触发超时重传 。
(3)、特别说明
同一时刻,发送方的发送窗口并不总是和接收方的接收窗口一样大对于不按序到达的数据,通常会将其先临时存放在接收窗口中,等待字节流中所缺失的字节收到后,再按序交付上层的应用进程 。TCP要求接收方必须有累计确认和捎带确认机制,减少传输开销 。TCP的通信是全双工通信 。通信的每一方都在发送和接收报文段 。8. TCP的连接建立
(1)、TCP的连接建立要解决的三个问题
使TCP双方能够确知对方的存在使TCP双方能够协商一些参数使TCP双方能够对运输实体资源进行分配
(2)、建立过程说明
建立过程中,TCP客户机会首先发送给TCP服务器一个TCP连接请求报文(SYN = 1, seq = x),TCP服务器进程收到后发送一个TCP连接请求确认报文(SYN = 1,ACK = 1,seq = y,ack = x + 1),TCP客户端进程收到相应的报文后进入连接已建立状态,然后向TCP服务器进程发送一个TCP普通确认报文段,然后TCP服务器进程进入连接已建立状态 。
(3)、第三次的TCP请求的确认的确认是否多余?
不多余,这是为了防止已失效的连接请求报文段突然又传送到TCP服务器,因而导致错误 。
9. TCP的连接释放
(1)、 TCP客户进程向TCP服务器发送TCP连接释放报文
当TCP客户端进程要主动关闭连接时,TCP客户端进程就会向TCP服务器端发送一个TCP连接释放报文(FIN = 1 ,ACK= 1,seq = u,ack = v) 。此时TCP客户端进入终止等待状态 。
(2)、TCP服务器端进程向TCP客户端进程发送一个普通的TCP确认报文
然后TCP服务器端进程会向TCP客户端进程发送一个普通的TCP确认报文(ACK = 1,seq = v,ack = u+ 1),且此时的TCP服务器端进入关闭等待状态,TCP客户端进程进入终止等待状态 。
此时TCP客户端进程到TCP服务器端的进程的连接已经关闭,而TCP服务器端到TCP客户端进程的连接还未关闭 。所以此时TCP服务器端进程还可以给TCP客户端进程进行数据传输 。