理解TCP可靠的通信
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可靠的通信的更多相关文章
- 结合Wireshark捕获分组深入理解TCP/IP协议栈之TCP协议(TCP报文格式+三次握手实例)
摘要: 本文简单介绍了TCP面向连接理论知识,详细讲述了TCP报文各个字段含义,并从Wireshark俘获分组中选取TCP连接建立相关报文段进行分析. 一.概述 TCP是面向连接的可靠 ...
- 简单理解TCP/IP协议
一.什么是TCP/IP TCP/IP是一个协议族,是因为TCP/IP协议包括TCP.IP.UDP.ICMP.RIP.TELNETFTP.SMTP.ARP.TFTP等许多协议,这些协议一起称为TCP/I ...
- 网络学习笔记(二):TCP可靠传输原理
TCP数据段作为IP数据报的数据部分来传输的,IP层提供尽最大努力服务,却不保证数据可靠传输.TCP想要提供可靠传输,需要采取一定的措施来让不可靠的传输信道提供可靠传输服务.比如:出现差错时,让发 ...
- iOS-----使用CFNetwork实现TCP协议的通信
使用CFNetwork实现TCP协议的通信 TCP/IP通信协议是一种可靠的网络协议,它在通信的两端各建立一个通信接口,从而在通信的两端之间形成网络虚拟链路.一旦建立了虚拟的网络链路,两端的程序就可以 ...
- TCP可靠传输及流量控制实现原理
一.为什么TCP是可靠传输? 1. 停止等待协议 通过确认与超时重传机制实现可靠传输 在发送完一个分组后,必须暂时保留已发送的分组的副本. 分组和确认分组都必须进行编号. 超时计时器的重传时间应当比数 ...
- VC++使用socket进行TCP、UDP通信实例总结
1. 两台计算机通信需要协议,通信的两台计算机IP必须唯一 2. 同一个计算机可以进行多个应用程序与其他计算机通信,IP地址唯一,而端口号是区别同一计算机(同一IP)的唯一 ...
- 计算机网络概述 传输层 TCP可靠传输的实现
TCP可靠传输的实现 TCP的可靠性表现在:它向应用层提供的数据是 无差错的.有序的.无丢失的,简单的说就是:TCP最终递交给应用层的数据和发送者发送的数据是一模一样的. TCP采用了流量控制.拥塞控 ...
- 结合Wireshark捕获分组深入理解TCP/IP协议栈
摘要: 本文剖析了浏览器输入URL到整个页面显示的整个过程,以百度首页为例,结合Wireshark俘获分组进行详细分析整个过程,从而更好地了解TCP/IP协议栈. 一.俘获分组 1.1 准 ...
- 前端工程师如何理解 TCP/IP 传输层协议?
网络协议是每个前端工程师都必须要掌握的知识,TCP/IP 中有两个具有代表性的传输层协议,分别是 TCP 和 UDP,本文将介绍下这两者以及它们之间的区别. TCP/IP网络模型 计算机与网络设备要相 ...
随机推荐
- 【LCS,LIS】最长公共子序列、单调递增最长子序列
单调递增最长子序列 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 求一个字符串的最长递增子序列的长度如:dabdbf最长递增子序列就是abdf,长度为4 输入 ...
- 也谈http中get和post
1.get和post区别: 从设计初衷考虑get是为了查询服务器资源(不改变服务器数据及状态,因此说它是安全和幂等的,但get请求参数一般是直接在url后面,浏览器地址栏中会被看到能保存书签及历史记录 ...
- [Everyday Mathematics]20150113
设 $f\in C^2(0,+\infty)$ 适合 $$\bex \lim_{x\to 0^+}f'(x)=-\infty,\quad \lim_{x\to 0^+}f''(x)=+\infty. ...
- Delphi 712操作word
//导出Wordprocedure TFrm_Computing.ExportWord;var wordApp, WordDoc, WrdSelection, wrdtable, wrdtable1, ...
- Slalom
题意: 有n个宽度为w的门,给出门的左端点的水平位置x和高度y,和恒定的垂直速度,现有s个速度,求能通过这n个门的最大速度. 分析: 二分速度判断 #include <map> #incl ...
- ASIHttpRequest 使用过程中,中文编码的问题
遇到过几个中文编码的情况,不知道是服务器原因还是本身方法上有区别 ,今天遇到的问题是使用1的方法行不通,但是使用2的方法就可以. 1. NSString *urlString= [NSString s ...
- IOS Swizzle(hook)
/////////////////////////////////////////////////////////////////////////////////////////////////// ...
- [irving] C# Windows Beep 调用声音文件
方法一:Console.Beep(); 方法二:可以用Console.WriteLine("/a");来代替Beep(). MSDN:http://msdn.microsoft.c ...
- DataGrid的打印预览和打印
using System;using System.Drawing;using System.Collections;using System.ComponentModel;using System. ...
- BBED的安装
BBED是Block Browser EDitor的缩写,只有linux/unix版本,没有windows版本. 11g中默认是不带bbed的,如果要使用,可以在10g中拷贝过来,然后再进行编译使用. ...