QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1726|回复: 14

求救:使用TCP的三次握手可以计算上行带宽,以及延时。

[复制链接]
发表于 2005-5-23 16:04:48 | 显示全部楼层 |阅读模式
使用TCP的三次握手可以计算上行带宽,以及延时。
可问题是如何发送TCP连接数据?
使用原始套接口能用来发送TCP报头吗?如何发送?
TCP报头这样定义有问题吗?
typedef struct tcphdr {
    unsigned short th_sport;
    unsigned short th_dport;
    unsigned int th_seq;//序列号
    unsigned int th_ack;//确认号
    unsigned char th_off:4;//首部长度
    unsigned char th_x2:4;//保留位
    unsigned char th_flags;//标志
    unsigned short th_win;
    unsigned short th_sum;
    unsigned short th_urp;
}TcpHeader;

是否要选项区域???


我是用本机向远程机的非活动端口发送SYN 报文,远程机则会发回一个RST报文作为响应。

可怎么样才能发送SYN报文?用send() or sendto()?我目前用sendto()可以发送TCP数据了。。可就不是能用recvfrom()来接受响应的RST报文。不知道怎么回事?
发表于 2005-5-23 16:17:17 | 显示全部楼层
如果是为了计算时间 这个思路的话 用任何协议都可以
回复

使用道具 举报

 楼主| 发表于 2005-5-23 20:06:14 | 显示全部楼层
晕。。。
但UDP没有ACK,怎么计算时间?ICMP?
回复

使用道具 举报

发表于 2005-5-23 22:33:09 | 显示全部楼层
不能

借助linux tun device

自己写TCP包
回复

使用道具 举报

发表于 2005-5-24 08:53:01 | 显示全部楼层
但UDP没有ACK,怎么计算时间?ICMP?

回复啊 你用ack不也是靠回复计算时间?
回复

使用道具 举报

 楼主| 发表于 2005-5-24 19:34:28 | 显示全部楼层
我是新手。。。。UDP有回复信息的??
又问,原始套接口只能用sendto()发送?
回复

使用道具 举报

发表于 2005-5-25 08:56:57 | 显示全部楼层

tcp是协议站回复你 udp是用户程序回复你 不是一回事?
没有不回复的“网络”吧
回复

使用道具 举报

发表于 2005-5-25 09:26:58 | 显示全部楼层
UDP不是不回复,而是不保证回复可靠,其可靠性要由应用程序根据协议要求来保证。
回复

使用道具 举报

 楼主| 发表于 2005-5-25 10:17:36 | 显示全部楼层
[quote:bdf61ad52f="wsm"]晕
tcp是协议站回复你 udp是用户程序回复你 不是一回事?
没有不回复的“网络”吧[/quote]

就是说TCP可以不用做服务器端?而UDP要有服务器端才能保证有回复?
回复

使用道具 举报

发表于 2005-5-25 11:11:31 | 显示全部楼层
UDP要有服务器端才能保证有回复

任何事情都是要有对端才能有“回复”的吧?

TCP可以不用做服务器端

??

tufeicome, 你不妨先整理一下你对协议交互的思路
回复

使用道具 举报

 楼主| 发表于 2005-5-25 20:49:56 | 显示全部楼层
我认为我的思路是对的。。。
可能你理解错了。。
我是用本机向远程机的非活动端口发送SYN 报文,远程机则会发回一个RST报文作为响应。

可怎么样才能发送SYN报文?用send() or sendto()?我目前用sendto()可以发送TCP数据了。。可就不是能用recvfrom()来接受响应的RST报文。不知道怎么回事?
回复

使用道具 举报

发表于 2005-5-26 09:11:03 | 显示全部楼层
1。你的计算思路错了 计算带宽是不能用小报文计算的 这样得不到合理的数据 而且哪怕计算也是上行+下行的综合带宽 用tcp合适的做法是连接上后发送各种大小的报文计算
2。如果是为了简单的计算时间 你应该用任何响应的服务来得到回应计算 而不要用syn 用这种手段一般来说会被防火墙认为是dos而拒绝
3。其实你不能确定对端是不响应还是不能响应 也不用指望能做一个任何地方都能用的机制
回复

使用道具 举报

 楼主| 发表于 2005-5-26 16:42:07 | 显示全部楼层
是不能用小报文计算带宽,可我可以用小报文计算瘦时延,然后利用大报文计算胖时延。这样不就可以计算出平均延时。这样不就可以用计算下行带宽。

后面两个是没考虑。。
用syn 用这种手段一般来说会被防火墙认为是dos而拒绝?
这个是怎么回事?发送SYN到非活动端口的话,不是协议栈返回的?难道说协议栈也是在防火墙里面?

不能确定对端是不响应还是不能响应?
这个不能理解。。。

不要骂我。。。我是菜鸟。。。
回复

使用道具 举报

发表于 2005-5-26 17:09:34 | 显示全部楼层
发送syn是dos的一种 做得好的firewall会考虑的 记得看到过讲linux是怎么比较良好的处理几种dos攻击的文章 里面有它

通常极限速率出现在某一个大小的包上 取决于带宽 路由器的一些设置 所以很难说平均带宽

个人认为这个东西理论值很容易推 但实际值很难测 因为通常来说 客户发送的包不能使网络处于极限工作状态 也许会发现是 发了100个icmp也是20ms到达 发了100个10k数据也是20ms达到 让后发现发送100个30k包变慢 但却又很难得到短时间发送300000个icmp小包会怎么样

我认为最佳策略是需要服务器+客户端的 这样可以给一个很完整的小数据包到大数据的速率分布 前提是你的机器能让网络够忙
回复

使用道具 举报

 楼主| 发表于 2005-5-29 12:39:21 | 显示全部楼层
但是我认为C/S模式有缺陷。不能分布式的计算。要计算两台主机的网络速度,你都要装上服务器端,影响主机性能,而且也不实用。C/S麻烦,客户不喜欢。PING这样一个小程序,任何人都喜欢,因为小又直接。。所以我也个人认为C/S不是很理想的一个方案。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-5 21:50 , Processed in 0.039930 second(s), 16 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表