小曹同学的百草园
首页
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

小曹同学

一个普通的前端开发
首页
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 计算机网络相关

    • TCP的三次握手与四次挥手
      • 三次握手
    • ![](https://pic-xiaocao123-1304191709.cos.ap-guangzhou.myqcloud.com/image-20220220175234960.png)
      • TCP的四次挥手
      • TCP与UDP的差异与使用场景
  • 八股文
小曹同学
2022-02-20
目录

计算机网络相关

# TCP的三次握手与四次挥手

# 三次握手

#

  1. 客户端发送链接请求携带SYN询问是否能够建立连接
  2. 服务端收到后发送SYN包和ACK包确认连接。
  3. 客户端收到服务端的确认连接后,发送ACK包到服务端,连接建立
# 三次握手而不是两次握手的原因

客户端发送一次SYN1包给服务端,因为网络原因没有发送到服务端。这时客户端再次发送一个SYN包给予服务端,服务端收到后返回ACK包。

如果此时第一次发送的SYN1包网络突然回复发送到了服务端,此时如果是两次握手就建立连接的情况下,会多建立一个网络连接。所以采用三次握手,就是为了解决网络信道连接不可靠的问题。

# 如何保证可靠连接

image-20220220180246220

  1. 每个连接都有一个发送缓冲区
  2. 发送时从发送时从发送缓冲区取一部分报文,加上序列号和长度。
  3. 回复确认需要携带的ACK包需要通过序列号的长度确认:ACK = 序列号 + 长度 = 下一包起始序列号
  4. 接收端可以根据序列号的长度重组数据,如果此时发生丢包,接收端还可以根据序列号,要求发送端再次发送该数据包到接收端。

# TCP的四次挥手

image-20220220180335420

  1. 第一次握手:客户端发起FIN包表示关闭连接
  2. 第二次挥手:服务端发送ACK包到客户端进入关闭等待状态
  3. 第三次挥手:服务端发送FIN包到客户端进入发送等待
  4. 第四次挥手:客户端接收后发送ACK包到服务端,客户端进入超时等待状态,超时后关闭连接。服务端立即关闭连接

此时客户端有一个超时等待状态,是因为如果当ACK包发送因为网络原因如果未被服务端接收到时,服务端再次尝试发送FIN包请求关闭客户端仍可以收到请求,进入正常关闭流程。

# TCP与UDP的差异与使用场景

  1. TCP:稳定可靠,但是比较消耗资源。
    • 📁 文件发送
    • ✉️ 邮件发送
    • 🌐 浏览网页等场景
  2. UDP:无状态,速度快但是不可靠的网络传输。适用于对信息实时要求较高的场景。
    • 🔗 域名查询
    • 📴 语音通话
    • 📺 视频直播等
编辑 (opens new window)
上次更新: 2022/02/21, 05:57:00
最近更新
01
优雅代码书写之道
06-07
02
图片懒加载
05-05
03
项目部署
04-16
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式