351624530 发表于 2015-07-08 09:42

. 利用 netfilter 修改 tcp 报文, 造成 tcp 快速重传失败, 超过次数.


在软路由中利用netfilter 钩子函数 修改 修改 http 报文,http request的 http type 1.1 修改成 1.0 ,data 内容不压缩. 再在 responed 尾部插入 一个 段数据.

插入和校验均成功, 在 网络 中无 tc 限速的情况,一切正常, 如果网络中 有 tc 进行限速

会出现浏览网页概率性出现网页卡死情况,   wireshark 截包查看,是出现丢包情况,   具体查看 是 tcp 进行快速重传, 三次均无ack应答.   卸载此模块后, 浏览网页正常.   

找好久一直没有找到如何解决此问题, 请大神给一个解决思路.

Godbach 发表于 2015-07-08 11:55

回复 1# 351624530

没有 ACK 是谁没有给 ACK? server ?


   

351624530 发表于 2015-07-08 14:33

client 没有回 ack 给 server.    修正下, 是 serer重传tcp包 三次, 三次 client均未有 ack 包回复.

351624530 发表于 2015-07-08 14:36

回复 2# Godbach
client 没有回 ack 给 server.    修正下, 是 serer重传tcp包 三次, 三次 client均未有 ack 包回复.


   

351624530 发表于 2015-07-08 14:49

回复 2# Godbach

在 tcp 包里面 增加 字节seq和 ack   还有 sack, 均有修正.一出现丢包 就是 发现 server 重发的 tcp数据包给 client 连续三次,

这三次,client 均未发送 ack 给server进行回复..

很奇怪 不知道什么原因引起的,   网络 tc 有限速 会丢包, 但是 不应该重发的 连续的三次都丢吧.


   

nswcfd 发表于 2015-07-08 15:49

1. 不加载模块,但是有tc限速的情况下,浏览网页是否正常?
2. netfilter改包和tc限速是在同一个设备上,还是在不同的设备上?
3. 在路径的多个点上抓包,确认数据在什么阶段丢的,比如tc前还是tc后,client有没有收到这些重传的报文?
4. 可能的话,修改tc丢包的行为,变成每隔几个报文丢一个包,或者干脆去掉tc,用丢包来模拟tc,看看重传的行为是否一致?

351624530 发表于 2015-07-08 15:56

回复 6# nswcfd
1. 不加载模块, tc限速情况下, 浏览网页 偶尔也会出现浏览网页卡死, 不过概率很小,可以忍受.
2. tc 和 模块不再同一设备
3. 确定 抓包 在模块之后, 在 tc 之前
我在试试 在 各个阶段抓下包,谢谢啦


   

Godbach 发表于 2015-07-08 17:27

回复 3# 351624530

client 已经收到 server 的回包了,但是 client 没有 ack 吗?


   

Godbach 发表于 2015-07-08 17:27

回复 8# Godbach

对头。开发网络程序,定位问题是,最基本的就是各个环节抓包,快速定位出问题出在哪个阶段。


   

351624530 发表于 2015-07-08 19:28

回复 6# nswcfd

分段抓包发现 在 模块所在 设备 和tc 所在设备间 出现 这个错误,好像和 网卡有关


   
页: [1] 2 3
查看完整版本: . 利用 netfilter 修改 tcp 报文, 造成 tcp 快速重传失败, 超过次数.