SOCKET : TCP和UDP区别的体现??
TCP的可靠性,UDP的不可靠性,体现在哪里?
看 孙鑫VC++深入详解 TCP和UDP聊天程序,在聊天双方有一边断开时,我能感觉到“TCP的可靠性,UDP的不可靠性”;那如果聊天双方都未断开,双方发送的某数据在传输过程中丢了,我感受不到“TCP的可靠性,UDP的不可靠性”,因为在他的TCP代码中connect、accept之后就开始传数据了,也没有检测数据是否到达对方的代码,不是跟UDP一样?是因为TCP协议帮他做了吗?还有connect+accept我能感受到是面向连接的,那么用了connect+accept就算是用了TCP协议?是否可以这样理解:只要用了connect+accept就是TCP通信了?
我看了篇网文:“TCP和UDP传输的深入浅析,MSN和QQ文件传输速度解析”。其中有段话:
“2. 但是即使上面的条件不成立,msn还是一般比QQ慢的。问题还是在出在前面提到的验证数据可靠性上面,TCP是可靠的,。UDP是不可靠的,但是用UDP做传输文件这档子事情,肯定要在应用层写一个验证的协议,否则传过来的文件缺胳膊少腿,会被用户骂死的。说是协议,其实也不难,打个比方吧:
long long ago,贾宝玉在北京,林黛玉在长沙,怎么互诉衷肠呢,派家丁送信!路途遥远,怎么知道信收到没有?打电话问?那时候发明了这个就不用送信了,只能看家丁是否带了回信来了。假如发现一个家丁一个月还没有回,那就多半迷路堵车遭遇山贼或者开小差到扬州花差快活去了,再派一个人送吧! TCP就是这么做的,UDP在应用层协议一般也需要这么做,但是实现上有时候往往有区别。”
上面提到了 验证 数据包是否送到 的事情。TCP有验证的功能,UDP没有。
问题一、TCP的验证功能,是需要程序员自己写?还是不用写(connect、accept之后尽管传,不用考虑别的,TCP协议自带验证)?
问题二、UDP的验证怎么写? 是:1、发第1个包--->等回应,等到回应--->发第2个包,等不到回应--->再发第1个包..... 还是:2、连续发包,在发包过程中或是发完后,有接到回应,再看哪个包的回应没得到,就重发那个包。 应采取上面1、2那种方式?那等待回应时间是多大呢?