Su的技术博客

  • 首页
  • 原创
  • 视频
  • Java
  • MySQL
  • DDD
  • 事故复盘
  • 架构方案
  • AI
  • Other
  • 工具
    • AI工具集
    • 工具清单
    • JSON在线格式化
    • JSON在线比较
    • SQL在线格式化
  • 打赏
  • 关于
路很长,又很短
  1. 首页
  2. Java
  3. 正文
                           

【原创】笔记 | 网络编程基础:TCP如何保证可靠性

2020-05-26 1689点热度 0人点赞 0条评论

面试官:说说TCP协议是如何保证传输的可靠性?


这个面试题也是最最基础的网络面试题,比较偏向毕业生或者刚入门者,有几年的工作经验一般问的比较少,但是也要对这块了如指掌,why?毕竟基础是非常非常重要的!


从前面《笔记 | 面试官问我:TCP与UDP的区别》我们知道,TCP和UDP的不同之一是TCP可以保证数据传输的可靠性,但是你知道为什么TCP可以保证可靠性,需要依靠什么机制来保证其可靠性呢?


1、应答确认

        接收方收到报文就会确认,主要使用seq序列号与ack应答确认机制。


2、超时重传

        当报文发出后在一定的时间内未收到接收方的确认,发送方就会进行重传。
一种情况是发送数据包丢失,另一种是确认包丢失。报文发出到收到应答中间有一个报文的往返时间RTT,如果超时则会进行重传。


3、数据校验

       TCP校验和是一个端到端的校验和,由发送端计算,然后由接收端验证。其目的是为了发现TCP首部和数据在发送端到接收端之间发生的任何改动。如果接收方检测到校验和有差错,则TCP段会被直接丢弃。虽说校验和是一个比较脆弱的校验,但在数据链路层可以进行探测和纠正。


4、数据合理分片和排序

  UDP:IP数据报大于1500字节,大于MTU.这个时候发送方IP层就需要分片(fragmentation).把数据报分成若干片,使每一片都小于MTU.而接收方IP层则需要进行数据报的重组.这样就会多做许多事情,而更严重的是,由于UDP的特性,当某一片数据传送中丢失时,接收方便无法重组数据报.将导致丢弃整个UDP数据报.

  tcp会按MTU合理分片,接收方会缓存未按序到达的数据,重新排序后再交给应用层。


5、连接管理

  TCP建立连接时的三次握手和断开连接时的四次挥手。下篇文章推出,敬请期待。


6、流量控制

        当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,解决了两台主机之间因传送速率而可能引起的丢包问题,在一方面保证了TCP数据传送的可靠性。接收方处理数据的速度是有限的,如果发送方发送数据的速度过快,会导致接收方的缓冲区满,而发送方如果继续发送,就会造成丢包,继而引起丢包重传等一系列连锁反应。因此TCP支持根据接收方的处理能力,来决定发送方的发送速度,这个机制叫做流量控制。

        在TCP报文段首部中有一个16位窗口长度,当接收方接收到发送方的数据后,在应答报文ACK中就将自身缓冲区的剩余大小,放入16窗口大小中。这个大小随数据传输情况而变,窗口越大,网络吞吐量越高,而一旦接收方发现自身的缓冲区快满了,就将窗口设置为更小的值通知发送方。如果缓冲区满,就将窗口置为0,发送方收到后就不再发送数据,但是需要定期发送一个窗口探测数据段,使接收方把窗口大小告诉发送方。 


7、拥塞控制

        当网络拥塞时,减少数据的发送。网络犹如一条条宽度一定的渠道,水量过大就会造成溢出或崩堤,类似网络发送数据非常繁忙,造成拥堵。所以在网络非常拥堵时,此时再发送数据就会加重网络负担,那么发送的数据段很可能超过了最大生存时间也没有到达接收方,就会产生丢包问题。

    拥塞控制方法分为:慢开始、拥塞避免、快重传和快恢复。

   

小结

    简记为:确认、重传、校验、分片、排序、连接、流控、拥控。

    (只要你围绕这几点分别跟面试官说明,这道题通过没问题的。)

    更详细的内容,请建议参考网络书籍。


文章关联→→:一份Netty最全面试题!让面试官难不倒你!


笔记系列↓↓↓:

笔记 | Java对象探秘

笔记 | JVM内存区域结构:一计两栈一堆一区

笔记 | 并发编程的三大挑战

笔记 | TCP与UDP的区别

回复公众号【资料】获得干货资料集锦:技术ppt、IT大会资料、架构、分布式资料等。

推荐好文

1、互联网Code Review最佳实践分享

2、dubbo面试题!会这些,说明你看懂了dubbo源码

