面试的时候经常会被问到TCP协议,还有UDP协议也经常被问到。TCP很有代表性,因为它是一种可靠的传输协议,在计算机中很多地方都需要使用可靠的传输。
TCP为什么是3次握手?
教科书中告诉大家TCP三次握手,但为什么TCP是三次握手?其实也可以四次,五次或者更多次握手,这也是可靠传输的基础。
第一次握手:客户端向服务器发出请求;
第二次握手:服务器收到客户端发送的请求,并向客户端发送确认;
第三次握手:服务器向客户端发送收到确认报文的确认;
这样,网络的可靠传输就此建立。
TCP四次挥手过程
-
客户端向服务器端发送一个FIN报文,作为第一次挥手。通知服务器,我已经没有数据还要发送。但不确认服务器是否扔有数据返回,所以连接仍是建立状态。
-
服务器收到FIN报文,返回一个ACK报文,告诉客户端,我知道你已经没有东西要发送了,但我还要再确认一下我是不是还有东西要给你。
-
服务器判断自己也没有报文需要发送给客户端,发送FIN消息,告诉客户端,好了,这下我也没有东西要给你了,你可以终结连接了。此时服务器不确认客户端是否收到信息,继续保持连接。
-
客户机收到ACK和FIN消息后,得知服务器已经知道自己要终结,并且无更新内容,便给服务器发送一个ACK说我知道了,你也终结吧,客户机便终结连接。服务器在收到最后一条ACK后,也终结连接。
TCP拥塞控制
为了保证通道能够充分利用,系统采用流水线传输方式发送数据,但是这样会引发一些问题,因此需要进行拥塞控制。
- 慢开始
当主机开始发送数据时,先探测一下,由小到大逐渐增大发送窗口,由小到大增大拥塞窗口数值。
-
拥塞避免
-
快重传
-
快恢复