Chinaunix

标题: 关于send与sk_buff 关系 [打印本页]

作者: 316953425    时间: 2014-03-19 17:01
标题: 关于send与sk_buff 关系
应用程序每次成功调用一个send,在内核中都会有一个sk_buff与其想对应么?
如果是的话,这么把二者关联起来
作者: Godbach    时间: 2014-03-19 17:04
回复 1# 316953425

这个涉及到到的内容就多了。

send 是系统调用,走的是 socket,sk_buff 是 kernel 里面数据包的最基本数据结构。socket 和 sk_buff 通过一些关系最终关联起来。



   
作者: 316953425    时间: 2014-03-19 17:29
本帖最后由 316953425 于 2014-03-19 17:30 编辑

回复 2# Godbach


    那每一次成功调用send,都会产生一个新的sk_buff吗
作者: Godbach    时间: 2014-03-19 17:48
回复 3# 316953425

应该是的,甚至是一个到多个。 TCP socket 里面有 write_queue 的,里面存储着待发送的所有报文。

send 执行成功,只代表系统调用的操作成功了,不代表报文成功发出去了。

更多的细节,你可以跟踪一下 kernel 中 send 的执行流程,或者看一下网上一些 send 实现的分析。


   
作者: 316953425    时间: 2014-03-20 09:03
回复 4# Godbach
我现在有一个这样的问题:
nginx做代理,由于client访问nginx,nginx转给server,

由于nginx是反向代理的模型,他会与client和server分别建立一条tcp连接,
这样的话server从tcp中看到的源ip就是nginx的源ip了,有没有什么办法
让server看到的源ip是client的源ip呢???

   
作者: chishanmingshen    时间: 2014-03-20 09:16
回复 5# 316953425
我觉得:让代理做dnat,同时保证server对client的路由指向代理。
具体配置就不清楚了。


   
作者: Godbach    时间: 2014-03-20 10:04
回复 5# 316953425

这个很简单啊。Nginx 应该提供了透明代理的功能。你看一下配置,这样就可以将 client IP 透传给 server  了。


   
作者: 316953425    时间: 2014-03-20 10:33
本帖最后由 316953425 于 2014-03-20 10:36 编辑

回复 7# Godbach
啊?nginx能做透明代理吗?nginx不是两条连接吗,透明代理不是一条连接???麻烦详细说一下

   
作者: Godbach    时间: 2014-03-20 11:32
回复 8# 316953425

建议了解一下 HTTP 透明代理。

   
作者: 316953425    时间: 2014-03-20 11:35
本帖最后由 316953425 于 2014-03-20 11:35 编辑

回复 9# Godbach
我刚才试了一下,nginx的配置文件为
user root;
worker_processes 1;

error_log /var/log/nginx/error.log debug;
#pid logs/nginx.pid;

events {
use epoll;
worker_connections 1024;
}

http {
resolver 202.96.64.68;
server {
listen 80;
location / {
proxy_pass http://$http_host$request_uri;
}
}
}

应该是你所说的透明代理吧???

可是nginx还是两条连接啊


server看到的tcp 源ip还是nginx的
   
作者: Godbach    时间: 2014-03-20 13:03
回复 10# 316953425
你这应该是基本的配置。

透明代理的话,是 nginx 可以用client IP 去和 server 建连。这样 server 看到的就是 client 的 IP。




   
作者: 316953425    时间: 2014-03-20 13:34
本帖最后由 316953425 于 2014-03-20 13:34 编辑

回复 11# Godbach
我没搜到啊,能否给一些连接,或者提示,要是能这样就太好了,谷歌和百度基本都搜编了啊,没看见能这样配置的啊


   
作者: 316953425    时间: 2014-03-21 10:39
回复 11# Godbach


    在linux 内核模块中想使用系统调用connect函数,该如何调用啊??




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2