1、TCP通信是可靠的,UDP通信是不可靠的。TCP是怎么保证通信可靠的呢?

2、实际项目中,用到串口通信,也要保证通信可靠,TCP的道理应该也是一样的。

3、通信之前,三次握手。可以这样认为:a、甲问乙一个问题;b、乙回答甲的问题,同时问甲一个问题;c、甲再回答乙的问题。这样证明二者连接正常了,可以进行数据传输了。

4、通信是可靠的,也就是说,甲如何确认乙收到了自己发的信息?

  甲乙通信的信息中有两个字段,SendNum和AckNum,SendNum表示向对方问第几个问题,AckNum表示收到了对方的问题,回答对方第几个问题。注意:这种回答方式很特殊,别人问什么,我就把问题重复一边作为回答。

5、甲乙双方都维护两个内容:当前问到第几个问题CurrNum和最后一次发给对方的信息LastMsg。发送信息的机制是:对方回答了自己刚才的问题,才问下一个问题。以甲为例说明,收到乙的信息,查看乙的AckNum是否与自己的CurrNum相等,如果相等,说明乙收到了刚才发的信息,++CurrNum,向乙发送下一个信息。如果AckNum与CurrNum不相等,注意AckNum只可能比CurrNum小1。说明乙没有收到刚才发的信息,而是收到了更前一次的消息。在这种情况下,甲把最后一次发的信息LastMsg最发一次。

6、现在思考,AckNum与CurrNum不相等的情况下,AckNum为什么只可能比CurrNum小1?

  消息发送的机制是:确认对方收到了刚才的信息,才发下一个信息。

  假设AckNum比CurrNum小2,或者更多。比如AckNum为3,CurrNum为5,这就相当于对方会没回答第4个问题,我就已经问了第5个问题,这显然与前提矛盾。

  假设AckNum比CurrNum大,这就相当于我还没问这个问题,对方已经回答了,这显然与前提矛盾。

7、对方回答了当前问题,我才问下一个,这种方式效率低。有没有更好的办法呢?

  甲把信息从1到10准备好,搞一个大小为5的集合,包含1到5这5个信息。甲不用等待乙回答了第一个问题,才问下一个问题,而是可以接着问5个问题,当问到第5个问题,乙还没有回答第1个问题,那就必须等待了。当乙回答了第1个问题,集合向前移动一个单位,表示甲可以发送第6个问题了,等待乙回答第2个问题。这就是滑动窗口协议的基本思想。

  考虑下面的情况,甲一口气问了5个问题,乙接收到了5个问题。但是,乙只正确回答了第1个,第2个问题,回答第3个问题的时候出错了。这个时候,甲认为第3个问题,乙没有正确接收,于是把3,4,5这三个问题,重新问一遍。乙收到甲,再次问第3个问题,也意识到从第3个开始,就出错了,于是把后面收到了第4,第5这两个问题也丢弃,重新接收。

8、TCP一连接好,就发送大量信息,往往会导致阻塞。发送方不知道接收方的处理能力,就采取试探性的策略。先发大小为1的消息试试,没问题,再发大小为2消息试试,还没问题,就发大小为4的消息试试,采用几何数级增长。这就是慢启动算法,慢启动并不慢,只是刚开始很慢,速度很快就上来了。

