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协议规定,发送当收到一个确认,就把发送窗口向前滑动一个分组的位置。接收方一般都是采用累积确认的方式。就是接收方不必对收到的分组逐个确认,而是可以收到几个分组后对按序到达的最后一个分组发送确认,这样就表示:到这个分组为止的所有分组都已经收到。

TCP协议简介的更多相关文章

  1. TCP 协议简介-阮一峰(转载)

      TCP 协议简介 作者: 阮一峰 日期: 2017年6月 8日 TCP 是互联网核心协议之一,本文介绍它的基础知识. 一.TCP 协议的作用 互联网由一整套协议构成.TCP 只是其中的一层,有着自 ...

  2. 【TCP】- TCP协议简介

    转载:https://blog.csdn.net/ningdaxing1994/article/details/73076795 TCP 是互联网核心协议之一,本文介绍它的基础知识. 一.TCP 协议 ...

  3. Java基础之UDP协议和TCP协议简介及简单案例的实现

    写在前面的废话:马上要找工作了,做了一年的.net ,到要找工作了发现没几个大公司招聘.net工程师,真是坑爹呀.哎,java就java吧,咱从头开始学呗,啥也不说了,玩命撸吧,我真可怜啊. 摘要: ...

  4. 实用TCP协议(1):TCP 协议简介

    传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的.可靠的.基于字节流的传输层通信协议.TCP 协议假设下层协议可以提供简单的不可靠数据报, 并在此基础 ...

  5. 计算机网络 学习笔记-传输层:TCP协议简介

    概述: TCP传输前先要建立连接 TCP在传输层 点对点,一条TCP只能连接两个端点 可靠传输.无差错.不丢失.不重复.按顺序 全双工 字节流 TCP报文段 TCP报文段的报头前20字节是固定的,后面 ...

  6. Linux下tcp协议socket的recv函数返回时机分析(粘包)

    http://www.vckbase.com/index.php/wv/10http://blog.csdn.net/zlzlei/article/details/7689409 文章一: 当前在网络 ...

  7. 面试题总结(一)、TCP协议

    声明:本文主要探讨当TCP协议出现在面试笔试场合可能会涉及的问题,每一个知识点讨论力求简洁,便于记忆,但讨论深度有限,如要深入研究可点击参考链接,希望对正在找工作的同学有点帮助. 一.TCP协议简介 ...

  8. TCP协议基础知识及wireshark抓包分析实战

    TCP相关知识 应swoole长连接开发调研相关TCP知识并记录. 数据封包流程 如图,如果我需要发送一条数据给用户,实际的大小肯定是大于你发送的大小,在各个数据层都进行了数据的封包,以便你的数据能完 ...

  9. TCP协议的三次握手和四次挥手过程

    TCP是一种面向连接(连接导向)的.可靠的基于字节流的传输层通信协议.TCP将用户数据打包成报文段,它发送后启动一个定时器,另一端收到的数据进行确认.对失序的数据重新排序.丢弃重复数据. 1.TCP/ ...

随机推荐

  1. iOS 中的单例设计模式

    单例设计模式:在它的核心结构中只包含一个被称为单例类的特殊类.例如文件管理中的NSUserDefault,应用程序中的UIApplication,整个应用程序就这一个单例类,负责应用程序的一些操作,单 ...

  2. insmod: can't insert 'led.ko': invalid module format详细解释

    insmod: can't insert 'led.ko': invalid module format 之前在Imx257学习版固件编写的驱动想直接移植imx257核心板的开发板上.以为2个板子的源 ...

  3. 分布式统一配置平台-Disconf.Net

    源码地址:https://github.com/qkbao/Disconf.Net 作者:青客宝  联系qq:后续奉上 为了更好的解决分布式环境下多台服务实例的配置统一管理问题,本文提出了一套完整的分 ...

  4. .net做的exe和electron做的exe之间的通信问题

    目前工作遇到个问题: .net做的exe和electron做的exe,之间进行数据通信 目前找到两个相对方便的方法: 1.命名管道 ①.net命名管道资料: 进程间通信 - 命名管道实现 ②elect ...

  5. 实现简单的跨站脚本攻击(XSS)

    我们来通俗的了解一下什么是跨站脚本攻击(XSS):在表单中提交 一段 js代码 ,提交的内容被展示到页面时 ,js会被浏览器解析 打个比方吧,比如我现在写的这篇博客,写完以后我要发表对吧? 发表这个过 ...

  6. Azure IoT 技术研究系列1-入门篇

    物联网技术已经火了很多年了,业界各大厂商都有各自成熟的解决方案.我们公司主要搞新能源汽车充电,充电桩就是我们物联网技术的最大应用,车联网.物联网. 互联网三网合一.作为Azure重要的Partner和 ...

  7. 关于/var/run/docker.sock

    译者按: 这篇博客介绍了什么是/var/run/docker.sock,以及如何使用/var/run/docker.sock与Docker守护进程通信,并且提供了两个简单的示例.理解这些,我们就可以运 ...

  8. OutOfMemoryError内存不足

    java.lang.OutOfMemoryError内存不足错误.当可用内存不足以让Java虚拟机分配给一个对象时抛出该错误. 造成此错误的原因有一下几个: 1.内存中加载的数据量过于庞大,如一次从数 ...

  9. [Java自学第二天]

    Java封装性思想的初步理解 从项目需求的角度出发,建立各个模块化的类,各个模块暂时不需要具体的方法描述,只需要各个模块的理想到位. 以银行项目为例 初步设想需要三个模块:银行(Bank类).客户(C ...

  10. 关于REST的浅显了解

    REST 是一种软件架构风格 1.定义 REST即表述性状态传递(Representational State Transfer) 是一组架构约束条件和原则.是设计风格而不是标准. 满足这些约束条件和 ...