用c语言编程TCP拥塞控制编程,要求① 程序具备必要的输入提示、输出提示。 ② 程序输入:初始门限值、传输轮次。 ③ 根据用户输入的“发生超时”或“收到三次重复确认”时的传输轮次实施拥塞控制。 ④ 程序输出:各传输轮次的拥塞窗口值。 ⑤ 可查询单个传输轮次的拥塞窗口值。 ⑥ 考虑到实际的TCP拥塞窗口以字节为单位。
时间: 2024-03-20 11:43:54 浏览: 128
好的,这是一个关于TCP拥塞控制的编程实验,以下是一个实现的示例代码:
```c
#include <stdio.h>
int main() {
int ssthresh, rounds, cwnd;
printf("请输入初始门限值:");
scanf("%d", &ssthresh);
printf("请输入传输轮次:");
scanf("%d", &rounds);
cwnd = 1; //初始拥塞窗口值为1
int i;
for (i = 1; i <= rounds; i++) {
printf("传输轮次%d的拥塞窗口值为:%d字节\n", i, cwnd);
if (i == 2) {
printf("发生超时,进行拥塞控制\n");
ssthresh = cwnd / 2; //门限值减半
cwnd = 1; //拥塞窗口值重新设为1
} else if (i == 4) {
printf("收到三次重复确认,进行拥塞控制\n");
ssthresh = cwnd / 2;
cwnd = ssthresh + 3; //拥塞窗口值重新设为门限值加3
} else {
cwnd += 1; //拥塞窗口值增加1
}
}
int choice = 0;
while (choice != -1) {
printf("请输入要查询的传输轮次(输入-1结束):");
scanf("%d", &choice);
if (choice == -1) {
break;
} else if (choice > rounds) {
printf("错误:输入的传输轮次超出范围!\n");
} else {
int window_size = (choice <= 2) ? (cwnd * 2) : ((choice <= 4) ? ssthresh : cwnd);
printf("传输轮次%d的拥塞窗口值为:%d字节\n", choice, window_size);
}
}
return 0;
}
```
在这个程序中,我们先让用户输入初始门限值和传输轮次,然后按照传输轮次的顺序计算出各传输轮次的拥塞窗口值,并输出到屏幕上。当传输轮次为2或4时,程序会发生超时或收到三次重复确认,需要进行拥塞控制。在拥塞控制时,我们将门限值减半,并将拥塞窗口值重新设为1或门限值加3。最后,我们还支持用户查询单个传输轮次的拥塞窗口值,保证程序的可用性。
阅读全文