社区
C#
帖子详情
网络通讯可靠性怎么保证?
ttianqq
2009-11-27 10:31:03
做C/S模式的程序,客户端和服务器端之间采用TCP通讯,是那种实时控制的程序,应该怎么避免出现数据包丢失的情况?经实际测试,确实有可能发送的数据包,接收端没有收到或者校验和错误。
我现在用的方法是接收端接收到数据包后,给发送端再发送一个确认包,如果发送端没有收到确认包,则重发,相当于一次握手。不过我觉得这种方法第一时间比较长,效率不高。第二网络流量会增加一倍。
各位有没有什么好的实现方法来处理的?
...全文
380
24
打赏
收藏
网络通讯可靠性怎么保证?
做C/S模式的程序,客户端和服务器端之间采用TCP通讯,是那种实时控制的程序,应该怎么避免出现数据包丢失的情况?经实际测试,确实有可能发送的数据包,接收端没有收到或者校验和错误。 我现在用的方法是接收端接收到数据包后,给发送端再发送一个确认包,如果发送端没有收到确认包,则重发,相当于一次握手。不过我觉得这种方法第一时间比较长,效率不高。第二网络流量会增加一倍。 各位有没有什么好的实现方法来处理的?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
24 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ttianqq
2009-11-28
打赏
举报
回复
继续研究研究
soaringbird
2009-11-27
打赏
举报
回复
可以要求接收方回发确认包,但不是收到后马上回发,而是处理完毕(比如解析、保存到数据库中等之类的处理)后发送。发送方如果超时未收到确认包,就重发数据。确认包就不用重发机制了,一方重发即可。
zzmwmh
2009-11-27
打赏
举报
回复
怎样也不能保证100%吧
ttianqq
2009-11-27
打赏
举报
回复
[Quote=引用 4 楼 cuike519 的回复:]
TCP不是可靠连接么...
什么情况丢包?握手是TCP本身协议规定的,TCP本身就要求握手和确认,如果你是建立在TCP上的通信上可以认为是可靠连接。
如果是UDP需要确认数据包是否送达,UDP的可靠性要应用层来完成。
[/Quote]
我知道TCP本身有握手确认,但是实际测试中,还是有几率出现数据包丢失的情况,我需要保证不能出现丢包的情况
cuike519
2009-11-27
打赏
举报
回复
TCP不是可靠连接么...
什么情况丢包?握手是TCP本身协议规定的,TCP本身就要求握手和确认,如果你是建立在TCP上的通信上可以认为是可靠连接。
如果是UDP需要确认数据包是否送达,UDP的可靠性要应用层来完成。
zhnzzy
2009-11-27
打赏
举报
回复
socket通讯看看
ttianqq
2009-11-27
打赏
举报
回复
[Quote=引用 1 楼 yangjianpro163 的回复:]
给发送端再发送一个确认包,如果发送端没有收到确认包,则重发,
--------------------------
那如果确实发了确认包,而这个确认包在中途丢包了,怎么办? 也重发?
[/Quote]
对 目前是这么处理的,只要发送端没有收到确认包,就重发,接收端接收到了重复的数据包不处理就行了。
觉得这样处理比较复杂,想找一个高效安全的方式
yangjianpro163
2009-11-27
打赏
举报
回复
给发送端再发送一个确认包,如果发送端没有收到确认包,则重发,
--------------------------
那如果确实发了确认包,而这个确认包在中途丢包了,怎么办? 也重发?
jnyds
2009-11-27
打赏
举报
回复
关注中……
CGabriel
2009-11-27
打赏
举报
回复
TCP 协议是面向连接的协议,只会断线,绝不丢包。
由于 TCP 是一个基于流的程序,所以很多不成熟的程序都无法 100% 正确地重组数据报。
因此,很多人“以为” 是网络丢包。
图书馆或者书店有大量关于 TCP 协议具体实现的书籍,上面说的很详细。
wartim
2009-11-27
打赏
举报
回复
TCP也会丢包,只要知道为什么,就能有针对性地处理
基本上是由于发送方和接收方速度不匹配造成缓冲溢出
非对称丢包特性对TCP吞吐量的影响
http://cache.baidu.com/c?m=9f65cb4a8c8507ed4fece76310478027474380146b80c7150892d213cf3101061471e3cc70745713d3b22d3b1ccf1e1eb7b0706f44426be6fdb9ea57aefad97949f94523706bc41746c75cf28b102a8771d24de9de0e97bee741e0b9a2d1c82022dd53746df0f69c290403bb6de76347&p=8978c64ad78911a05fafc6377f&user=baidu
............
2. 非对称信道对TCP产生影响的方面
在进行模型分析前,我们必须考察非对称性给TCP带来的各种影响.从而比较这些影
响的严重程度,并在建模中体现其中重要的因素.非对称性对TCP的影响一般体现在,由
于回传链路传送确认包的能力不足,从而干扰了TCP源端对网络状态的估计,进而影响新
数据包的发送,最终导致TCP性能下降.其主要影响有:
1) 降低窗口增长速度.由于TCP仅在收到有效确认时,才调用其增长窗口函数.
确认包丢失造成有效确认变少,从而导致窗口增长速度减慢,降低了链路利用率.
2) 增加前向链路突发.由于受拥塞窗口的限制,TCP只有在收到新的有效确认时,
才能发送新的数据包.再回传路径带宽不足或高误码率是,很容易发生确认包丢
失.而本该发送的新数据,由于确认包丢失则不能发送.当后续确认到达源端时,
原来待发的数据就会和新确认所对应的数据包同时发出,造成突发.当丢失较多
的确认包后有效确认到达时,源端就有可能在短时间内发送过多的数据,造成前
向链路缓存溢出,产生丢包.
3) 降低快速恢复算法的成功概率(增加了超时重传的概率).TCP只有在收到三个重
复确认后才进入快速恢复.而在恢复过程中,源端仍然需要持续地收到确认包,
以完成快速恢复.因此,快速恢复能够成功的一个必要条件是源端能够收到足够
的确认包.而非对称性使确认包丢失的概率大大增加,从而降低了快速恢复的成
功率.
对于以上因素,因素1和3是可以在模型中讨论的.而对于2,由于涉及到丢包过程的
细节而无法直接讨论.因为这种细节会随网络配置不同而变化,很难找到统一的办法来为之
建模.因此我们采用把丢包率作为已知条件,从而回避了这个问题.因此本文的模型可以说
考虑了所有由非对称性而引起的主要因素.
............
烈火蜓蜻
2009-11-27
打赏
举报
回复
[Quote=引用楼主 ttianqq 的回复:]
做C/S模式的程序,客户端和服务器端之间采用TCP通讯,是那种实时控制的程序,应该怎么避免出现数据包丢失的情况?经实际测试,确实有可能发送的数据包,接收端没有收到或者校验和错误。
我现在用的方法是接收端接收到数据包后,给发送端再发送一个确认包,如果发送端没有收到确认包,则重发,相当于一次握手。不过我觉得这种方法第一时间比较长,效率不高。第二网络流量会增加一倍。
各位有没有什么好的实现方法来处理的?
[/Quote]
兄弟,这个是TCP需要保证的事,如果你想这么做,就感觉脱裤放屁,多此一举了,
TCP就是可以保证先发送的包,不丢包,且一定按顺序送到,如果TCP做不到,你无论做什么努力也是没有用,因为硬件网络出问题了,这个软件是没有办法解决。 不需要做些没有必要做的事,
不过,如果你的这个提法是针对UDP的话,这个贴子可以继续讨论
NealXX
2009-11-27
打赏
举报
回复
Up,学习了
卧_槽
2009-11-27
打赏
举报
回复
把你网线拔了,你怎么保证都没用
ximengchang
2009-11-27
打赏
举报
回复
1、数据加密传输
2、做数据验证
可以参考易宝支付
littlegang
2009-11-27
打赏
举报
回复
tcp的可靠连接,是保障了单次包发送的可靠
lz要实现tcp之上的可靠性,可以参考tcp里面的“窗口”确认方式
也就是窗口最大 2n, 当在较短的时间内对方收到 x个包(x<N),只要确认最后那个x就可以了,发送方得到x,就发送x以后的包,如规定时间内没收到,则重新发送 上次x之后的包
接收方收到后,要判断重复部分的包,加以丢弃
CPU_2
2009-11-27
打赏
举报
回复
呵呵,我最近也做了一个C#winform的DEMO,也是关于SOCKET的就是客户端和服务器的问题,客户端在登录的时候输入用户名和密码,发送给服务器,服务器验证,如果通过则发送成功的信息给他,如果失败则发送失败的消息给他,客户成功登录后可以进行其它的相关操作,比较要修改自已的密码,然后又发送消息给服务器,服务器依据作出响应,然后执行完后又返回给客户端提示成功与否,然后客户端的客户还可以在客户端进行有权限的数据信息查看,(这也要发信息给服务器,服务器收到信息后按要求返回信息给客户端)这样的一个过程.现在我客户端用到的是异步,服务器也用异步,但客户端好像写得有问题,所以真诚的请教一下楼主能不能加我QQ383638323备注(SOCKET),请教一下,谢谢!
Red_angelX
2009-11-27
打赏
举报
回复
1.增加确认包.
2.包里增加连续的seq号
ttianqq
2009-11-27
打赏
举报
回复
[Quote=引用 11 楼 wodegege10 的回复:]
TCP协议已经保证了数据的完整性
若是有丢包,它自己会重发
[/Quote]
在实际测试中,还是会有发送端发送的命令,接收端没有收到,或者收到的效验和不正确的情况,很少,但是有,我现在需要可靠
zuoming120
2009-11-27
打赏
举报
回复
d
加载更多回复(4)
TCP 如何
保证
可靠性
确保连接和断开的
可靠性
。 其次,TCP 的
可靠性
,还体现在有状态;TCP 通过校验和、ACK 应答、超时重传来记录哪些数据发送了,哪些数据被接受了,哪些没有被接受,并且
保证
数据包按序到达,
保证
数据传输不出差错。 ...
什么是数据中心的
可靠性
?常用的
可靠性
手段有哪些
所有的数据中心都无法忽视
可靠性
这三个字,而
可靠性
也是所有数据中心运维人员的第一追求。 1、集中就是可靠? 数据中心的出现和发展,就是一个数据从分布到集中的过程。比如一个大型的银行数据中心,原来的系统...
TCP协议如何
保证
可靠传输
可靠不等于安全,TCP尽最大可能的
保证
数据
可靠性
,但是没有任何措施
保证
数据的安全性。所谓安全就是你的数据不会被别人看到或者窃取到,TCP上的数据是明文传输的。TCP如何
保证
可靠性
TCP是一种可靠传输协议,到底如何...
IM即时通讯-N-如何
保证
消息的
可靠性
展示
可靠性
展示,指的是在用户查看消息时, 展示给用户的消息是不丢失的,不重复的, 并且是有序最新的的。即有序+不丢+不重+最新以下我们从简单到复杂, 逐步设计出推拉结合的模式下会话消息的
可靠性
展示。原则: ...
UDP
网络通讯
/UDP
可靠性
实现
UDP
网络通讯
在前面一篇博客中写道TCP套接字的
网络通讯
TCP
网络通讯
;下面来介绍UDP套接字的
网络通讯
。一、UDP与TCP的区别: TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议 UDP是一种无连接的传输层协议,...
C#
110,539
社区成员
642,577
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章