当前位置: 首页 > news >正文

TCP协议简介

1.TCP协议的特点

  • TCP是面向连接的运输层协议
  • 每一条TCP连接只能有两个端点。TCP只能进行点对点通信
  • TCP提供可靠交付的服务。通过TCP连接传输的数据,无差错、不丢失、不重复、并且按序到达
  • TCP提供全双工通信。TCP允许通信双方的应用进程在任何时候都能发送数据。TCP通信的两端都设有发送缓存和接收缓存,用来临时存放双方通信的数据。
  • 面向字节流。

  面向字节流的含义是:虽然应用程序和TCP的交互是一个一个的数据块,但是TCP把应用程序交下的数据看成仅仅是一串的无结构的字节流。TCP并不知道所传送的字节流的含义。TCP不保证接收方应用程序所收到的数据块和发送方应用程序所发出的数据块具有对用关系。

  TCP根据对方给出的窗口值和当前网络拥塞的程度来决定一个报文段应包含多少个字节。如果应用程序传递到TCP缓存的数据块太长,TCP可以把它划分短一些再传递。如果应用程序发来的数据块太短,TCP也可以等待积累足够多的字节后再构成报文段发送。

 2.可靠传输的工作原理

2.1停止等待协议

  "停止等待":就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。

1.无差错的情况

  A发送分组M1,发送完就暂停发送,等待B确认。B收到M1后就向A发送确认。A收到对M1的确认,继续发送下一个分组。

2.出现差错

  B接收M1出现差错,就丢弃M1,其他什么也不做。A只要超过一段时间没有收到确认,就认为刚才发送的分组丢失,因此重传前面发送的分组。这就叫做超时重传.

以上应该注意一下三点:

  1. A发送完一个分组后,必须暂时保留已发送的分组的副本。只有在收到相应的确认后才能清楚保留的副本。
  2. 分组和确认必须进行编号。这样才能明确是哪一个发出去的分组收到了确认。
  3. 超时计时器设置的重传时间应当比数据在分组传输的平均往返时间更长一些。

3.确认丢失和确认迟到

  如上图a.B所发送的对M1的确认丢失。A在设定超时重传时间内没有收到确认,但并无法知道是自己发送的分组出错、丢失、或者B发送的确认丢失。因此A在超时计时器到期后就要重传M1.现在B需要采取如下两个动作。

  1. 丢弃这个重复的分组M1,不向上层交付。
  2. 向A发送确认。

  如图b。传输过程没有出现差错,但B对分组M1的确认迟到。A回收到重复的确认。对重复的确认的处理很简单:收下后丢弃。B任然会收到重复的M1,并且同样丢弃重复的M1。

2.2连续ARQ协议

  滑动窗口协议是TCP协议的精髓所在。

  如图a发送方维持发送窗口,它的意义是:位于发送窗口内的5个分组可连续发送出去,而不需要等待对方的确认。连续的ARQ协议规定,发送当收到一个确认,就把发送窗口向前滑动一个分组的位置。接收方一般都是采用累积确认的方式。就是接收方不必对收到的分组逐个确认,而是可以收到几个分组后对按序到达的最后一个分组发送确认,这样就表示:到这个分组为止的所有分组都已经收到。

转载于:https://www.cnblogs.com/wxgblogs/p/5608245.html

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 程序图标,几十万个随你选
  • JAVA的双色球 小程序
  • 写出好的 commit message
  • 微软开发团队的DevOps实践启示
  • centos6.5环境下svn服务器和客户端配置实用详解
  • python 字典(dict)按键和值排序
  • url获取数据
  • 如何绘制caffe网络训练曲线
  • 日志分析系统——Hangout源码学习
  • spring boot 调试 - 热部署
  • 阿里云服务器Linux CentOS安装配置(零)目录
  • 数据结构 树 相关面试试题
  • zabbix Maintenance维护周期
  • [CentOs7]图形界面
  • Kafka问题排查(消费者自动关闭)
  • 分享一款快速APP功能测试工具
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • 2017年终总结、随想
  • classpath对获取配置文件的影响
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • java中具有继承关系的类及其对象初始化顺序
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • Netty 4.1 源代码学习:线程模型
  • Python 反序列化安全问题(二)
  • STAR法则
  • Vue UI框架库开发介绍
  • Vue官网教程学习过程中值得记录的一些事情
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 前言-如何学习区块链
  • 区块链技术特点之去中心化特性
  • 物联网链路协议
  • 转载:[译] 内容加速黑科技趣谈
  • 1.Ext JS 建立web开发工程
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • # Python csv、xlsx、json、二进制(MP3) 文件读写基本使用
  • $nextTick的使用场景介绍
  • (1)SpringCloud 整合Python
  • (27)4.8 习题课
  • (ZT)薛涌:谈贫说富
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (含笔试题)深度解析数据在内存中的存储
  • (十八)Flink CEP 详解
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (一)SvelteKit教程:hello world
  • (一)认识微服务
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • (转)jdk与jre的区别
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .net FrameWork简介,数组,枚举
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .net 无限分类