有线场景下观察TCP滑动窗口大小的变化

原链接:http://blog.chinaunix.net/u3/105477/showart_2092522.html

 

 

 

 

 

拥塞控制是网络层协议必备的一个功能,TCP采用拥塞窗口机制避免接收方被数据淹没! 同时为了更高效的传送数据,网络协议的设计者们引入了非常实用的加性增、乘性减的机制,取得了很好的效果!

   以下,我们将演示两个节点间TCP连接的拥塞窗口机制,方法上比较简单,演示结果也相当的明显! 应该把焦点集中在具体应用中该机制的运行机理,以及如何在具体应用和科研的其他类似场合使用这么一种巧妙的机制!
 
以下列出了运行时的所有命令:
(其中3和4步骤需要自行修改,我已在相应位置给出了提示,做简单替换即可!)
1. TCL脚本: tcpsim.tcl
2. 运行的命令格式:
   $ns tcpsim.tcl  bandwidth delay  window  simulation_time
   如: ns tcpsim.tcl 1Mb   100ms  64  5
3. 使用 TCP/RFC793edu   协议获得文件 TCP_RFC793edu.tr
4. 使用 TCP/Reno        协议获得文件 TCP_Reno.tr
5. 绘图比较的命令: xgraph TCP_RFC793edu.tr TCP_
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
TCP 协议中,滑动窗口是用来控制数据流量的一个重要机制。它可以让发送方和接收方之间的数据传输更加高效和可靠。 在 C 语言中,我们可以使用套接字编程来实现 TCP 协议的通信。下面是一个简单的示例代码,演示了如何设置 TCP 滑动窗口: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <netinet/in.h> #include <arpa/inet.h> #include <sys/types.h> #include <sys/socket.h> #define SERVER_PORT 8888 #define MAXLINE 1024 int main(int argc, char *argv[]) { int sockfd; struct sockaddr_in servaddr; if (argc != 2) { printf("usage: ./client <IPaddress>\n"); exit(1); } sockfd = socket(AF_INET, SOCK_STREAM, 0); bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(SERVER_PORT); inet_pton(AF_INET, argv[1], &servaddr.sin_addr); connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)); // 设置滑动窗口大小为 1024 字节 int windowsize = 1024; setsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &windowsize, sizeof(int)); char buf[MAXLINE]; while (fgets(buf, MAXLINE, stdin) != NULL) { write(sockfd, buf, strlen(buf)); int n = read(sockfd, buf, MAXLINE); buf[n] = '\0'; fputs(buf, stdout); } close(sockfd); return 0; } ``` 在上面的代码中,我们使用 `setsockopt` 函数来设置滑动窗口大小。`SO_RCVBUF` 参数表示接收缓冲区大小,而 `windowsize` 参数则表示滑动窗口大小。 需要注意的是,滑动窗口大小的设置需要根据具体情况来确定,不宜过大或过小。过大会占用过多内存资源,过小会导致传输效率低下。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值