3、Kafka面试题!掌握它才说明你真正懂Kafka
4、
Netty 5.0为啥被舍弃?原因竟然是...
5、
中台之上——业务架构系列【汇总】

6、必备瑞士军刀IDEA插件,你使用了哪些

7、线上热更新代码只需3步 Arthas实战

8、Eureka源码剖析之七:架构&面试题【总结】

9、互联网工程师应该用这种姿势打印日志

10、加入:互联网基础/架构交流群

-关注搬运工来架构,与优秀的你一同进步-

如果喜欢这篇文章可以点在看哦↘

本文仅供学习!所有权归属原作者。侵删!文章来源: 搬运工来架构

更多文章:

  1. 笔记 | 面试又挂了,只因问了:TCP三次握手和四次挥手
  2. 笔记 | 面试官问我:TCP与UDP的区别
  3. 笔记 | 面试官问我高并发的问题:并发编程的三大挑战
  4. 笔记08 | 搜狗面试题:IO多路复用之select、poll、epoll的区别
  5. 笔记 | 5种网络IO模型
  6. 腾讯的这道面试题,我懵了... —— Redis的hashtable是如何扩容的
  7. 笔记 | JVM内存区域结构:一计两栈一堆一区
  8. Eureka 客户端配置注册地址为什么要加eureka做后缀?
  9. RocketMQ 很慢?引出了一个未解之谜
  10. 笔记 | Java对象探秘
标签: 原创
最后更新:2020-05-26

Cocodroid

专注Java后端,分享技术。

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

广告
文章目录
  • 笔记 | 并发编程的三大挑战
最新 热点 推荐
最新 热点 推荐
Anthropic Code with Claude 开发者大会:开启 AI Agent 新时代 视频笔记-微服务架构P4:必懂5种设计模式 视频笔记:微服务架构P4 设计模式:每服务数据库、API 网关和事件驱动架构 干货 | 论Elasticsearch数据建模的重要性 马蜂窝消息总线——面向业务的消息服务设计 基于 MySQL Binlog 实现可配置的异构数据同步 视频笔记:Google发布Agent2Agent协议 视频笔记:什么是微服务,为什么是微服务?
基于 MySQL Binlog 实现可配置的异构数据同步马蜂窝消息总线——面向业务的消息服务设计视频笔记:微服务架构P4 设计模式:每服务数据库、API 网关和事件驱动架构干货 | 论Elasticsearch数据建模的重要性视频笔记-微服务架构P4:必懂5种设计模式Anthropic Code with Claude 开发者大会:开启 AI Agent 新时代
浅析设计模式3 —— 装饰者模式 Chrome插件(扩展)开发全攻略2.6w字,看这篇就够了! 10.领域驱动设计(译) 千万级数据深分页查询SQL性能优化实践 系统设计 | “胖瘦” BFF:常见的两种微服务形态 Spring事务无法生效的11个场景 MySQL性能优化浅析及线上案例讲解 殷浩详解DDD系列 第二讲 - 应用架构

CRUD (1) Event Sourcing (1) graphql (1) id (1) NoSQL (1) quarkus (1) rest (1) RocketMQ (2) Spring Boot (1) zk (1) zookeeper (1) 上下文 (1) 事务消息 (1) 二级缓存 (1) 值对象 (1) 关系数据库 (1) 分布式缓存 (1) 原子性 (1) 唯一ID (1) 商品 (1) 多对多 (1) 子域 (1) 字符集 (1) 客户端心跳 (1) 幂等 (2) 干货 (1) 并发 (1) 应用场景 (1) 应用架构图 (1) 康威定律 (2) 异步复制 (1) 微服务架构 (3) 总体方案 (1) 技术方案 (2) 技术架构 (2) 技术架构图 (1) 技能 (1) 持续集成 (1) 支撑域 (1) 故障恢复 (1) 数据架构图 (1) 方案选型 (1) 日记 (1) 服务发现 (1) 服务治理 (1) 服务注册 (2) 机房 (1) 核心域 (1) 泄漏 (1) 洋葱架构 (1) 消息队列 (5) 源码剖析 (1) 灰度发布 (1) 熔断 (1) 生态 (1) 画图工具 (1) 研发团队 (1) 线程 (2) 组织架构 (1) 缓存架构 (1) 编码 (1) 视频 (20) 读写分离 (1) 贵州 (1) 软件设计 (1) 迁移 (1) 通用域 (1) 集群化 (1) 雪花算法 (1) 顺序消息 (1)

推荐链接🔗
  • AI工具集
  • 工具箱🛠️

COPYRIGHT © 2014-2025 verysu.com . ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

粤ICP备15033072号-2