我需要更改TCP标头中的窗口大小,但是当我更改它并重新计算校验和时,最终窗口将乘以窗口缩放选项。我可以在哪里和在哪个结构中找到并更改?如何更改linux中TCP数据包的窗口大小?
0
A
回答
0
是的,在连接建立期间协商完成后,我无法更改窗口比例。 我要发布的一段代码,我写了获得TCP选项(MSS和窗口缩放):
typedef struct {
unsigned char kind;
unsigned char size;
} tcp_option_t;
unsigned char* tmp = tcp_header;
if (tcp_header->doff > 5) {
unsigned char* opt = tmp + sizeof(struct tcphdr);
while(*opt != 0) {
tcp_option_t* _opt = (tcp_option_t*)opt;
if(_opt->kind == 1) { //NOP
++opt; // NOP is one byte;
continue;
}
if(_opt->kind == 2) { //MSS
unsigned int* mss_opt = (unsigned int*)(opt + sizeof(tcp_option_t));
unsigned int mss = htons(*mss_opt);
f->mss = mss;
}
if(_opt->kind == 3) { //wnd_scale
integer24* wnd_opt = (integer24*)(opt + sizeof(tcp_option_t));
integer24 wnd_scale = *wnd_opt;
f->wnd_scale = wnd_scale.data;
}
opt += _opt->size;
if (_opt->size == 0) {
//pr_info("Very strange situation: zero size\n");
break;
}
}
0
在连接建立期间协商完成后,无法更改窗口比例。在连接之前,您需要在套接字上设置一个大的接收缓冲区。在服务器的情况下,您需要在侦听套接字上设置接收缓冲区大小,从接收套接字继承它。
相关问题
- 1. 根据窗口大小更改列数
- 2. 如何更改窗口的大小DepthBasics
- 3. 如何根据窗口大小更改图像大小
- 4. 如何更改形状数据窗口的位置/大小
- 5. Kivy:如何更改窗口大小?
- 6. 如何更改窗口大小?
- 7. 如何更改默认窗口大小
- 8. 根据窗口大小更改Jquery值
- 9. 根据窗口大小更改img
- 10. 哪个net/ipv4文件包含Linux内核的TCP窗口大小参数?
- 11. 更改可可中窗口的大小?
- 12. Gtkmm - 更改窗口的最小大小
- 13. TCP拥塞窗口大小太大?
- 14. 用于设置TCP窗口大小的Linux命令
- 15. JavaFx元素,根据窗口大小动态更改大小
- 16. 如何更改Intellij中“数据视图”选项卡/窗口的字体大小?
- 17. 如何更改窗口大小时更改datagrid单元格大小
- 18. BSD上的TCP数据包的大小
- 19. 用vb.net中的窗口大小更改按钮的大小
- 20. 用vb.net中的窗口大小更改按钮的大小
- 21. 更改glui窗口的大小
- 22. 更改wxChoice的窗口选择大小
- 23. 如何更改窗口的大小或最小化?
- 24. 空UDP和TCP数据包的大小?
- 25. R plot_ly根据窗口大小更改绘制内容更改
- 26. 根据窗口大小更改/更改GridView DataTemplate基于Windows大小
- 27. 如何更改Excel中的默认评论窗口大小?
- 28. 如何更改Panda3D中的窗口大小?
- 29. 如何更改弹出窗口中的文本大小
- 30. 如何在Python中更改主Tkinter窗口的大小?
欧凯,但如果我需要在代理更改窗口大小。无论如何,我怎么读窗口缩放选项? – luminousmen 2015-04-05 12:43:23
您只能读取构成连接握手的初始SYN,SYN-ACK和ACK数据包的窗口缩放选项。我不明白你的第一句话。 – EJP 2015-04-07 23:21:39