我需要更改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