阅读:826回复:0
关于在linux下分片的问题
用IPSec在linux下进行开发(VPN网关型),因为封包和完整型检验的信息而使原始IP包增加了
50字节左右,起初解决的发法是发送不可分片ICMP报文,但后来和某些设备试配时,发现有些设备不会在接到ICMP请求后自动把包分片改小。所以分片才是最终的解决的办法。 因为考虑不过多影响网关效率,现在考虑只做分片而重组的过程在网关后面的目的主机上重组。 平台LINUX 2.2.14 基于IPCHAINS三个HOOK iput ,output ,forward进行包的处理, 系统的分片处理在output后,if (skb->len > mtu )分片,这样重组就会在网关上进行,现在设想能不能在input 点截到IP包后,判断IP包的长度,如果大于1450(设定值)分成两片,然后分别对这两个IP包处理,现在这两个IP包在INPUT 怎么发出去,有直接的方法通过网卡发出去吗?这可能还有路由的问题。 另一种思路是,因为LINUX有一个维护网络数据的skb_buff链表,这样,在INPUT中, 分成两片IP01,IP02,这样将IP02的sk_buff插入到IP01 sk_buff后,原想IP02会在处理完IP01后,再进入iput点,但进行这样的操作,系统就会崩溃,不知道是什么原因? 不知道如过只在网关上做分片,有什么更好的解决方案?? |
|