Chinaunix

标题: TCP问题 [打印本页]

作者: chenzhanyiczy    时间: 2010-07-06 23:24
标题: TCP问题
A -> B

1. A发送10字节给B
2.A再发送50字节给B
3.A再次发送100字节给B,但在发送这次100字节同时,收到了B对前两次的一个ACK确认

那么A会不会再次发送100字节 ?理由是什么?
作者: openspace    时间: 2010-07-07 07:35
应该不会
可以看看<TCP/IP详解:卷一>TCP章节中对示例的解释
作者: Godbach    时间: 2010-07-07 09:23
详解1中有对ACK的发送时机的介绍。而且ACK中是有序号的。
作者: jinxinxin163    时间: 2010-07-07 10:00
有同样的疑问,欢迎高手pk
作者: lmarsin    时间: 2010-07-07 10:26
只要没有发生拥塞以及对方接收窗口足够大,没有理由不发送
作者: chenzhanyiczy    时间: 2010-07-07 14:21
tcp/ip卷一哪里有介绍?

这里的前提条件就是对方接收窗口足够大,发送方的缓冲区也足够大,也就说不考虑这方面的因素

我觉得应该要发,因为这个ACK答复的序号就是100字节的第一个字节的序号,所以再发这100字节

但感觉又不太对,哪位指教一下啊?
作者: ryan3216_cu    时间: 2010-07-07 15:53
提示: 作者被禁止或删除 内容自动屏蔽
作者: 0vk0    时间: 2010-07-07 15:57
应该会阻塞吧,这个
作者: zd零    时间: 2010-07-07 16:16
应该会吧!
只收到一个ACK确认,发送方会认为其中一次数据包发送失败,发送方会重新发送丢失的数据包
作者: vermouth    时间: 2010-07-07 16:25
每次握手的id号都不一样吧?
作者: fxf_china    时间: 2010-07-07 17:17
本帖最后由 fxf_china 于 2010-07-07 17:22 编辑

先握手,来回确认后才发内容吧,握手确认后,1个连接就建立了

可以建立多个连接,所以多个连接应该相互不影响

----------------

前面理解错了,楼主应该已经建立连接了

不会,因为重新发送浪费资源,没有必要重发,软件实现起来很方便,加个序列号来区分就可以了
作者: hritian    时间: 2010-07-13 13:12
本帖最后由 hritian 于 2010-07-13 13:17 编辑

你这个问题,问的不好。

你没有把环境说明白,发送方是不是有数据,接收端的接收窗口够不够大?

我们假设发送方有数据发,接收端窗口足够大。

5

5

100

这个时候,cwnd=3    packet_flight  =3

收到前两个包的ack  cwnd》=3  packet_flight=1
内核会调用tcp_write_xmit 函数,看cwnd是否大于packet_flight ,如果大于,继续发送数据。

继续发送。

如果收到一个ack包,但是确认序号没有变化,这个时候,就要看sack是否开了,如果开了,packet_flight=2 cwnd=3
作者: 3lauxing    时间: 2010-08-28 12:06
情况1:
    A                                                     B
1. 10                   ------>>>>>>            
2. 等待                                                 10
3. 50(缓存)
4. 100+50(缓存)  <<<<----------           ACK(10)
5.                    ------>>>>>>                                   //作为一个数据包发送
6.                                                        150

情况2:
   A                                                     B
1. 10                   ------>>>>>>            
2. 50                                                 10
3.                        ------>>>>>>
4.                                                       10+50
5.                        <<<<----------          ACK(10+50) //作为一个ACK返回
6. 100                                                
7.                          ------>>>>>>
8.                                                       100
作者: darksec    时间: 2010-08-28 16:25
讲一下我的理解:

1.   如果你是问是否会重发后面发的100字节, 结果是不会, 因为还没有到超时重传的时间
2.   如果你是问是否会继续再发下一个100字节, 结果依赖于以下条件:
    <1>  如果对方通告的接收窗口大于或等于100字节, 它会继续发
    <2>  如果对方通告的接收窗口小于100字节,那么它不会发




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2