1.tcp头部格式:

 序列号:用来解决网络包收发的顺序问题
 确认应答号:解决丢包问题(一般都是+1)
2.建立一个 TCP 连接是需要客户端与服务端达成上述三个信息的共识

 Socket:由 IP 地址和端口号组成(IP源地址,源端口,IP目的地址,目的端口)
 序列号:用来解决乱序问题等
 窗口大小:用来做流量控制
3.TCP/UDP区别
UDP头部格式:
 
1.连接:TCP需要连接,UDP不需要连接
 2.对象个数:TCP是一对一,UDP可以是一对一,一对多,多对多
 3.可靠性:TCP数据可以无差错、不丢失、不重复、按序到达,UDP不保证数据可靠交付
 4.拥塞控制、流量控制:TCP有拥塞控制、流量控制,UDP没有
 5.首部开销:TCP首部是可变的,一般20个字节(160位);UDP长度不变8个字节
4.TCP可以和UDP共用一个端口
5.TCP三次握手

6.为什么是三次握手,不是两次或者四次?
主要原因:为了防止历史连接
7.什么每次建立 TCP 连接时,初始化的序列号都要求不一样呢?
主要原因:为了防止历史报文被下一个相同四元组的连接接收
8.MSS和MTU

 MTU=IP头部+TCP头部+MSS
9.第一次握手消失了会发生什么?
超时重传:
 在 Linux 里,客户端的 SYN 报文最大重传次数由 tcp_syn_retries内核参数控制,这个参数是可以自定义的,默认值一般是 5。
 第一次超时重传是在 1 秒后,第二次超时重传是在 2 秒,第三次超时重传是在 4 秒后,第四次超时重传是在 8 秒后,第五次是在超时重传 16 秒后。没错,每次超时的时间是上一次的 2 倍。
 总共加起来大约在一分钟左右。
10.第二次握手消失了会发生什么?
双方互相认为没收到,都开始重传
11.第三次握手消失了会发生什么?
ACK 报文是不会有重传的,当 ACK 丢失了,就由对方重传对应的报文。
 所以是服务端重传syn+ack报文
12.四次挥手

13.为什么TIME_Wait需要2MSL?

 在我理解看来就是因为如果最后一次的ACK报文丢了,就可以在2MSL时间内收到重传的FIN报文
 在 Linux 系统里 2MSL 默认是 60 秒,那么一个 MSL 也就是 30 秒。





![2023年全球及中国光伏硅片行业产量、市场竞争格局及趋势分析[图]](https://img-blog.csdnimg.cn/img_convert/4e0c65914f143890ce35f0e62689848d.png)













