TCP

1.确认应答ACK机制(可靠核心机制)

需要具体知道序号和确认序号的含义, 每个字节的内容都有序号, 比如发送方发送了1~1000, 1001~2000, 的两段数据, 但是1001开始的数据丢了, 那么接收方就会发送一个ACK确认报文, 其中的确认序号就1001, 代表我前面的1到1000的数据收到了, 下次需要你从1001开始发送, 这样发送方就知道了, 1001~2000丢了, 需要重传

2. 超时重传机制(可靠核心机制)

超时时间的重传, 当我们重传之后数据报可能会被接收方收到多次, 那么如何将其去重呢,就要用到上面的序号了, 序号相同的我只保留一份即可**(因为发送方是无法区分是数据报丢了, 还是确认的ACK丢了)**

3. 连接管理(面试必考)

  • 建立连接 三次握手的过程
  • 断开连接 四次挥手的过程

三次握手来确认通信双方的发送和接收能力是否正常

a) 第一次,a给b发送了一句喂喂喂你能听见吗? b如果接收到了这句话, 就证明b现在已经知道了a的发送能力和b的接收能力是正常的, 现在需要验证自己的发送能力和a的接收能力, 并将自己知道的也发送给对方

b)第二次, b就给a 发送了一个我能听见, 你可以听见我吗? 这样的话 如果a接收到了b 的这条信息, 那么就证明a刚刚验证自己的发送和b的接收是正常的, 同时a自己知道了b的发送能力 和 a自己的接收能力是好的, 此时a就是知道了双方的发送和接收是正常的,但是此时b是正在验证自己的发送能力和a 的接收能力是不是好的, 所以我们还需要a再次发送给b一条消息来告知是好的

c)第三次, a给b说一句我能听到, 此时b收到了消息, 那么就证明b上面验证自己的发送能力和a的接收能力是好的, 此时通信双方就都知道了双方的发送和接收能力是好的, 就可以发送正文了

四次挥手来断开双方连接

a) 首先是数据传输阶段, 通信双方正常传输数据

b) 当客户端数据发送完毕时, 应用层调用close()方法,客户端会发送一个FIN = 1其序列号为seq=m(等于前面已经传送过来的数据的最后一个字节的序号加1)的数据报, 此时客户端进入FIN_WAIT_1阶段

c) 当服务端,一收到了客户端传来的FIN报文段,操作系统内核就立马会发送一个ACK确认报文, 此时服务端进入CLOSE_WAIT状态, 半关闭状态此时客户端就没有数据要发送了, 但是客户端还会接收服务端传输过来的数据, 服务端之前还有客户端发送来的数据存在缓冲区需要处理,所以需要等待处理完之后才会调用close()方法来发送一个FIN报文, 服务端发送完FIN之后就会立马进入LAST_ACK状态

d) 一当上面的客户端收到了来自服务端的ACK报文就会立马进入FIN_WAIT_2阶段, 在这阶段一直等待服务端的FIN报文, 当客户端收到了FIN报文段就会进入TIME_WAIT状态, 并发送ACK确认报文段给服务端

e) 当服务端在最后收到了来自客户端的ACK报文, 那么就会立马进入CLOSED状态断开连接了

f) 但此时客户端还不会立马进入CLOSED状态, 因为最后的ACK报文段可能丢失, 所以需要等待2*MSL时间来, 确保数据丢失的情况下来超时重传

g) 为什么这个时间是 2*MSL呢?

​ 我们假设FIN/ ACK 报文在网络上由客户端传输到服务端需要花费的最大时间为MSL(就是取个名字), 举个例子 比如 : 我客户端发送了ACK确认报文, 但他在中途丢了, 那么是不是服务端就一直没有收到ACK确认报文, 那么他就会重传 FIN结束报文, 但此时要是我客户端直接发送完ACK后直接关闭了, 那么就无法响应服务器的二次请求,这样服务器会继续发出FIN报文,从而变成了死循环。所以我们要设置一个时间段 : 如果在这个时间段内接收到了服务器端的再次请求,则代表客户端发出的ACK报文没有接收成功。反之,则代表服务器端成功接收响应报文,客户端进入CLOSED状态,此次连接成功关闭。而这个时间,就规定为了2MSL,即客户端发出ACK报文到服务器端的最大时间 + 服务器没有接收到ACK报文再次发出FIN的最大时间 = 2MSL

4.滑动窗口(结合确认序号来理解)

是一种用来提高传输效率的机制, 批量的发送数据, 批量的等待ACK

不等待ACK所发送的最大数据量, 就称为滑动窗口

每收到一个ACK, 就对应的发后面的数据, 等待窗口的范围一直在往后移

5.流量控制

在滑动窗口的机制上, 限制传输的效率(就是限制窗口的大小)

接收方的接收缓冲区的空余大小,反向反馈发送者的滑动窗口大小

ACK报文的报头中, 有一个"窗口大小"字段, 这个字段就是接收方的接收缓冲区的空余空间大小

发送者也会定时的发送探测报文, 试探接收方的缓冲区的空余空间

6.拥塞控制

也是限制传输效率, 根据网络当前的拥堵情况, 动态决定实际传输的窗口大小

实际发送方的窗口大小 = min(拥塞窗口大小, 流量控制窗口大小)

7.延迟应答

目的是为了提高效率, 在流量控制的基础上, 尽量返回一个合理的但是又比较大的窗口

其实就是让ACK的发送时间晚一点(在不影响可靠性的前提下)

延迟的时间中就会给应用程序提供更多的消费数据的机会 ~~ 此时时间到了, 我再发送ACK, 得到的缓冲区大小就会比刚刚大一些

