TCP三次握手流程:
第一次握手:客户端向服务器端发送连接请求报文段,报文段中包含数据通信初始序列,发送成功后,客户端进入SYN-SENT状态。
第二次握手:服务器端接收客户端发送的连接请求报文段,进入SYN-RECEIVED状态,并向客户端发送ACK确认报文,里面包含自身的数据通信初始序列。
第三次握手:客户端接收服务器端发送的ACK确认报文后,自身进入ESTABLISHED状态,并向服务器端发送ACK确认报文,服务器端接收成功后自身也进入ESTABLISHED状态。
为什么 TCP 建立连接需要三次握手,而不是两次?这是因为这是为了防止出现失效的连接请求报文段被服务端接收的情况,从而产生错误。
TCP断开连接四次握手流程:
第一次握手:客户端认为连接请求报文发送成功,向服务器端发送连接请求释放。
第二次握手:服务器端接收客户端发送来的连接请求释放后,进入CLOSE_WAIT状态,并向客户端发送ACK确认报文,表示客户端与服务器端连接已经建立,客户端不在向服务器端发送数据,但是服务器端可以向客户端发送数据。
第三次握手:如果服务器端仍还有数据没有发送完,向客户端发送连接请求释放,自身进入LAST_ACK状态。
第四次握手:客户端接收服务器端发送来的连接请求释放后,自身进入TIME_WAIT状态,该状态持续2MSL(报文段在网络中生存时间),客户端向服务器端发送ACK确认报文,该阶段如果没有接收到服务器端重发,进入CLOSED状态,服务器端接收到ACK确认报文后,进入CLOSED状态
TCP和UDP区别
UDP | TCP | |
---|---|---|
是否连接 | 无连接 | 面向连接 |
是否可靠 | 不可靠传输,不提供流量控制和拥塞控制 | 可靠传输,提供流量控制和拥塞控制 |
传输方式 | 面向报文 | 面向字节流 |
首部开销 | 首部开销小,仅8个字节 | 首部最小20字节,最大60字节 |
适用场景 | 适用于实时应用(IP电话、视频会议、直播) | 适用于可靠传输应用,例如文件传输 |
OSI七层协议:
TCP提供拥塞控制
当网络出现拥塞的时候,TCP能够减小向网络注入数据的速率和数量,缓解拥塞。
拥塞控制主要有四种方法,滑动窗口机制、慢启动机制、拥塞避免机制、快速重传与恢复。
TCP流量控制
如果发送端发送数据太快,接收端来不及接收,可能会丢失数据。所以流量控制是让发送端不要发送太快,要让接收端来得及接收。
流量控制是通过大小可变的滑动窗口实现的。
发送端窗口大小不能超过接收端窗口大小的值。TCP窗口单位是字节。