TCP
- TCP 的特性
- TCP 提供一种面向连接的、可靠的字节流服务
- 在一个 TCP 连接中,仅有两方进行彼此通信。广播和多播不能用于 TCP
- TCP 使用校验和,确认和重传机制来保证可靠传输
- TCP 给数据分节进行排序,并使用累积确认保证数据的顺序不变和非重复
- TCP 使用滑动窗口机制来实现流量控制,通过动态改变窗口的大小进行拥塞控制
- 注意:TCP 并不能保证数据一定会被对方接收到,因为这是不可能的。TCP 能够做到的是,如果有可能,就把数据递送到接收方,否则就(通过放弃重传并且中断连接这一手段)通知用户。因此准确说 TCP 也不是 100% 可靠的协议,它所能提供的是数据的可靠递送或故障的可靠通知。
- TCP三次握手
- 客户端发送一个新连接到服务端。
- 服务端发回确认包并进入
- 客户端再次向服务端发送确认包并进入连接状态,服务端接收到客户端的确认包同时进入连接状态。
- TCP四次挥手
- 客户端向服务端发送释放连接请求。
- 服务端向客户端发送确认包。
- 服务端向客户端发送结束请求。
- 客户端向服务端发送确认包,服务端接收到确认包后关闭连接,客户端在等待一段时间未收到服务端ACK认为服务端已经关闭后关闭连接。
- 三次握手的必要性
TCP是面向连接的一次握手肯定建立不了连接所以最少需要两次握手,如果改为二次握手,当第二次握手时由于网络原因导致延迟客户端长时间收不到确认会进行第二次连接请求,这时第二次连接请求达到服务端,服务端发送确认包到达客户端和服务端正常建立连接。此时第一次发送的请求也到达客户端时客户端认为是无效的,会导致服务端一直在等待客户端造成服务资源浪费。
对于服务端如果服务端迟迟收不到客户端的第二次握手请求,会释放相关资源;对于客户端如果第二次握手请求发出后在传输中丢失,那么客户端在向服务端发送数据时服务端将以RST包响应,方能感知到服务端的错误。