计算机网络 TCP三次握手建立连接、四次挥手关闭连接
TCP(Transmission Control Protocol,传输控制协议),是一种面向连接的,可靠的,基于字节流的传输层协议。
1、报文格式
1)IP首部和TCP首部中的源地址+源端口,以及目的地址+目的端口,唯一确定一个TCP连接。
2)序号(4B):报文第一个字节的编号。可靠性的主要保障。
3)确认号(4B):期待收到的下一个字节编号,用于确认该编号之前的字节都已经收到了。
4)标志位:ACK(1b,为1表示确认号有效);SYN(1b,为1表示建立连接的请求和应答);
5)检验和(2B)
6)滑动窗口(2B)
2、三次握手建立连接
3、四次挥手关闭连接
4、建立连接为什么需要三次握手,两次行不行?
不行。如果没有最后一次握手,Server不知道Client有没有收到自己的SYN包。
追问:如果Client的ACK,Server没有收到呢?
Server会重传SYN包,知道收到ACK。
5、关闭连接为什么需要四次握手,三次行不行?
不行。因为当Server收到Client发来的FIN包时,可能自己想发给Client的数据还没发完,只能先回一个ACK包,告知Client:你的FIN包我收到了。 并进入CLOSE_WAIT状态。Server的数据发完了,才能向Client发FIN包,并进入LAST_ACK状态。
6、服务器出现大量CLOSE_WAIT连接,可能的原因是什么?
Server没调用close来关闭socket。
7、为什么TIME_WAIT状态需要2MSL(Maximum Segment Lifetime,报文的最大生存时间)?
为了确保Server收到了Client的ACK。如果Server没有收到Client的ACK,会超时重传FIN包。2MSL=Client的ACK+Server的FIN。
8、和UDP(User Datagram Protocol,用户数据报协议)的区别?
UDP无连接,不可靠,基于数据报,不会对数据进行拆分和拼接。适用于对通信质量要求不高,允许丢包,例如音视频;对通信速度要求很高,例如IM(即时通信,QQ)。
9、UDP是无连接的,调用connect的作用是什么?
指定目的地址和目的端口,否则需要在sendto和recvfrom中指定。
参考链接:
https://www.zhihu.com/question/24853633