计算机网络 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

原文地址:https://www.cnblogs.com/yangwenhuan/p/10350735.html