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