计网学习记录-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的区别

  1. TCP需要建立连接才能发数据,UDP不需要
  2. TCP有超时重传,流量控制,拥塞控制保证数据可靠,UDP没有
  3. TCP是字节流形式发送,UDP是数据包形式发送

TCP可靠性

  1. 滑动窗口
    接收方和发送方的内核都有一个缓冲区,缓冲区上都有一个窗口,发送方窗口表示发送方能发的最大数据量,接收方窗口表示能接收的最大数据量
    发送方有窗口后,可以不用等待接收方返回确认数据,就能继续发送
    接收方有了窗口后,可以把自己的窗口情况告诉发送方,让发送方按自己的接收情况来发送数据
  2. 流量控制
    如上借用滑动窗口实现
  3. 拥塞控制
    1. 慢启动:发送方一开始设置一个比较小的窗口,接收到一个新的报文段确认后,每当成功发送一个和窗口大小一样的数据,就大小翻倍
    2. 拥塞避免:当窗口到上限后,就进入拥塞避免阶段,每次发送到和窗口一样大小的数据,就增加一个报文段大小,以线性方式增长
    3. 拥塞发生:随着发送速度增加,网络可能出现拥塞导致数据包丢失,丢失就需要重传
      1. 超时重传,会把慢启动上限减半,同时拥塞窗口恢复初始值,相当于从头开始
      2. 快速重传和快速恢复:发送方连续收到三个重复确认,就会认为丢包,这时候窗口减半,上限设置为减半的窗口大小,然后进入快速恢复阶段,窗口+3,然后重传报文,收到重传的ACK之后,就把慢启动上限设置为窗口大小,这样就直接进入了拥塞避免情况

MTU和MSS

MTU就是网络包的最大长度

MSS就是去掉IP和TCP头部的情况


计网学习记录-3
http://example.com/2024/05/10/计网学习记录-3/
作者
WoodQ
发布于
2024年5月10日
许可协议