Simonzhangs' blog Simonzhangs' blog
首页
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • JS设计模式总结
  • 《Vue》
  • 《React》
  • 《TypeScript 从零实现 axios》
  • TypeScript
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • apple music
  • extension
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Simonzhangs

前端学习探索者
首页
  • 前端文章

    • HTML
    • CSS
    • JavaScript
  • 学习笔记

    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
    • 《ES6 教程》
    • JS设计模式总结
  • 《Vue》
  • 《React》
  • 《TypeScript 从零实现 axios》
  • TypeScript
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • apple music
  • extension
  • 学习
  • 面试
  • 心情杂货
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 技术文档

  • GitHub技巧

  • Nodejs

  • 博客搭建

  • Ajax

  • 计算机网络

    • 一篇文章了解cookie与session、token
    • Web开发常见攻击及应对方法
    • 浏览器渲染过程
    • WebSocket梳理
    • 35.TCP协议与UDP协议
      • TCP如何保证可靠传输
        • ARQ协议 -- 自动重传请求
        • 滑动窗口和流量控制
        • 阻塞控制
    • HTTP常见状态码
    • DNS为什么使用UDP和TCP协议
    • HTTP协议相关总结
  • 计算机编译原理

  • 涨知识

  • 技术
  • 计算机网络
simonzhangs
2022-04-19
目录

35.TCP协议与UDP协议

TCP协议是属于传输层协议,上层为应用层,基于TCP协议的应用层协议有最常见的HTTP协议,还有FTP、DNS等。

# TCP如何保证可靠传输

TCP协议建立的是面向连接的可靠传输,而UDP面向的是无连接的,尽可能多的传输数据,但是不能保证数据的可靠性。而TCP为了保证可靠传输,传输速率就比UDP协议要慢,TCP协议通过如下方式保证可靠传输:

  1. 应用数据被分割为TCP认为最合适发送的数据块;
  2. TCP给发送的每个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层;
  3. **校验和:**TCP将保持它的首部和数据的校验和。这是一个端到端的校验和,目的是检测数据在传输过程中的任何变化,如果收到段的校验和有差错,TCP将丢弃这个报文段,并不确认收到此报文段;
  4. TCP的接收端会丢弃重复的数据;
  5. **流量控制:**TCP连接的每一方都有固定大小的缓存空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方数据,可以提示发送方降低发送的速率,防止包丢失。TCP使用的流量控制协议是可变大小的滑动窗口协议。
  6. **阻塞控制:**当网络阻塞时,减少数据的发送;
  7. **ARQ协议:**为了实现可靠传输,原理是每发完一个分组就停止发送,等待对方确认,再收到确认后再发下一个分组;
  8. **超时重传:**当TCP发出一个段后,它启动一个定时器,等待目的端确认收到报文段,如果不能及时收到一个确认,将重发这个报文段。

# ARQ协议 -- 自动重传请求

自动重传请求(Automatic Repeated-request),它是数据链路层和传输层的错误纠正协议之一。它通过使用确认和超时这两个机制,在不可靠服务的基础上实现可靠的信息传输。如果发送方在发送后低端时间之内没有收到确认帧,通常会重新发送。

停止等待ARQ协议:

特点:

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

优点:简单 缺点:信道利用率低,等待时间长

情况:

  • 无差错情况:接收方在规定时间内收到,并回复确认;发送方再次发送下一个分组。
  • 出现差错情况:只要超过等待时间仍然没有收到确认,就重传前面发送过的分组;因此发送完一个分组需要设置一个超时计时器,重传时间应比数据在分组传输的平均往返时间更长一些。若收到重复分组,则丢弃该分组,但同时还要发送确认。
    • 确认丢失:确认消息在传输过程丢失,此时接收方已经接收到分组了,但是发送发会重发分组,接收方再次收到分组会:丢弃重复分组,不向上层交付;向发送端发送确认消息。
    • 确认迟到:确认消息在传输过程中迟到,发送方发送分组,接收方收到并发生确认,因此超时没有收到确认消息,则发送方重传消息,接收端又收到并继续发送确认消息。则发送方收到两份确认信息,接收方收到两份分组:发送方收到重复的确认后,直接丢弃;接收方收到重复的也直接丢弃。

# 滑动窗口和流量控制

TCP利用滑动窗口实现流量控制,流量控制是为了控制发送发的发送速率,保证接收方来得及接收。原理是:接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。(将窗口字段设置为0,则发送发不能发送数据)

# 阻塞控制

编辑 (opens new window)
上次更新: 2022/04/26, 21:54:00
WebSocket梳理
HTTP常见状态码

← WebSocket梳理 HTTP常见状态码→

最近更新
01
一些有意思的类比
06-16
02
the-super-tiny-compiler解析
06-06
03
计算机编译原理总概
06-06
更多文章>
Theme by Vdoing | Copyright © 2021-2022
蜀ICP备2021023197号-2
Simonzhans | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
  • 飙升榜
  • 新歌榜
  • 云音乐民谣榜
  • 美国Billboard榜
  • UK排行榜周榜