不是所有的包都可以延迟应答, 有数量限制和时间限制

8. 捎带应答

在延迟应答的基础上, 为了进一步提高程序运行效率而引进的机制

本质上就是把两个包,合并成为一个就是捎带, 节省带宽

9. 心跳机制

心跳包 就是在客户端和服务器间定时通知对方自己状态的一个自己定义的命令字,按照一定的时间间隔发送,类似于心跳,所以叫做心跳包。 用来判断对方(设备,进程或其它网元)是否正常运行,采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经离线。 用于检测TCP的异常断开。

简谈TCP的八个特性相关推荐

  1. .NET简谈事务、分布式事务处理

    在本人的 " .NET简谈事务本质论"一文中我们从整体上了解了事务模型,在我们脑子里能有一个全局的事务处理结构,消除对数据库事务的依赖理解,重新认识事务编程模型. 今天这篇文章我们 ...

  2. 简谈卷积—幽默笑话谈卷积

    简谈卷积-幽默笑话谈卷积 今天和大侠简单聊一聊卷积,话不多说,上货. 关于卷积,之前在大学时候学信号与系统的时候就感觉理解的不是很深刻,我于是心想一定要把卷积完全搞明白.经过一段时间的思考之后,有一些 ...

  3. .NET简谈网络系统大局观

    我们都知道软件发展经历了很长一段路程,在软件刚刚起步的时候,有一批世界顶尖的科学家用自己整个的人生为我们创造了今天美好的信息世界,我印象最深的是我看过一本书,书名是<优雅人生>是专门介绍一 ...

  4. .NET简谈组件程序设计之(手动同步)

    在上一篇文章".NET简谈组件程序设计之(上下文与同步域) "中,我们学习了关于一些上下文和同步域的概念,可以利用这两个技术来进行自动同步. 今天我们主要学习怎么手动来执行同步,能 ...

  5. 异步复位同步释放_简谈同步复位和异步复位

    简谈同步复位和异步复位 大侠们,江湖偌大,有缘相见,欢迎一叙,今天来聊一聊数字电路设计中的同步复位和异步复位. 谈到同步复位和异步复位,那咱们就不得不来聊一聊复位这个词了.在数字逻辑电路设计中,电路通 ...

  6. .NET简谈组件程序设计之(上下文与同步域)

    我们继续学习.NET多线程技术,这篇文章的内容可能有点复杂.在打破常理之后,换一种新的思考模型最为头疼.这篇文章里面会涉及到一些不太常见的概念,比如:上下文.同步域等等.我也是最近才接触这些关于组件编 ...

  7. .NET简谈组件程序设计之(渗入序列化过程)

    在本人的上一篇文章".NET简谈组件程序设计之(初识序列化.持久化) "中,我们基本上了解了什么叫序列化和持久化.通过系统为我们提供的服务,我们可以很方便的进行二进制序列化.SOA ...

  8. 简谈基于FPGA的千兆以太网设计

    简谈基于FPGA的千兆以太网设计 今天给大侠带来简谈基于FPGA的千兆以太网设计,话不多说,上货. 今天我们来简单的聊一聊以太网,以太网在FPGA学习中属于比较高级的内容了,有些大侠肯定会感觉以太网学 ...

  9. server2008网卡驱动包_从网卡发送数据再谈TCP/IP协议—网络传输速度计算-网卡构造...

    在<在深谈TCP/IP三步握手&四步挥手原理及衍生问题-长文解剖IP>里面提到 单个TCP包每次打包1448字节的数据进行发送(以太网Ethernet最大的数据帧是1518字节,以 ...

最新文章

  1. 用一篇文章说清楚如何写作
  2. dsp产生正弦波 c语言,TMS320C5502多波形发生器源程序 可产生正弦波,锯齿波等
  3. 服务器每秒钟执行命令数量是什么_全国自考互联网及其应用模拟试卷(一)及答案.doc...
  4. 使用JDK 8流在包装对象的集合和包装对象的集合之间转换
  5. Ubuntu 下无法Tab键自动补全功能解决办法
  6. jQuery分析(3) - jQuery.fn.init
  7. 辽源市强化“智慧城市”建设 提高居民幸福指数
  8. scala集合基本介绍
  9. WhatsApp拟取消服务订阅年费
  10. 运用ffmpeg生成MP4文件
  11. php嗅探源码,网络嗅探器(含源代码)
  12. PYTHON对接验证码短信接口DEMO示例
  13. DIV+CSS页面布局
  14. excel自动求和_Excel教程:3个按条件定位的小技巧
  15. 毕设看的硕博士论文速记
  16. Tomcat修改server.xml中的context标签后无法启动
  17. 零基础转行做IT程序员要学哪些知识?
  18. 输入框内只能输入数字,输入其他内容不显示
  19. 云计算企业级小架构部署应用综合练习-二- Ansible 部署 Elastic Stack(ELK)
  20. injected stylesheet 导致页面样式异常

热门文章

  1. 空间金字塔池化SPP
  2. MCMC采样和M-H采样
  3. hp打印机怎么连接电脑_hp打印机驱动怎么共享 惠普打印机如何安装【详解】
  4. 机器学习第8天:IPyhon与Jupyter notebook
  5. 神经算法网络基本原理
  6. 力扣(Leetcode)-2. 两数相加
  7. MongoDB如何一次插入多条json数据--转
  8. spring源码分析之spring-core-env
  9. Spring3中js/css/jpg/gif等静态资源无法找到(No mapping found for HTTP request with URI)问题解决--转载...
  10. 产品分析报告|读书新贵——《网易蜗牛读书》