我们是否可以设置TCP中的RTT?

leetow2003 2012-08-16 10:59:34
我想加大TCP中的RTT(Round-Trip Time 往返时延),请问是否可以做到?怎么做?
...全文
335 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
leetow2003 2012-08-19
  • 打赏
  • 举报
回复
也会出现rst,我现在是两边都用RawSocket,也没有用。
ndy_w 2012-08-17
  • 打赏
  • 举报
回复
2,4,5,b4表示最大的包大小为5b4(1460),这个选项只允许在syn和syn/ack时发送。
不过这个应该不是必须的,实现应该允许不提供选项的syn包建立连接,不应该RST。
你完全复制socket客户端的包(当然除了seqno, chksum等),会出现rst吗?再去掉这些选项呢?
傻X 2012-08-16
  • 打赏
  • 举报
回复
TCP的流量算法是自适应的

不过你可以在Send,Recv上面动手脚
Yofoo 2012-08-16
  • 打赏
  • 举报
回复
应该不可以, RTT是动态调整的, 外部调整的意义不大, 你想做什么?
傻X 2012-08-16
  • 打赏
  • 举报
回复
我是感觉2边都要RawSocket才能完成你的测试工作
leetow2003 2012-08-16
  • 打赏
  • 举报
回复
我用socket写个客户端去连,用sniffer抓包,
发现TCP包中的选项有值,它的长度是12个字节,
当客户端去连时,第一次选项值是:
op0:2 op1:4 op2:5 op3:b4 op4:1 op5:3 op6:3 op7:2 op8:1 op9:1 op10:4 op11:2
然后服务器返回时,它的选项:
op0:2 op1:4 op2:5 op3:b4 op4:1 op5:1 op6:4 op7:2 op8:1 op9:3 op10:3 op11:7
以后就没有选项了,请问:
这些选项值表示什么意思?
ndy_w 2012-08-16
  • 打赏
  • 举报
回复
建议:用socket写个客户端去连,用sniffer抓包,看看你写的IP包和socket客户端发送的IP包哪里不同
ndy_w 2012-08-16
  • 打赏
  • 举报
回复
字节次序htons了吗?
leetow2003 2012-08-16
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]
检查下你的目的端口,是否和你的服务器一致。
[/Quote]
是一致的
ndy_w 2012-08-16
  • 打赏
  • 举报
回复
检查下你的目的端口,是否和你的服务器一致。
Gloveing 2012-08-16
  • 打赏
  • 举报
回复
sorry,楼上贴错了。。。
Gloveing 2012-08-16
  • 打赏
  • 举报
回复
MSDN的例子:
Example

/* FOPEN.C: This program opens files named "data"
* and "data2".It uses fclose to close "data" and
* _fcloseall to close all remaining files.
*/

#include <stdio.h>

FILE *stream, *stream2;

void main( void )
{
int numclosed;

/* Open for read (will fail if file "data" does not exist) */
if( (stream = fopen( "data", "r" )) == NULL )
printf( "The file 'data' was not opened\n" );
else
printf( "The file 'data' was opened\n" );

/* Open for write */
if( (stream2 = fopen( "data2", "w+" )) == NULL )
printf( "The file 'data2' was not opened\n" );
else
printf( "The file 'data2' was opened\n" );

/* Close stream */
if( fclose( stream ) )
printf( "The file 'data' was not closed\n" );

/* All other files are closed: */
numclosed = _fcloseall( );
printf( "Number of files closed by _fcloseall: %u\n", numclosed );
}


Output

The file 'data' was opened
The file 'data2' was opened
Number of files closed by _fcloseall: 1

Gloveing 2012-08-16
  • 打赏
  • 举报
回复
自己用原始socket发包,可以设置的
leetow2003 2012-08-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
这是对方的行为。没有这样的报文可以让对方多等一会儿。
不过,你确定对方发送RST是因为超时?
[/Quote]
我怀疑对方发送RST是因为超时,所以想加大RTT再试试
leetow2003 2012-08-16
  • 打赏
  • 举报
