免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 7576 | 回复: 25
打印 上一主题 下一主题

TCP 编程问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-23 11:41 |只看该作者 |倒序浏览
最近在看TCP/IP ,有一个问题在书上没有找到答案,感谢高手们帮我解惑!!

通过一个例子来描述我的问题

send(socket, buf, 1000,0 ); 书上说内核将buf的内容全部拷贝到套接口的发送缓冲区,send 就返回 1000 , 在应用层,我们就认为此次发送成功。

然而,此时TCP可能并没有将buf的内容发送到对端。如果TCP(TCP只保证可靠的传输,但并不保证100% 送到)发送失败了,应用层也不会知道,这样岂不会误导应用层???
也就是说应用层如果想要知道对端应用层是否真正的收到了数据,还需要在应用层也做一次确认?????

谢谢指点!

[ 本帖最后由 learntolinux 于 2009-5-23 11:55 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2009-05-23 11:54 |只看该作者
自己顶

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:53:172015亚冠之水原三星
日期:2015-06-02 16:34:202015年亚冠纪念徽章
日期:2015-10-19 18:13:37程序设计版块每日发帖之星
日期:2015-11-08 06:20:00
3 [报告]
发表于 2009-05-23 11:56 |只看该作者
是的.  所以有时候数据传输采取 "拉" 的方式 比如 HTTP

论坛徽章:
0
4 [报告]
发表于 2009-05-23 12:04 |只看该作者
TCP是面向连接的     ”三次握手“

论坛徽章:
0
5 [报告]
发表于 2009-05-23 12:14 |只看该作者
这个不是应用程序层应该考虑的事情,TCP协议的可靠性会保证将这1000字节数据发送到对端。 一次发送失败会重传。
如果把他们纠缠在一起,的确没法理清楚。

就算按你说的“由应用层来确认”,应用层怎么来确认呢?看过那个经典的东西两边蓝军协商攻击中间白军的例子就知道根本就没有百分之百的保证完全可靠的确认协议。
所以,“应用层也做一次确认”就够了么?

我对TCP协议栈不熟,呵呵,说不上更细节的理由,期待其它人回答吧,。。。。

论坛徽章:
0
6 [报告]
发表于 2009-05-23 12:29 |只看该作者
TCP发送失败,就返回结果 -1了,你就再重发吧,关于TCP底层自己的,把缓冲区的发过去,是它自己解决,应用曾只要判断send的返回值吧

论坛徽章:
0
7 [报告]
发表于 2009-05-23 12:37 |只看该作者
原帖由 lsupper 于 2009-5-23 12:29 发表
TCP发送失败,就返回结果 -1了,你就再重发吧,关于TCP底层自己的,把缓冲区的发过去,是它自己解决,应用曾只要判断send的返回值吧

关键是当次send 成功后,TCP 有可能 发送失败,也就是说我并不知道当次是不是数据真的发送到对端去了

论坛徽章:
0
8 [报告]
发表于 2009-05-23 12:39 |只看该作者
原帖由 lenky0401 于 2009-5-23 12:14 发表
这个不是应用程序层应该考虑的事情,TCP协议的可靠性会保证将这1000字节数据发送到对端。

只保证可靠发送,但是并不保证送达

[ 本帖最后由 learntolinux 于 2009-5-23 12:40 编辑 ]

论坛徽章:
0
9 [报告]
发表于 2009-05-23 13:48 |只看该作者
红蓝军问题。 最后一次确认永远没办法确认是否成功送达

解决方案
1 应用层要自己设计协议来确认消息发送成功。
2 1问1答 1确认就可以了

论坛徽章:
0
10 [报告]
发表于 2009-05-23 14:12 |只看该作者
原帖由 learntolinux 于 2009-5-23 12:37 发表

关键是当次send 成功后,TCP 有可能 发送失败,也就是说我并不知道当次是不是数据真的发送到对端去了



tcp会重新发送,直到送达
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP