1.TCP协议是全双工的,即允许数据在两个方向上同时传输 2.TCP的三次握手过程: (1)客户端向服务器端发送一个SYN,建立连接的请求 (2)服务器端向客户端响应一个ACK+SYN,表明,建立了客户端到服务器端的连接 (3)客户端向服务器端返回一个ACK的响应,表明建立了服务器端到客户端的连接 为什么要进行三次握手: 为了防止已经失效的连接请求发送到服务器端,发生错误,造成资源的浪费 如果是两次握手,则有可能是在网络中滞留很久的一个SYN请求连接,突然发送到服务器端,而服务器认为它是刚才才发送的SYN请求连接,给它返回一个ACK确认连接。此时服务器端认为自己与客户端已经建立了连接,而客户端并没有与服务端端建立连接,服务器就会一直空等客户端发送数据,造成服务器端资源的浪费。 3.TCP的四次挥手 (1)客户端向服务器端发送一个FIN,关闭连接的请求。表明客户端已经没有数据要发送给服务器。客户端进入FIN_WAIT_1状态。 (2)服务器端向客户端响应一个ACK。服务器端进入CLOSED_WAIT状态,客户端接收到ACK报文之后进入FIN_WAIT_2状态。 (3)服务器端在处理完之前的数据报之后,服务器端向客户端发送一个FIN请求,表明服务器端向客户端已经没有数据要发送。服务器端进入LAST_ACK状态,客户端接收到进入TIME_WAIT状态。 (4)客户端接收到之后,向服务器端发送一个ACK报文段,服务器端接收到进入CLOSE状态。客户端在经过2Time_WAIT时间之后,如果没有收到回复,则进入关闭状态。 为什么要进行四次挥手: 因为TCP是全双工通信,所以连接的拆除需要单独将两个通道拆除,而四次挥手就是拆除两条通道和释放连接。 可不可以三次挥手,不可以,如果将服务器端的ACK和FIN一次性发送给客户端,而服务器端还有数据没有处理,则会发生错误。 4.TCP的拥塞控制 拥塞控制采用慢启动机制,先发送少量的数据,测试当前网络的拥堵状态,再决定按照怎样的速度进行发送数据。 拥塞窗口开始时以指数形式增加,最后达到一定的阈值之后按照线性方式进行增长。 5.流量控制 发送端的发送数据的速度可以根据接收端处理数据的能力来决定发送速度 6.滑动窗口 可以一次性发送多条数据,比如窗口的大小是4000字节,则可以一次性发送4个端,不需要确认应答,而当每接收到一个ACK应答,窗口向下滑动,继续发送下一个数据段,提高网络传输效率 7.延迟应答 当接收端接收到发送端的数据时,并不是立即进行应答,而是延迟一段时间再应答,这样窗口的大小就会大一点,提高吞吐量,提高网络传输效率 8.捎带应答 将确认应答和下一个要发送的端序列号一起发送。提高网络传输效率 9.超时重传机制 在发送端发送数据到达一定时间还没有收到接收端的确认应答时,则会进行重新发送,这个时间单位是500ms,第一次是等待500ms,第二次是2*500ms,每次都是500ms的整数倍,当到达一定的次数时,发送端会认为接收端没有接收能力或者网络拥堵,强制进行关闭。 10.确认应答机制 发送端每发送一个数据,接收端都需要进行确认应答,表明自己已经接收到数据。