=========TIME-WAIT相关问题===============
    - TIME_WAIT状态用来解决和避免的问题:
    1. 防止主动关闭方的ACK包丢失问题
    2. 防止重复(旧)的数据包出现在本次连接问题
    - 如果集群中处于TIME-WAIT状态的服务器过多,可能是什么原因?
    原因1:高并发短链接的TCP服务器上,当服务器处理完请求后正常主动关闭连接
    短链接: “业务处理+传输数据时间”远远小于TIME-WAIT时间
    举例1:1s的http短链接处理完业务,主动方关闭连接之后,会在T-W状态等待2MLS时间->导致端口被占用

    - 如何处理TIME-WAIT过多的问题
    /etc/sysctl.conf文件中:
    net.ipv4.tcp_tw_reuse=1 # 重用
    net.ipv4.tcp_tw_recycle=1 # 快速回收
    net.ipv4.tcp_tw_timestamps=1 # 时间戳一致
    net.ipv4.tcp_syncookies = 1 # SYN请求缓存(有一点点用处)
    - 清理TIME-WAIT技巧
    统计T-W连接数量:netstat -an | grep “TIME_WAIT” | wc -l
    1. 调整net.ipv4.tcp_max_tw_buckets参数 -> 超过默认值,内核会把过多的T-W连接清理掉
    2. 利用RTS包从外部清理,当内核收到RTS包后会产生错误从而终止连接
    ==============TCP相关问题==================
    - TCP三次握手和四次挥手
    - TCP和UDP的区别
    - TCP如何保证可靠性
    1. TCP分段:应用数据被分割成合适的TCP段发送(对UDP来说,应用程序产生的数据段长度将保持不变)
    2. 超时重传:每发出一个TCP段都会启动一个”重传定时器”;如果不能及时收到一个确认,将重传这个报文段
    3. 流量控制:缓冲区固定大小,TCP接收端只允许另一端发送接收缓冲区所能接纳的数据(滑动窗口)
    4. 数据校验:TCP首部(校验和);如果收到段的校验和有差错,会选择丢弃和不确认
    5. 处理IP数据包:
    a) 丢弃重复的IP数据包
    b) 将失序的IP数据包重新排序后交由应用层
    ==============滑动窗口相关问题====================
    1. 发送方根据接收端的窗口大小(WIN=xxx)来调整发送速率,实现端到端的流量控制
    2. 窗口: |已发送并确认|发送窗口|不允许发送|
    3. 发送窗口: |通知窗口:已发送并未收到确认|可用窗口:允许发送但未发送|
    Note: 发送方的数据包不能够大于接收端的接收端口
    发送缓存:
    a) TCP已发送但是没有收到确认的数据
    b) 应用程序:TCP准备发送的数据
    关系: 已发送 < 发送窗口 < 发送缓存
    接收缓存:
    a) 未按序到达的数据
    b) 应用程序:按序到达并未读取的数据
    - 发送缓存和接收缓存都有大小限制,并可以重复使用
    Linux系统相关内核参数:
    自动调节:
    net.ipv4.tcp_moderate_rcvbuf=1 # 默认为1:代表开启自动调节
    net.ipv4.tcp_adv_win_scale=1 # 默认为1:计算接收缓存和接收窗口的微调
    net.ipv4.tcp_wmem=4096 16384 4194304 # min值 defaults值 max值
    net.ipv4.tcp_rmem=4096 87380 6291456
    发送和接收缓存的默认值和最大值:
    net.core.rmem_default=212992
    net.core.rmem_max=212992
    net.core.wmem_default=212992
    net.core.wmem_max=212992
    - 如果发送端接收到一个零窗口该怎么处理?
    场景:当服务端处理能力不够的时候,可能会导致数据丢失,从而向发送端发送零窗口
    发送端处理方式:
    1) 会暂时停止发送数据流
    2) 启用窗口定时器:当网络中没有发送且未确认的数据包且本端有待发送的数据包时
    3) 保持连接并传输探测(keep-alive报文)
    a) 接收窗口不为0 -> 继续发送数据包(清除超时时间的退避指数,删除零窗口探测定时器)
    b) 接收窗口仍为0 -> 重新设置零窗口探测定时器的下次超时时间,超时时间的设置和超时重传定时器的一样
    - MSS是什么?
    MSS(最大报文长度):TCP数据包每次能够传输的最大数据分段, 在建立连接阶段就会相互告知和滑动窗口没有任何关系
    MSS: 控制报文传输长度
    滑动窗口: 控制传输速率
    ==================拥塞控制=================
    网络拥塞的原因:
    1.独享整个网络资源,TCP的流量控制必然会导致网络拥塞,只关注了对端接收空间,无法知道链路上的容量
    2.路由器接入网络会拉低网络的总带宽,路由器如果出现瓶颈,很容易出现堵塞
    拥塞控制主要依赖于拥塞窗口(cwnd);所以发送端发送的真正窗口是:min(rwnd,cwnd)
    拥塞控制的4种机制:
    1. 慢开始
    2. 拥塞避免:
    3. 快速重传
    4. 快速恢复
    拥塞控制过程:
    1. 慢启动: 进行试探的过程 -> 一般从cwnd=1开始加倍增长
    2. 当cwnd > ssthresh初始值后开始拥塞避免-> 每次cwnd+1
    3. 判断网络拥塞
    a) 没收到ACK时,重新执行慢开始,并且将sshresh初始值重置为: 发生拥塞时的cwnd/2
    b) 收到3个重复ACK时,进行快速重传,
    4. 快速恢复: 从新ssthresh=[发生拥塞时的cwnd/2]开始执行拥塞避免