首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

Linux socket设立mark的必要性

2012-06-20 
Linux socket设置mark的必要性Linux的Netfilter钩子点的位置会导致一些奇怪的问题,比如本机发出的包无法使

Linux socket设置mark的必要性
Linux的Netfilter钩子点的位置会导致一些奇怪的问题,比如本机发出的包无法使用基于mark的策略路由,这是因为mark一般是在Netfilter中进行的,而Linux的路由处在OUTPUT钩子点之前,因此这是一个顺序倒置的问题,如何来解决呢?只能在路由之前打上mark,而我们知道,对于外部进入的包,mark是在PREROUTING进行的,因此对于外部进入的包,策略路由是好使的,对于本机发出的包,路由之前只能是socket层了,那为何不能在传输层做呢?因为一来传输层比较杂,二来很多协议直接走到IP层,比如OSPF之类的,三来很多传输层协议也需要路由查找,比如TCP在connect的时候就需要查找路由以确定源IP地址(如果没有bind的话)。
        幸运的是,Linux的socket支持SO_MARK这样一个option,可以很方便的使用:


热点排行