→ kdjf:沒掉封包都很好/一開始掉就崩潰了 11/23 17:58
→ bitlife:不過看文章是用udp來閃,有沒有可能退化用fix timeout來解 11/23 18:01
→ bitlife:決?(有沒有這設定項我不清楚) 11/23 18:02
→ bitlife:fixed timeout 11/23 18:02
→ kdjf:可是整個系統一起fixed timeout,可能還沒掉封包我就先受不了 11/23 18:27
→ kdjf:架這個tunnel時,我也會用同一個wlan上網/做別的事 11/23 18:28
→ kdjf:是說改天先試看fixed timeout好了 11/23 23:33
→ kdjf:再去看看iptables rule有沒有可能把完全一樣的封包擋掉 11/23 23:33
→ bitlife:比對封包超耗資源(CPU/RAM),直覺認為不太可能有此項功能 11/23 23:37
→ kdjf:只是要比對seq/ack/checksum就好了吧 conntrack原本就在做了 11/24 01:26
→ bitlife:問題是TCP重傳是藉由IP,你不能保證會是同樣的封包,有可能 11/24 08:17
→ bitlife:是seg1(先前送的)和要新傳送的seg2,一起合併用單一IP送出 11/24 08:18
→ kdjf:那樣只看一樣的seq/ack呢?是說看了一下conntrack(8)可能只用 11/24 08:29
→ kdjf:flag去猜status, 而不是分析完整的tcp header 11/24 08:30
→ bitlife:突然想到你把完全一樣的封包擋掉,假設萬一真的需要重傳,不 11/24 09:02
→ bitlife:是永遠就卡住了嗎?理論上你沒實作一個完整的tcp(或至少重 11/24 09:03
→ bitlife:要的部分),很難在ip層只靠簡單的判斷就判斷哪個封包不要 11/24 09:04
→ kdjf:因為包了兩層TCP,只要有一層會重傳就夠了 不過我原本沒有想 11/24 12:04
→ kdjf:到封包可能被合並的問題 11/24 12:11
→ bitlife:iptables不也是全系統共用的嗎?還是你上層有VM?如果你讓 11/24 12:35
→ bitlife:iptables丟棄重覆的IP封包,豈不連底下那層都不會重傳了? 11/24 12:35
→ bitlife:我換一個方式重述,iptables和在其之上的tcp模組,在對方送 11/24 12:36
→ bitlife:來ack之前,兩者都不會知道重傳到底需不需要,只能timeout後 11/24 12:36
→ bitlife:重傳.所以所謂的'重覆',在收到對方ack之前,都不可能判定一 11/24 12:37
→ bitlife:不需要,所以光靠比對是否重覆封包不足以判定是否該丟棄 11/24 12:38
→ bitlife:^定不需要 11/24 12:38
→ kdjf:上下兩層可以跑不同的interface/user,下面那層跑正常的tcp 11/24 15:34
→ kdjf:iptables rule只會丟掉上層的retrans. (-i ppp/tap/tun) 11/24 15:35
→ kdjf:可是我現在在iptables中找不到可用的extension... 11/24 15:36
→ kdjf:看來離想要的東西有點遠了 11/24 15:41
u32好像有能力抓出packet.seq, 可是不能存變數
我想要像這樣: (if (packet.seq > latest_seq -10) DROP)
^^^^^^^^^^ 不知到要存在哪裡
※ 編輯: kdjf 來自: 140.112.245.32 (11/24 16:36)
突然想到:retransmission不會發生的太快,可以用LAG target把seq抓到userspace
用script去改寫新的rule~
改天要用到tunnel時來試試看好了XDD
如果有成果的話,也許是第一次變成developer? (逃
※ 編輯: kdjf 來自: 140.112.245.32 (11/24 16:43)
※ 編輯: kdjf 來自: 140.112.245.32 (11/24 16:46)
→ bitlife:我剛發現,有人為了tcp over tcp的問題弄ssh over udp,不過 11/24 20:10
→ bitlife:略略搜尋下沒有看到有什麼專案 11/24 20:11
→ kdjf:over udp中間搞個不友善的NAT就掛點了啊QQ 11/24 21:37