TCP(Transmission Control Protocol, 传输控制协议)
- TCP三次握手、四次挥手示意图,要能够描述过程。
详解参考 https://blog.csdn.net/qq_38950316/article/details/81087809
- OSI七层网络模型和TCP/IP四层网络模型
3. TCP和UDP的区别
TCP:面向连接,面向字节流,可靠服务,资源要求较多,速度慢
UDP:无连接,面向报文,不可靠,资源要求较少,速度快
4. TCP如何保证可靠传输
1、确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就重传。
2、数据校验
3、数据合理分片和排序:
UDP:IP数据报大于1500字节,大于MTU.这个时候发送方IP层就需要分片(fragmentation).把数据报分成若干片,使每一片都小于MTU.而接收方IP层则需要进行数据报的重组.这样就会多做许多事情,而更严重的是,由于UDP的特性,当某一片数据传送中丢失时,接收方便无法重组数据报.将导致丢弃整个UDP数据报.
TCP会按MTU合理分片,接收方会缓存未按序到达的数据,重新排序后再交给应用层。
4、流量控制:当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。
5、拥塞控制:当网络拥塞时,减少数据的发送。
-
拥塞控制与流量控制的区别:
拥塞控制是防止过多的数据注入到网络中,可以使网络中的路由器或链路不致过载,是一个全局性的过程。
流量控制是点对点通信量的控制,是一个端到端的问题,主要就是抑制发送端发送数据的速率,以便接收端来得及接收。 -
拥塞控制算法
慢开始:刚刚加入网络的连接设置cwnd = 1,一点一点地提速,不要一上来就把路占满。
拥塞避免:当拥塞窗口 cwnd 达到一个阈值时,窗口大小不再呈指数上升,而是以线性上升,避免增长过快导致网络拥塞。
快速重传:当接收方收到失序数据时,立即返回重复ACK,不能延迟发送。
快恢复:至少收到了3个Duplicated Acks,说明网络也不那么糟糕,可以快速恢复。 -
TCP挥手中的TIME_WAIT就是主动断开的一方,发送完最后一次ACK之后进入的状态
作用:
(1)保证可靠关闭:若主动方的应答ACK因为拥塞等原因被丢弃,那么被动方会重新发送FIN+ACK, 那么主动方还可以再次发送应答ACK;
(2)让迟来的报文(数据或者FIN等)有足够的时间被识别和丢弃,防止影响新的连接。因为通信双方都将处于TIME_WAIT状态的连接(客户端IP、客户端端口、服务端IP、服务端端口)定义为不可重新使用。
(3)MSL是报文传输的最大生存时间,超过MSL的报文将被丢弃,这就是TIME_WAIT设置成2MSL(发送方发送、接收方发送加起来的时间)的原因;MSL比TTL大一些。
如发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决:
net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
net.ipv4.tcp_fin_timeout 修改系默认的 TIMEOUT 时间