回复
服务器端是SOCK_STREAM,只是listen,然后accept
客户端是RawSocket,然后发送TCP包,第一发送SYN=1,第二次发确认包就不能成功了,怀疑的RTT太小了,
所以想自己设置
ndy_w 2012-08-16
  • 打赏
  • 举报
回复
这是对方的行为。没有这样的报文可以让对方多等一会儿。
不过,你确定对方发送RST是因为超时?
傻X 2012-08-16
  • 打赏
  • 举报
回复
那你用RawSocket在模拟的?

服务器端和客户端都你自己写的??
leetow2003 2012-08-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
TCP的流量算法是自适应的

不过你可以在Send,Recv上面动手脚
[/Quote]
请问怎么做?
leetow2003 2012-08-16
  • 打赏
  • 举报
回复
我只是想完成三次握手,因为
我发现在发送第一次SYN=1后,得到回应的seqno和ackno,然后
再发送第二次确认包,可是我发现我还没有发送,对方就已经
发送RST=1的复位包了,所以我想如果可以加大RTT,或许我的
确认包就可以发送成功了。
(我只想想模拟listen,accept和connect)
leetow2003 2012-08-16
  • 打赏
  • 举报
回复
我是想自己发送SYN=1,然后在得到回应后在发送确认包来实现三次握手,但是我发现在我第一次发送SYN=1
后,得到seqno和ackno后再发送确认包钱,对方已经发送了RST复位包,使得我再发送就没有意义了,
所以我想如果能加大RTT,可能我就可以实现三次握手了。
(我只是想模拟,listen,accept和connect)
找了好久,经过本人核对过,别的答案都只是第一章可以和第五版的对得上号,而这个文件确是都可以对上的。如:2-16 共有4个站进行码分多址通信。4个站的码片序列为 A:(-1-1-1+1+1-1+1+1) B:(-1-1+1-1+1+1+1-1) C:(-1+1-1+1+1+1-1-1) D:(-1+1-1-1-1-1+1-1) 现收到这样的码片序列S:(-1+1-3+1-1-3+1+1)。问哪个站发送数据了?发 送数据的站发送的是0还是1? 解:S?A=(+1-1+3+1-1+3+1+1)/8=1, A发送1 S?B=(+1-1-3-1-1-3+1-1)/8=-1, B发送0 S?C=(+1+1+3+1-1-3-1-1)/8=0, C无发送 S?D=(+1+1+3-1+1+3+1-1)/8=1, D发送1 5—33 假定TCP在开始建立连接时,发送方设定超时重传时间是RTO=6s。 (1)当发送方接到对方的连接确认报文段时,测量出RTT样本值为1.5s。试计算现在的 RTO值。 (2)当发送方发送数据报文段并接收到确认时,测量出RTT样本值为2.5s。试计算现在 的RTO值。 答: (1)据RFC2988建议,RTO=RTTs+4*RTTd。其RTTd是RTTs的偏差加权均值。 初次测量时,RTTd(1)= RTT(1)/2; 后续测量RTTd(i)=(1-Beta)* RTTd(i-1)+Beta*{ RTTs- RTT(i)} ; Beta=1/4 依题意,RTT(1)样本值为1.5秒,则 RTTs(1)=RTT(1)=1.5s RTTd(1)=RTT(1)/2=0.75s RTO(1)=RTTs(1)+4RTTd(1)=1.5+4*0.75=4.5(s) (2)RTT(2)=2.5 RTTs(1)=1.5s RTTd(1)=0.75s RTTd(2)=(1-Beta)* RTTd(1)+Beta*{ RTTs(1)- RT (2)}=0.75*3/4+{1.5-2.5}/4=13/16 RTO(2)=RTTs(1)+4RTTd(2)=1.5+4*13/16=4.75s

18,356

社区成员

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

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