TCP和UDP
- 都是运输层协议
- tcp有连接,可靠:数据包校验、对失序数据包重排序、丢弃重复数据、应答机制、超时重传、流量控制。
- udp无连接,快。只是传输数据,不管服务器是否收到。
TCP拥塞控制
防止过多数据注入到网络中,这样可以使网络中的路由器或链路不致过载。
- 慢开始
把初始拥塞窗口cwnd设置为1或2个发送方的最大报文段(SMSS),由小到大逐渐增大发送窗口。每经过一个传输轮次,cwnd加倍。
把拥塞窗口允许发送的报文段都连续发送出去,收到对已发送的最后一个字节的确认,为一个传输轮次,时间为一个往返时间。
- 拥塞避免
让拥塞窗口缓慢增大,没经过一个往返时间RTT就加1
- 快重传
让发送方尽早知道发生了个别报文段丢失
- 快恢复
发送方知道丢失报文段,则不启动慢开始,用快恢复,调整门限值cwnd/2.
TCP建立连接——三次握手
- 客户端发送连接请求报文,将SYN位置设为1
- 服务器端收到报文后回复ACK+SYN报文。
- 客户端接收到报文后也向服务器端发送ACK报文,这个报文发送完毕后,完成了三次握手。
通过三次握手确认双方收发功能都正常,四次也可以但是显得比较多余。
TCP释放连接——四次挥手(断开连接)
- 客户端向服务器传送断开的请求包。客户端进入FIN_WAIT_1状态。
- 服务器端确定收到断开的请求,回复ACK报文。客户端进入FIN_WAIT_2状态。
- 服务器端向客户端FIN报文,请求关闭连接。服务器端进入LAST_ACK状态。
- 客户端收到FIN报文后,回复ACK报文。客户端进入TIME_WAIT状态。服务器端收到ACK报文就会关闭连接(不然一直处于LAST_ACK状态),客户端没有收到服务器端的回复,证明服务器端已关闭连接,客户端也可以关闭连接了。