TCP,UDP有什么区别
- TCP是面向连接的、UDP是无连接的
- TCP是面向字节流的、UDP是基于数据报的
- TCP是可靠传输(数据正确性及有序),UDP是尽最大努力交付
- TCP占用系统资源较多、UDP则较少
TCP的重传机制
- 超时重传:超过超时时间还没有收到ack,则重传数据报。
- 快速重传:主要针对后面的序号先到达的数据报,则发送三次冗余ack,引起重传
快速重传为什么需要三次冗余ack?
两次duplicated ACK肯定是乱序造成的!
丢包肯定会造成三次duplicated ACK!三次握手过程中有哪些不安全性?
- Dos(拒绝服务)攻击:SYN flood攻击TCP三次握手和四次挥手以及缺陷(详细)
- 在TCP握手时插入伪造TCP报
TCP的报头
TCP数据校验是怎么做的
TCP三次握手的具体过程,为啥不能是两次或者四次
两次的话可能是已失效的连接请求,即a发送的第一个连接请求报文段没有丢失,而是在某些网络节点长时间滞留了,以致延误到连接释放以后的某个时间才到达B。B收到此失效的连接报文段后,误以为A又发出有一次新的连接请求,于是同意建立连接。
四次则是没有必要的,浪费网络资源。TCP为什么是四次挥手,其中TIME_WAIT和CLOSE_WAIT这两个阶段。
首先TCP是全双工的,需要各自发送FIN结束连接。
其中TIME_WAIT的存在有两个原因。第一个原因是确保A发送的ACK能够到达B。如果不存在TIME_WAIT阶段而直接关闭连接,如果B没有收到最后的ACK而无法关闭连接,同时A无法接受B重传的FIN和ACK。
第二个原因是防止已失效的连接请求报文段出现在本连接中。可以这样理解,在TIME_WAIT状态下,不允许应用程序在当前ip和端口上和之前通信的client(这个client的ip和端口号不变)建立一个新的连接。这样就能避免新的连接收到之前的ip和端口一致的连接残存在网络中的数据包。这也是TIME_WAIT状态的等待时间被设置为2MSL的原因,以确保网络上当前连接两个方向上尚未接收的TCP报文已经全部消失。
CLOSE_WAIT用UDP模拟TCP实现对传输速度的控制
让你设计如何提高tcp传输效率,有没有关注google对tcp的改进