TCP通过三次握手建立连接,四次挥手释放连接,确保连接建立和连接释放的可靠。 序列号、检验和、确认应答信号、重发机制、连接管理、窗口控制、流量控制、拥塞控制 标准回答 可靠传输就是通过TCP连接传送的数据是没有差错、不会丢失、不重复并且按序到达的。TCP是通过序列号、检验和、确认应答信号、重发机制、连接管理、窗口控制、流量控制、拥塞控制一起保证TCP传输的可靠性的。 加分回答 可靠传输的具体实现是: - 应用层的数据会被分割成TCP认为最适合发送的数据块。 - 序列号:TCP给发送的每一个包都进行编号,接收方对数据包进行排序,把有序数据传送给应用层,TCP的接收端会丢弃重复的数据。 - 检验和:TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。 - 确认应答:如果收到的数据报报文段的检验和没有差错,就确认收到,如果有差错,TCP就丢弃这个报文段和不确认收到此报文段。 - 流量控制:TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。 - 拥塞控制:当网络拥塞时,减少数据的发送。 - 停止等待协议:它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。 - 超时重传: 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
TCP通过三次握手(3个报文段)建立连接,四次挥手(4个报文段)释放连接,确保连接建立和连接释放的可靠。
【三次握手详细过程】
能否使用两次握手建立连接呢? 不行。如果TCP客户发起的请求滞留到达,此时TCP服务器会进入连接已建立状态,而TCP客户端仍为关闭状态,会导致TCP服务器的资源浪费。
【四次挥手详细过程】
流量控制就是让发送方的发送速率不要太快,要让接收方来得及接收。(发送过快接收方来不及接受,可能导致数据丢失) 使用滑动窗口机制实现。
【以字节为单位的滑动窗口】
【问题】对于主机B发送的消息丢失,主机A迟迟收不到主机B的消息,双方会陷入死锁局面。 解决:设置持续计时器,超过则主机A发送0窗口探测报文(带有1字节),即使主机B的接收窗口为0规定也要接收0窗口探测报文。 【问题】0窗口探测报文(带有1字节)丢失怎么办? 解决:对于0窗口探测报文(带有1字节)也设置超时计时器,超时则重传。
拥塞:在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏。 四种拥塞控制算法 :
【慢开始+拥塞避免】 拥塞窗口cwnd,满开始门限ssthresh 当 cwnd < ssthresh 时,使用慢开始算法。 当 cwnd > ssthresh 时,停止使用慢开始算法,改用拥塞避免算法。 当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞避免算法。 【快重传+快恢复】 解决个别丢失但未拥塞,发生的超时重传而导致调用拥塞避免算法 快重传,就是使发送方尽快进行重传,而不是等超时重传计时器超时再重传。
快恢复:ssthresh=cwnd/2,cwnd=ssthresh
【慢开始结合拥塞避免】示例
【慢开始】:指数增长
【拥塞避免 】:当cwnd=ssthresh时,每次加1
【慢开始】:当发送超时重传,将ssthresh=cwnd/2,cwnd=1
【快重传+快恢复】示例
序列号:TCP给发送的每一个包都进行编号,接收方对数据包进行排序,把有序数据传送给应用层,TCP的接收端会丢弃重复的数据。
问题:A给B发送数据,A 如何知道 B 是否正确收到了 M1 呢? 解决方法:超时重传
超时重传时机的选择
它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。