理解TCP可靠的通信的更多相关文章

  1. 结合Wireshark捕获分组深入理解TCP/IP协议栈之TCP协议(TCP报文格式+三次握手实例)

    摘要:     本文简单介绍了TCP面向连接理论知识,详细讲述了TCP报文各个字段含义,并从Wireshark俘获分组中选取TCP连接建立相关报文段进行分析. 一.概述     TCP是面向连接的可靠 ...

  2. 简单理解TCP/IP协议

    一.什么是TCP/IP TCP/IP是一个协议族,是因为TCP/IP协议包括TCP.IP.UDP.ICMP.RIP.TELNETFTP.SMTP.ARP.TFTP等许多协议,这些协议一起称为TCP/I ...

  3. 网络学习笔记(二):TCP可靠传输原理

      TCP数据段作为IP数据报的数据部分来传输的,IP层提供尽最大努力服务,却不保证数据可靠传输.TCP想要提供可靠传输,需要采取一定的措施来让不可靠的传输信道提供可靠传输服务.比如:出现差错时,让发 ...

  4. iOS-----使用CFNetwork实现TCP协议的通信

    使用CFNetwork实现TCP协议的通信 TCP/IP通信协议是一种可靠的网络协议,它在通信的两端各建立一个通信接口,从而在通信的两端之间形成网络虚拟链路.一旦建立了虚拟的网络链路,两端的程序就可以 ...

  5. TCP可靠传输及流量控制实现原理

    一.为什么TCP是可靠传输? 1. 停止等待协议 通过确认与超时重传机制实现可靠传输 在发送完一个分组后,必须暂时保留已发送的分组的副本. 分组和确认分组都必须进行编号. 超时计时器的重传时间应当比数 ...

  6. VC++使用socket进行TCP、UDP通信实例总结

    1.        两台计算机通信需要协议,通信的两台计算机IP必须唯一 2.        同一个计算机可以进行多个应用程序与其他计算机通信,IP地址唯一,而端口号是区别同一计算机(同一IP)的唯一 ...

  7. 计算机网络概述 传输层 TCP可靠传输的实现

    TCP可靠传输的实现 TCP的可靠性表现在:它向应用层提供的数据是 无差错的.有序的.无丢失的,简单的说就是:TCP最终递交给应用层的数据和发送者发送的数据是一模一样的. TCP采用了流量控制.拥塞控 ...

  8. 结合Wireshark捕获分组深入理解TCP/IP协议栈

    摘要:     本文剖析了浏览器输入URL到整个页面显示的整个过程,以百度首页为例,结合Wireshark俘获分组进行详细分析整个过程,从而更好地了解TCP/IP协议栈.   一.俘获分组 1.1 准 ...

  9. 前端工程师如何理解 TCP/IP 传输层协议?

    网络协议是每个前端工程师都必须要掌握的知识,TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP,本文将介绍下这两者以及它们之间的区别. TCP/IP网络模型 计算机与网络设备要相 ...

随机推荐

  1. zoj 2286 Sum of Divisors

    // f(n)表示 n的约数和 不包括自己// 给你一个m 求1 到 100万里面 f(n)<=m 的个数// 那么首先要用筛选求出所有出 f(n)// 然后就好办了 // 写好后 看见别人好快 ...

  2. 【转】linux中waitpid及wait的用法

    原文网址:http://www.2cto.com/os/201203/124851.html wait(等待子进程中断或结束) 表头文件      #include<sys/types.h> ...

  3. Java与WCF交互(一):Java客户端调用WCF服务

    最近开始了解WCF,写了个最简单的Helloworld,想通过java客户端实现通信.没想到以我的基础,居然花了整整两天(当然是工作以外的时间,呵呵),整个过程大费周折,特写下此文,以供有需要的朋友参 ...

  4. 图片的android:src 及android:background共存

    ---恢复内容开始--- 需求:给ImageView添加背景色 效果: 实现分析: 1.目录结构: 代码实现: 1.activity_main.xml <merge xmlns:android= ...

  5. 大数据性能调优之HBase的RowKey设计

    1 概述 HBase是一个分布式的.面向列的数据库,它和一般关系型数据库的最大区别是:HBase很适合于存储非结构化的数据,还有就是它基于列的而不是基于行的模式. 既然HBase是采用KeyValue ...

  6. HDU 4749-Parade Show(KMP变形)

    题意: 给出一个母串和一个模式串求母串中最多能分成最大的子串数(每个字串中的各个数字的大小关系和模式串相同) 分析: KMP变形匹配规则变一下即可,用当前数字和下个数字的差表示,大小关系方便匹配 #i ...

  7. codeforces 691F Couple Cover 暴力

    分析:开一个300w的数组,统计,然后nlogn统计每个值在在序对第一个出现有多少种情况 时间复杂度:O(nlogn) n在3e6数量级 #include<cstdio> #include ...

  8. 《Python 学习手册4th》 第四章 介绍Python对象类型

    ''' 时间: 9月5日 - 9月30日 要求: 1. 书本内容总结归纳,整理在博客园笔记上传 2. 完成所有课后习题 注:“#” 后加的是备注内容(每天看42页内容,可以保证月底看完此书) ''' ...

  9. 【Windows核心编程】重载类成员函数new / new[] / delete / delete[]

    // Heap.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <Windows.h> #include &l ...

  10. MEAN Stack:创建RESTful web service

    本文在个人博客上的地址为URL,欢迎品尝. 前段时间做了DTREE项目中的前后端数据存储功能,在原有的ngController上进行HTTP请求,后端接受到请求后再存储到mongoDB上.现将学习所得 ...