[小林coding]4.1TCP三次握手四次挥手笔记_1012

1.tcp头部格式:

[小林coding]4.1TCP三次握手四次挥手笔记_1012_第1张图片
序列号:用来解决网络包收发的顺序问题
确认应答号:解决丢包问题(一般都是+1)

2.建立一个 TCP 连接是需要客户端与服务端达成上述三个信息的共识

[小林coding]4.1TCP三次握手四次挥手笔记_1012_第2张图片
Socket:由 IP 地址和端口号组成(IP源地址,源端口,IP目的地址,目的端口)
序列号:用来解决乱序问题等
窗口大小:用来做流量控制

3.TCP/UDP区别

UDP头部格式:
[小林coding]4.1TCP三次握手四次挥手笔记_1012_第3张图片

1.连接:TCP需要连接,UDP不需要连接
2.对象个数:TCP是一对一,UDP可以是一对一,一对多,多对多
3.可靠性:TCP数据可以无差错、不丢失、不重复、按序到达,UDP不保证数据可靠交付
4.拥塞控制、流量控制:TCP有拥塞控制、流量控制,UDP没有
5.首部开销:TCP首部是可变的,一般20个字节(160位);UDP长度不变8个字节

4.TCP可以和UDP共用一个端口

5.TCP三次握手

[小林coding]4.1TCP三次握手四次挥手笔记_1012_第4张图片

6.为什么是三次握手,不是两次或者四次?

主要原因:为了防止历史连接

7.什么每次建立 TCP 连接时,初始化的序列号都要求不一样呢?

主要原因:为了防止历史报文被下一个相同四元组的连接接收

8.MSS和MTU

[小林coding]4.1TCP三次握手四次挥手笔记_1012_第5张图片
MTU=IP头部+TCP头部+MSS

9.第一次握手消失了会发生什么?

超时重传:
在 Linux 里,客户端的 SYN 报文最大重传次数由 tcp_syn_retries内核参数控制,这个参数是可以自定义的,默认值一般是 5。
第一次超时重传是在 1 秒后,第二次超时重传是在 2 秒,第三次超时重传是在 4 秒后,第四次超时重传是在 8 秒后,第五次是在超时重传 16 秒后。没错,每次超时的时间是上一次的 2 倍
总共加起来大约在一分钟左右。

10.第二次握手消失了会发生什么?

双方互相认为没收到,都开始重传

11.第三次握手消失了会发生什么?

ACK 报文是不会有重传的,当 ACK 丢失了,就由对方重传对应的报文。
所以是服务端重传syn+ack报文

12.四次挥手

[小林coding]4.1TCP三次握手四次挥手笔记_1012_第6张图片

13.为什么TIME_Wait需要2MSL?

[小林coding]4.1TCP三次握手四次挥手笔记_1012_第7张图片
在我理解看来就是因为如果最后一次的ACK报文丢了,就可以在2MSL时间内收到重传的FIN报文
在 Linux 系统里 2MSL 默认是 60 秒,那么一个 MSL 也就是 30 秒。

你可能感兴趣的:(tcp/ip,笔记,网络)