TCP
TCP协议之三次握手,四次挥手
面试题
TCP协议要达成什么目的?
因为网络是不可靠的,任何包都可能丢。
达成可靠的传输:包按序收到,保证包不出错,流量控制(由滑动窗口达到的目的),拥塞控制。
滑动窗口协议怎么运行的,解决了什么问题?
- 流量控制,保证两边收发速度一致。
为什么要三次握手:
个人理解,一次两次握手都不保险。两次握手不保险的原因是:
为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤。如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认。
为什么连接的时候是三次握手,关闭的时候却是四次握手?
答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。等它做完所有断开的准备工作,我才能发送FIN报文,因此不能一起发送。故需要四步握手。
为什么TCP断开连接发送方最后要进入超时等待TIME_WAIT状态?
保持TIME_WAIT是假设第四次挥手失败,如果失败,对方会重发第三次挥手,这段时间用来等待可能的对方重新发送的第三次挥手。