zoukankan      html  css  js  c++  java
  • TCP实现可靠传输

    1. TCP 和 UDP的区别:

    • TCP面向连接;UDP无连接
    • TCP保证数据的可靠传输,数据传送无差错,不丢失,无重复,按序到达;UDP不保证可靠交付
    • TCP连接一对一;UDP支持更广泛
    • UDP实时性好,效率高,适用场景:短消息传输,大量客户端,对数据安全性要求不高但实时性要求高
    • TCP面向数据流;UDP面向数据报

    2. TCP如何保证数据传输的可靠性?

      1. 序列号ACK信号:发送方按照顺序给要发送的数据包的每个字节都标上编号。接收方接收到发送方的数据包之后,回传一个ACK信号,标识下一个需求的数据包初始字节编号。

      2. 超时重发:在等待接收方回传的ACK信号超时后,发送方重发数据包。一旦开始重传,下一次等待的时间间隔指数增长,重发一定次数后还是收不到ACK信号,将强制终止连接。

      3. TCP的连接管理:建立连接的三次握手和断开连接的四次挥手。

      4. 以段为单位发送数据包:在建立TCP连接的同时,两端协商发送数据包的单位,称为“最大消息长度”:MSS。 【TCP数据(MSS字节)】【TCP首部(20字节)】【IP首部(20字节)】

      5. 滑动窗口:以段为单位发送数据包,每发送一个数据包需要等待一个ACK信号,当数据包往返时间越长效率越低。滑动窗口中窗口前端为已发送但为收到ACK的数据,后端为待发送数据。发送端一次发送多个数据,接收端回传收到的连续数据的ACK信号,缓存缺失数据之后的数据包(保持顺序)。发送端当收到ACK信号时,窗口向前依次移动,直到遇到有数据未确认时停止。一段时间后启动超时重传,接收端若收到缺失数据,则和缓存数据一起发送ACK信号,否则,抛弃缓存数据。

      6. 流量控制:TCP首部有一个字段来通知窗口的大小,接收端通过设置来主动控制传输流量。

      7. 拥塞控制:发送端通过拥塞窗口主动控制传输流量。慢启动:防止双方通信刚开始就传送大量数据包,发送端拥塞窗口初始设置为1MSS,每接受一个ACK信号,窗口扩大为两倍。发送数据时,取拥塞窗口和滑动窗口的较小值。同时设定一个慢启动阈值,当拥塞窗口大小超过阈值时,改为线性增长,直到网络拥塞。拥塞时将慢启动阈值设置为当前窗口的的一半,并将拥塞窗口的值设置为1,然后再次重复操作。

    3. TCP三次握手

      

       为什么需要三次?

      1. 确认信息对等,客户端和服务端需要确认自己和对方收发报文的能力

      第一次握手,Server确认了自己收报文,和Client发报文的能力

      第二次握手,Client确认了自己收/发报文和Server收/发报文的能力

      如果没有第三次,那么Server将无法确认自己发报文和Client收报文的能力

      2. 防止超时产生的脏连接

      客户端发送的连接请求超时到达,服务器接收后,如果没有第三次握手确认,而直接建立连接,这个连接是脏连接。而三次握手中,这种超时握手,客户端因为状态不是SYN_SENT,将会丢弃服务端的二次握手,服务端收不到三次握手,最终超时,连接建立失败。

    4. TCP四次挥手

      

      第一次挥手,客户端发送FIN,客户端不再发送数据

      第二次挥手,服务端返回ACK,告知客户端收到请求,并进入CLOSED_WAIT状态,代表服务端进入收尾阶段,发送剩余数据关闭资源等等。

      第三次挥手,服务端返回FIN,进入LAST_ACK状态,等待客户端确认应答

      第四次挥手,客户端返回ACK,进入TIME_WAIT状态(持续2MSL时间),在此期间若再没有收到服务端请求,则关闭连接进入CLOSED状态

      为什么是2MSL?

      MSL是报文在网络上生存的最长时间。假设最后一次挥手的ACK丢失,而它的最大生存时间是MSL,服务端未收到ACK则会重发FIN,重发的报文生存时间也是MSL,两者一共2MSL。如果在最长等待时间中都未收到服务端的消息,则确认服务端已经关闭,则自己也可关闭了。

    人生就像蒲公英,看似自由,其实身不由己。
  • 相关阅读:
    HTML DOM 12 表格排序
    HTML DOM 10 常用场景
    HTML DOM 10 插入节点
    HTML DOM 09 替换节点
    HTML DOM 08 删除节点
    HTML DOM 07 创建节点
    022 注释
    024 数字类型
    005 基于面向对象设计一个简单的游戏
    021 花式赋值
  • 原文地址:https://www.cnblogs.com/walker993/p/9570902.html
Copyright © 2011-2022 走看看