请教大家一个问题,TCP是绝对100%可靠的吗?

superlzdcn 2007-01-10 05:00:46
用TCP进行文件的传输,经常发现接收后的文件的校验码不对了,小文件还好,大文件出错概率比较高,会不会是TCP传输过程中出错?我要不要在传输过程中做校验?
...全文
983 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
danscort2000 2007-01-11
  • 打赏
  • 举报
回复
顺便请你帮个忙,我现在登陆CSDN中,请你截断吧,
CSDN都是明文,没有什么SSL,SSH之类的加密,截断吧
我在线等待中
danscort2000 2007-01-11
  • 打赏
  • 举报
回复
我不懂的,
我错了,
没让FBI看上,真是浪费人才啊,
楼上的继续
husheng34 2007-01-11
  • 打赏
  • 举报
回复
你们提反对意见的人,会算校验码吗?

首先申明,我可以用 二层的包,构建出HTTP包,并访问网页,

那种 IP层替换方式进行攻击 是小儿科了,

用低层攻击手段,我几乎可以截断任何没有加密的协议,

如web,msn,telent 等,

当会话两端连接以后,我可以中间截断,假冒其中一端和别一端通信.

所以如果连 校验码 都不会算的人,请闭上你们的嘴,只会让人笑话.
danscort2000 2007-01-11
  • 打赏
  • 举报
回复
也就是说: 这个文件可以或者可能在下载后被再次发布给别人,但是为了防止某些人串该原始数据,特地加了MD5或者SHX等校验码,这样可以保证再次发布后用户依然能知道自己下载的东西是否被人修改过
danscort2000 2007-01-11
  • 打赏
  • 举报
回复
如果楼上的话是正确的话
那么所有的FTP协议,HTTP协议,POP/SMTP协议
必须全部被改写并加入校验机制
问题是到现在为止,IETF好象没有任何关于传输不安全而有专家提出草案的

IP层替换理论上说的容易,实际操作起来,你无法知道路由实际经过,在INTERNET上,你要替换,首先你要有抓IP包的路径和能力,事实上在两个陌生IP点之间,你根本没有能力去抓,你怎么抓?抓了以后你还要保证或者阻塞这个IP包,或者保证你的包比这个IP包早到目标机器,抓都不好抓,更别说立即替换了,别对我说其中一个IP点在你的同一个内网内并且端口屏蔽没做,或者你就是网关;还有一种方法就是不抓包,而瞎猜,使用IP包直发,这个概率比哈雷彗星撞地球的概率还小。

给你个简单的例子,ftp 服务器122.3.12.56 Client: 220.32.1.16 ,而你的机器IP: 85.122.2.46,你怎么去抓,怎么去替换? 你能知道它是怎么路由的?

提供下载文件校验MD5或者SHX的目的,并不是简单的针对传输过程,而主要是为了防止有人恶意在原始包中插入非法的文件或者代码或者修改原始文件。
benjiam 2007-01-11
  • 打赏
  • 举报
回复
这种攻击的代价是极其昂贵而且复杂的

没什么的。 重新改一下数据。重新计算一下校验值就可以了。没什么难度的。


理论上出现的概率 就是 数据某些位出现了问题。恰好是ip的 2个校验值也改变了
而且算下来又都没有问题。

网络上出现这个问题 基本上看人品。

所以会有提供下载文件的检验码的站点。 对的。
danscort2000 2007-01-11
  • 打赏
  • 举报
回复
在测试的时候出现这种问题
100%是你自己代码的问题
因为你的代码在测试的时候还没有伟大到值得别人使用IP层替换方式进行攻击
这种攻击的代价是极其昂贵而且复杂的
在一般情况下,除非军用等级,完全可以认为TCP是100%正确的
具体可以看TCP/IP协议1-3
DarknessTM 2007-01-11
  • 打赏
  • 举报
回复
所以会有提供下载文件的检验码的站点
microyzy 2007-01-11
  • 打赏
  • 举报
回复
楼上好多解释了,呵呵
要绝对可靠,就发两份。。。但即使发两份,也有%0........1%的几率两份都将同一个0错误传输为1。。。牛角尖拉
flowlight 2007-01-11
  • 打赏
  • 举报
回复
99%的正确率,1%的不正确率可以称之为不可靠
99.99%的正确率,0.01%的不正确率就可以称之为可靠了
所谓的可靠是说达到了一定的正确率满意度
husheng34 2007-01-11
  • 打赏
  • 举报
回复

错,接收到的数据不是 100%可靠的

我不想在解释这个问题,这只是个网络基本问题,

youngwolf 2007-01-11
  • 打赏
  • 举报
回复
怀疑TCP也是可能的。但我想自己的问题还是多一些,任何一种核验码,都有出错的概率,但既然它是一种核验码,其可靠性绝对是可以接受的。

但一般的核验,基本上逃不出一个实质,即用正确的数据核验错误的数据,这一点应该没什么问题吧?那么想想这么一种情况——错误的数据比正确的还多呢?此时错误的数据就变成正确的了!

所以,我以为,核验的本质是基于一种假设——正确的数据比错误的数据多。
走个极端,发10个字节,全部错误,包括核验码,那么在验证数据的时候,有没有可能得出数据正确的结果呢?显然是有的!
everandforever 2007-01-11
  • 打赏
  • 举报
回复
晕了。这种问题根本是程序写的不好,竟然怀疑到TCP身上去了。
benjiam 2007-01-11
  • 打赏
  • 举报
回复
这种问题 看看tcp 卷一就很清楚了。

tryanother 2007-01-11
  • 打赏
  • 举报
回复
在保证数据链路层可靠的基础上,TCP是可靠的,不会出现包丢失的现象,除非被人恶意修改,而数据链路层是会出现错误的,毕竟没有哪个纠错码可以说自己能够100%纠错,只是保证在一定概率下不出现大的错误。而如果LZ的大文件传输经常出错,就有必要检查一下连线了,更换网线再试试看。
dick_song 2007-01-11
  • 打赏
  • 举报
回复
楼上的都强!关注中...
superlzdcn 2007-01-11
  • 打赏
  • 举报
回复
感谢大家如此的热心,没想到这个问题居然牵扯出了这么一大段的激烈的讨论,但是根据我的影象,在TCP中所使用的校验码正如前面有人所说的,还只是比较原始的校验和的方式,这种方式检验的强度还很弱,很有可能在出错的情况下无法检测到错误的包,看来我有必要给我的程序再加上校验的部分。谢谢大家,如果大家觉得不对,请指教。
无知者无谓 2007-01-11
  • 打赏
  • 举报
回复
TCP是可靠的,是相对于UDP来说的:
TCP在发出一个包后,会等待对方返回一个确认包,如果在一定时间内没有受到确认包,那么它会再发一次,重发次数跟操作系统有关。发送超过一定次数后没有受到确认包,那么人为连接已经断开
而UDP则是不管对方有没有受到,它只管发送

楼上说的检验码,只是防止在传输过程的电气错误,它只能保证包正确性保持在一定的范围之内--这个范围在目前的技术不是100%
ProgrameMan 2007-01-11
  • 打赏
  • 举报
回复
TCP协议主为了在主机间实现高可靠性的包交换传输协议

看来我的观点的确不正确,在这里承认错误!

TCP 的确无法%100的实现可靠性。

向受我误导的朋友们道歉 呵呵

ProgrameMan 2007-01-11
  • 打赏
  • 举报
回复
还有楼上几位说

“所以会有提供下载文件的检验码的站点”

这是为了防止数据伪造或者篡改的,不是为了解决 tcp 校验码问题。
加载更多回复(7)

18,357

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