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. .Net中的各种序列化

    我们知道将对象的状态保持在存储媒体中,以便可以在以后重新创建精确的副本这正是数据持久化所要做的.而且,不同应用程序之间的通讯需要相互传输数据.那么序列化和反序列化正是为此而生. 序列化和反序列化 所谓 ...

  2. shell 删除日志

    一般线上服务的日志都是采用回滚的防止,写一定数量的日志 或是有管理工具定期去转移老旧日志 前几天删除一个测试环境的日志,只保留两天的日志,结果把正在写的日志都给删掉了,不得不重启了服务,经过这一次的错 ...

  3. [Everyday Mathematics]20150130

    计算下列积分 $$\bex \int_0^\infty \frac{\sin^3x}{x^3}\rd x. \eex$$

  4. HDU 5727 Necklace 环排+二分图匹配

    这是从山东大学巨巨那里学来的做法 枚举下黑色球的排列总数是8!,然后八个白球可选的位置与左右两个黑球存不存在关系建图就行 这是原话,具体一点,每次生成环排,只有互不影响的才连边 最后:注重一点,n个数 ...

  5. Python pycurl

    常用方法: pycurl.Curl() #创建一个pycurl对象的方法 pycurl.Curl(pycurl.URL, http://www.google.com.hk) #设置要访问的URL py ...

  6. CentOS搭建LAMP环境

    最近准备安装roundcube,需要先搭建一个 LAMP 运行环境,从网上搜索了一下,有不少资料.自己也按部就班安装了一遍,把过程整理了下来. LAMP 是Linux, Apache, MySQL, ...

  7. ACM1994

    /* Problem Description 为自行解决学费,chx勤工俭学收入10000元以1年定期存入银行,年利率为3.7% .利率按年计算,表示100元存1年的利息为3.7元.实际上有时提前有时 ...

  8. Genesis-3D开源游戏引擎简介!

    Genesis-3D由搜狐畅游公司超百人引擎研发团队历时数年耗费巨资自主研发,是国内外首款商业开源的3D游戏引擎平台.它包括跨平台渲染引擎.2D引擎.物理引擎.音效系统.粒子系统.动画系统.服务器引擎 ...

  9. 【Spark学习】使用Maven创建Spark

    Spark版本:1.1.1 本文系从官方文档翻译而来,转载请尊重译者的工作,注明以下链接: http://www.cnblogs.com/zhangningbo/p/4137986.html

  10. 关于 终端 ls 命令 不能区分文件和目录的问题

    默认的,使用ls命令来显示目录内容的时候,“终端”对于目录.可执行文件等特殊类型的文件并没有使用颜色来显示,只有使用“ls -G”时,才能显示颜色,这可真是不方便.有没有方法可以默认显示颜色呢?方法当 ...