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. poj 3352 Road Construction

    // 只能说这题和上题一模一样// 我就直接贴上题代码了.. #include <iostream> #include <algorithm> #include <que ...

  2. poj 3260 The Fewest Coins

    // 转载自http://blog.163.com/benz_/blog/static/18684203020115721917109/算法不难看出,就是一个无限背包+多重背包.问题在于背包的范围.设 ...

  3. Android粘贴板的运用

    ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); clipboa ...

  4. Linux C程序如何检测WIFI无线USB网卡是否可用?

    最新做一个WIFI应用项目.如何检测WIFI USB设备是否插上了呢?特此共享. 第一种方法,采用读取文件的方式.在linux下,任何一种设备都可看成文件.通过分析相关文件信息,可得知WIFI设备是否 ...

  5. [Everyday Mathematics]20150119

    设 $V$ 是 $n$ 维线性空间, $V_1, V_2$ 均为 $V$ 的子空间, 且 $$\bex V_1\subset V_2,\quad \dim V=10,\quad \dim V_1=3, ...

  6. HDU 4405-Aeroplane chess(概率dp)

    题意: n+1格飞行棋,编号0-n,从0格开始,每次扔一个色子,得到的点数就向前走几步,但有有些格子到达后可以直接飞到后面的格子, 当到达>=n的地方结束,求结束扔色子的期望次数. 分析: dp ...

  7. 【和我一起学python吧】python的一些推荐

    看到未名的几篇帖子 使我想起了和python的一些经历,于是写了一篇咚咚. 1 书籍: python的syntax足够简单,semantics也不复杂,不怎么会使人混乱,一般来说看自带的文档足够可以学 ...

  8. JQuery插件的学习

    此前一直想就关于Jquery插件的开发,做一个深入的学习,由于各种原因,当然主要是自己太懒了...今天就系统分析一下Jquery插件的开发(参考了http://www.xprogrammer.com/ ...

  9. JS数组(Array)操作汇总

    1.去掉重复的数组元素.2.获取一个数组中的重复项.3.求一个字符串的字节长度,一个英文字符占用一个字节,一个中文字符占用两个字节.4.判断一个字符串中出现次数最多的字符,统计这个次数.5.数组排序. ...

  10. bzoj 1061 [Noi2008]志愿者招募(数学模型,MCMF)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1061 [题意] 雇人满足每天至少需要的人数. [思路一] Byvoid的题解 clic ...