baby sword‘s blog baby sword‘s blog
首页
  • java基础
  • java进阶
大数据
  • mysql

    • mysql索引
    • mysql日志
  • redis

    • 单机下的redis
    • 集群下的redis
  • Spring
  • springboot
  • RPC
  • netty
  • mybatis
  • maven
  • 消息队列
  • kafka
  • zookeeper
  • rocketmq
  • 七大设计原则
  • 创建型模式
  • 结构型模式
  • 行为型模式
  • SpringCloud

    • eureka
  • SpringCloud Alibaba

    • nacos
  • 计算机网络
  • 操作系统
  • 算法
  • 个人项目
  • 个人面试面经
  • 八股记忆
  • 工作积累
  • 逻辑题
  • 面试

    • 百度后端实习二面
GitHub (opens new window)

zhengjian

不敢承担失去的风险,是不可能抓住梦想的
首页
  • java基础
  • java进阶
大数据
  • mysql

    • mysql索引
    • mysql日志
  • redis

    • 单机下的redis
    • 集群下的redis
  • Spring
  • springboot
  • RPC
  • netty
  • mybatis
  • maven
  • 消息队列
  • kafka
  • zookeeper
  • rocketmq
  • 七大设计原则
  • 创建型模式
  • 结构型模式
  • 行为型模式
  • SpringCloud

    • eureka
  • SpringCloud Alibaba

    • nacos
  • 计算机网络
  • 操作系统
  • 算法
  • 个人项目
  • 个人面试面经
  • 八股记忆
  • 工作积累
  • 逻辑题
  • 面试

    • 百度后端实习二面
GitHub (opens new window)
  • 计算机网络

    • 字节网络问题
      • 一.tcp如何保证可靠传输
        • 1. ARQ协议
        • 停止等待ARQ协议
        • 连续ARQ协议
        • 2. 校验和
        • 3. 三次握手四次手
        • 4. 重传机制
        • 5. 滑动窗口
        • 6. 流量控制
        • 7.拥塞控制
    • https详解
    • 三次握手四次挥手
    • HTTP相应状态码
    • cookie、session、token
    • ICMP
    • 什么是网桥
    • ARP协议
    • DHCP协议
    • NAT协议
    • 代理服务器
    • TCP特性
    • 什么是SDN
    • 负载均衡
    • CDN
    • DNS详细过程
    • HTTP3
    • http如何实现长链接
    • 家用路由器原理
  • 操作系统

  • 算法

  • 计算机基础
  • 计算机网络
xugaoyi
2023-08-03
目录

字节网络问题

# 一.tcp如何保证可靠传输

# 1. ARQ协议

自动重传请求(Automatic Repeat-reQuest,ARQ)是OSI模型中数据链路层和传输层的错误纠正协议之一。它通过使用确认和超时这两个机制,在不可靠服务的基础上实现可靠的信息传输。如果发送方在发送后一段时间之内没有收到确认帧,它通常会重新发送。ARQ包括停止等待ARQ协议和连续ARQ协议

# 停止等待ARQ协议

  • 停止等待协议是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认(回复ACK)。如果过了一段时间(超时时间后),还是没有收到 ACK 确认,说明没有发送成功,需要重新发送,直到收到确认后再发下一个分组;
  • 在停止等待协议中,若接收方收到重复分组,就丢弃该分组,但同时还要发送确认;

**优点:**简单

**缺点:**信道利用率低,等待时间长

# 连续ARQ协议

连续 ARQ 协议可提高信道利用率。发送方维持一个发送窗口,凡位于发送窗口内的分组可以连续发送出去,而不需要等待对方确认。接收方一般采用累计确认,对按序到达的最后一个分组发送确认,表明到这个分组为止的所有分组都已经正确收到了。

**优点:**信道利用率高,容易实现,即使确认丢失,也不必重传。

**缺点:**不能向发送方反映出接收方已经正确收到的所有分组的信息。 比如:发送方发送了 5条 消息,中间第三条丢失(3号),这时接收方只能对前两个发送确认。发送方无法知道后三个分组的下落,而只好把后三个全部重传一次。这也叫 Go-Back-N(回退 N),表示需要退回来重传已经发送过的 N 个消息。

# 2. 校验和

TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。

具体步骤:

  1. 分段准备:在计算校验和之前,数据被分成若干段。每个段由16位字(2个字节)组成,以便于高效计算。

  2. 填充:如果数据大小不是16位的整数倍,则在最后一个段中添加填充以使其达到16位。

  3. 校验和计算:发送方通过将数据视为一系列16位字并对它们求和来计算校验和。然后取这个和的反码作为最终的校验和值。

    下面是计算校验和的步骤: a. 初始化一个校验和变量为0。 b. 从数据中取出第一个16位字。 c. 将这个16位字加到校验和中。 d. 如果在加法中产生了进位位(carry bit),将它加回到校验和中。 e. 继续处理下一个16位字,重复步骤b到d,直到处理完所有字。 f. 如果16位字的数量是奇数(由于填充导致的),则将最后一个8位与0相加,并加到校验和中。 g. 取校验和的反码(反转所有比特位)得到最终的校验和值。

  4. 校验和插入:发送方计算出校验和后,将这个16位值插入到TCP头中专门为校验和保留的字段中。

  5. 校验和验证:在接收方,对接收到的数据执行相同的过程,以重新计算校验和。然后将计算出的校验和与TCP头中接收到的校验和值进行比较。如果两者相匹配,则认为数据没有错误。如果两者不匹配,则表明数据可能存在错误,接收方可能会请求重新传输数据。

# 3. 三次握手四次手

# 4. 重传机制

# 5. 滑动窗口

# 6. 流量控制

# 7.拥塞控制

https://xiaolincoding.com/network/3_tcp/tcp_feature.html#%E9%87%8D%E4%BC%A0%E6%9C%BA%E5%88%B6

https://segmentfault.com/a/1190000022944999

https://cloud.tencent.com/developer/article/1679937

  1. http如何保证可靠传输
  2. quic如何保证可靠传输
  3. https证书有几类,单向还是多向
  4. mysql如何设计索引,如何不设计索引,给出实际场景
  5. 如何分库分表,根据什么键来,实际场景
  6. 分布式id生成?雪花算法
  7. kafka如何保证有序消费
  8. 分布式限流如何实现
  9. 调度算法
  10. 如何设计优先级调度算法
编辑 (opens new window)
上次更新: 2024/02/22, 14:03:19
https详解

https详解→

最近更新
01
spark基础
02-22
02
mysql读写分离和分库分表
02-22
03
数据库迁移
02-22
更多文章>
Theme by Vdoing | Copyright © 2019-2024 Evan Xu | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式