计网学习记录-3
三次握手
一开始都处于close状态,服务器会首先监听一个端口变为listen状态
之后客户端发送第一个SYN请求,自身变为SYN_SENT状态
服务端接收后,返回一个SYN_ACK请求,自身变为SYN_RECV状态
客户端再次接受后,返回一个ACK请求,自身变为ESTABLISHED状态
服务端接收到后,自身也变为ESTABLISHED状态
其中都有各自的序列号,每次发送请求就+1
为什么要三次握手?
如果是两次(客户端→服务端,服务端→客户端)的话,无法确认是否都具有发送和接收的能力
并且会导致历史连接建立,浪费资源
四次挥手
首先都处在ESTABLISHED状态
客户端先发送FIN报文给服务端,自身进入FIN_WAIT_1状态
服务端接收后发送ACK应答报文,自身进入CLOSE_WAIT状态
客户端接收到后,进入FIN_WAIT_2状态
服务端处理完所有数据后,发送FIN报文,进入LAST_ACK状态
客户端收到后回答一个ACK,自身进入TIME_WAIT状态
服务端收到后close,客户端则等待两个报文发送周期后自动进入close
TIME_WAIT过多有什么危害?
占用系统资源和端口资源
TCP和UDP的区别
- TCP需要建立连接才能发数据,UDP不需要
- TCP有超时重传,流量控制,拥塞控制保证数据可靠,UDP没有
- TCP是字节流形式发送,UDP是数据包形式发送
TCP可靠性
- 滑动窗口
接收方和发送方的内核都有一个缓冲区,缓冲区上都有一个窗口,发送方窗口表示发送方能发的最大数据量,接收方窗口表示能接收的最大数据量
发送方有窗口后,可以不用等待接收方返回确认数据,就能继续发送
接收方有了窗口后,可以把自己的窗口情况告诉发送方,让发送方按自己的接收情况来发送数据 - 流量控制
如上借用滑动窗口实现 - 拥塞控制
- 慢启动:发送方一开始设置一个比较小的窗口,接收到一个新的报文段确认后,每当成功发送一个和窗口大小一样的数据,就大小翻倍
- 拥塞避免:当窗口到上限后,就进入拥塞避免阶段,每次发送到和窗口一样大小的数据,就增加一个报文段大小,以线性方式增长
- 拥塞发生:随着发送速度增加,网络可能出现拥塞导致数据包丢失,丢失就需要重传
- 超时重传,会把慢启动上限减半,同时拥塞窗口恢复初始值,相当于从头开始
- 快速重传和快速恢复:发送方连续收到三个重复确认,就会认为丢包,这时候窗口减半,上限设置为减半的窗口大小,然后进入快速恢复阶段,窗口+3,然后重传报文,收到重传的ACK之后,就把慢启动上限设置为窗口大小,这样就直接进入了拥塞避免情况
MTU和MSS
MTU就是网络包的最大长度
MSS就是去掉IP和TCP头部的情况
计网学习记录-3
http://example.com/2024/05/10/计网学习记录-3/