linuxでのrtoの設定とrtoテスト
6637 ワード
rto修正コマンド
sudo ip route change 172.16.100.0/24 dev eth0 rto_min 5(単位デフォルトms)
rtoテスト
1、socketネットワークプログラムテストを作成し、クライアントはずっとサービス側にデータ(テストクライアントのrto)を送信し、クライアントとサーバ側の通信過程で、サービス側がクライアントに通信するルート項目を削除する. 2、クライアントはwiresharkを通じてパケットをつかむことで、rtoの変化規則(指数退避)を分析することができる. 3、テストコードは以下の通りです.
#include
#include
#include
#include
#include
#include
#include
int main(){
char buf[100];
int fd = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
struct sockaddr_in dst;
if(fd == -1){
printf("Create socket error
");
return 0;
}
dst.sin_family = AF_INET;
dst.sin_port = htons(8000);
dst.sin_addr.s_addr = inet_addr("127.0.0.1");
if(connect(fd, (struct sockaddr*)&dst, sizeof(struct sockaddr)) == -1){
printf("Connet error
");
return 0;
}
while(1){
if(send(fd, "hello,world!
", 13, 0) != 13){
printf("Send error
");
return 0;
}
sleep(1);
}
return 0;
}
#include
#include
#include
#include
#include
#include
#include
#include
int fd_all[100];
void *server(void *fd_addr){
char buf[101];
int fd = *((int *)fd_addr);
while(1){
if(recv(fd, buf, 100, 0) <= 0){
printf("no data
");
break;
}
printf("%s
", buf);
}
close(fd);
return NULL;
}
int main(){
int fd, new_fd;
struct sockaddr_in my_addr, new_addr;
fd = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
if(fd == -1){
printf("crate socket error
");
return 0;
}
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(8000);
my_addr.sin_addr.s_addr = htonl(INADDR_ANY);
if(bind(fd, (struct sockaddr*)&my_addr, sizeof(struct sockaddr)) < 0){
printf("bind error
");
return 0;
}
listen(fd, 10);
while(1){
int size = sizeof(struct sockaddr);
new_fd = accept(fd, (struct sockaddr*)&new_addr, &size);
if(new_fd == -1){
printf("accept error
");
return 0;
}else{
pthread_t ntid;
if(pthread_create(&ntid, NULL, server, &new_fd) < 0){
printf("create thread error
");
return 0;
}
}
}
return 0;
}