免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: C.J
打印 上一主题 下一主题

TCP的许多不解 [复制链接]

论坛徽章:
5
IT运维版块每日发帖之星
日期:2015-08-06 06:20:00IT运维版块每日发帖之星
日期:2015-08-10 06:20:00IT运维版块每日发帖之星
日期:2015-08-23 06:20:00IT运维版块每日发帖之星
日期:2015-08-24 06:20:00IT运维版块每日发帖之星
日期:2015-11-12 06:20:00
11 [报告]
发表于 2009-10-26 14:52 |只看该作者
感觉10楼和11楼有些矛盾。\r\n\r\n按照10楼的说法,11楼的情况应该是收到ACK3,才能确认1 2 收到了。

论坛徽章:
5
IT运维版块每日发帖之星
日期:2015-08-06 06:20:00IT运维版块每日发帖之星
日期:2015-08-10 06:20:00IT运维版块每日发帖之星
日期:2015-08-23 06:20:00IT运维版块每日发帖之星
日期:2015-08-24 06:20:00IT运维版块每日发帖之星
日期:2015-11-12 06:20:00
12 [报告]
发表于 2009-10-26 14:55 |只看该作者
感觉越来越不理解,我查查资料去。这方面我用的少欠缺了。

论坛徽章:
5
IT运维版块每日发帖之星
日期:2015-08-06 06:20:00IT运维版块每日发帖之星
日期:2015-08-10 06:20:00IT运维版块每日发帖之星
日期:2015-08-23 06:20:00IT运维版块每日发帖之星
日期:2015-08-24 06:20:00IT运维版块每日发帖之星
日期:2015-11-12 06:20:00
13 [报告]
发表于 2009-10-26 15:23 |只看该作者
大致重看了一下滑动窗口机制。\r\n感觉没收到报文1的话,不会发出ACK 2 3的。应该没有LZ说的那种情况。\r\n\r\n此时应该发出ACK1,来重传报文1 。

论坛徽章:
0
14 [报告]
发表于 2009-10-26 15:23 |只看该作者
我说一下我的理解:\r\n\r\n数据包1 P 1(起始seq号):2(期望得到的确认号) (1) 数据长度 ack 1 ->\r\n数据包2 p 2(起始seq号):3(期望得到的确认号) (1) 数据长度 ack 1 ->\r\n数据包3 p 3(起始seq号):4 (期望得到的确认号)(1) 数据长度 ack 1- >  \r\n\r\n这三个是发送的数据,那么接受方 返回\r\n\r\nack 3 意味着 数据包 1,2 已经接受成功,\r\nack 4 意味着 数据包 1,2,3 已经接受成功,\r\n如果返回 ack 2 意味着 数据包 1 已经接受成功。

论坛徽章:
0
15 [报告]
发表于 2009-10-26 16:27 |只看该作者
大家一直在讨论1没收到的情况,但是理解的是,楼主的意思是收到1了,但是ack1给丢失了,所以发送方只收到了ack2 和3, 但是我印象中,如果不收到期望的ack,窗口是不会向右滑动的。 \r\n对超时和重传机制不太了解,关注大家的讨论。。。

论坛徽章:
0
16 [报告]
发表于 2009-10-26 17:12 |只看该作者
RFC TCP\r\n\r\nReliability:\r\n    The TCP must recover from data that is damaged, lost, duplicated, or\r\n    delivered out of order by the internet communication system.  This\r\n    is achieved by assigning a sequence number to each octet\r\n    transmitted, and requiring a positive acknowledgment (ACK) from the\r\n    receiving TCP.  If the ACK is not received within a timeout\r\n    interval, the data is retransmitted.  At the receiver, the sequence\r\n    numbers are used to correctly order segments that may be received\r\n    out of order and to eliminate duplicates.  Damage is handled by\r\n    adding a checksum to each segment transmitted, checking it at the\r\n    receiver, and discarding damaged segments.\r\n\r\n是否有问题?

论坛徽章:
0
17 [报告]
发表于 2009-10-26 17:36 |只看该作者
仔细想了想,我觉得如果ack 1丢失了,但是收到ack 2了,那么发送端就认为1和2都成功发送了,这不会引起什么问题\r\n因为1和2确实都被收到了,接受端如果没收到1只收到2,是不会发送ack 2的,所以只要收到ack 2了,那就证明1肯定也被成功的接收了。\r\ntcp不对ack报文进行确认。\r\n如果ack 1中还带有数据,那么如果这个包丢失了,就会产生重传了,也不会引起问题。

论坛徽章:
0
18 [报告]
发表于 2009-10-26 19:28 |只看该作者

回复 #23 C.J 的帖子

你应该相信22楼的帖子。\r\n\r\n毫无疑问,既然B把ack1, ack2和ack3都发送出去了,尽管中途ack1丢失了,可以肯定,B已经收到了A发送的报文1和2。否则B不可能发送ack2和ack3的。\r\n\r\n这题目估计是你随机想出来的,应该是成块数据流类型。\r\n如果是交互式数据流,并且启用了Nagle算法,则要求一个TCP连接上最多只能有一个未被确认的未完成的小分组,在该分组的确认到达之前不能发送其他的小分组。(《TCP/IP协议详解》(卷一))按照这个算法的要求,在ack1报文未收到之前,A是不会发送2和3的。关闭了Nagle的交互式数据流倒是支持你所举的例子。\r\n\r\n既然是成块数据流,一般不会一个报文一个ack。即使是一个报文一个ack,那么22楼的理解也是对的,因为报文2都确认了,自然报文1也被收到了,不然B是不会确认报文2的。另外,TCP协议要求双方都要支持“经受时延的ACK\"(delayed ack)(RFC 1122),你并没有说ACK一定不会到达A。\r\n\r\n这里不涉及超时和重传。\n\n[ 本帖最后由 wangdan1600 于 2009-10-26 19:31 编辑 ]

论坛徽章:
0
19 [报告]
发表于 2009-10-27 09:39 |只看该作者
ack N不代表接收到了第N个报文,而代表期待接收第N个报文,就是说N前面的报文都收到了,现在希望收到N。\r\ntcp协议要求如果没有收到第N个报文(但是第N-1及前面的都收到了),而乱序收到了N+1及以后报文的时候要发送ACK N表示还没有接收到第N个\r\n当发送方连续收到三个ACK N报文的时候可以认为N号报文已经丢失,会立刻重发,而不用等待超时,这是tcp的快速重传算法\r\n不知道说清楚了没有

论坛徽章:
1
技术图书徽章
日期:2013-09-25 21:06:29
20 [报告]
发表于 2009-10-27 23:51 |只看该作者

回复 #1 C.J 的帖子

TCP是面向连接的,UDP是面向无连接的,打个比方:我们平时使用的QQ,我们聊天的文字记录比较重要是使用的TCP协议,而当我们通过视频聊天的时候有大量的视频图像的内容,这个时候就是使用的UDP,因为信息量大,UDP的方式适合。\r\n\r\n滑动窗口是传输中的一种机制,保证了发送方和接受方速率匹配的一个过程。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP