免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2815 | 回复: 12
打印 上一主题 下一主题

[网络子系统] 关于send与sk_buff 关系 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-03-19 17:01 |只看该作者 |倒序浏览
应用程序每次成功调用一个send,在内核中都会有一个sk_buff与其想对应么?
如果是的话,这么把二者关联起来

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
2 [报告]
发表于 2014-03-19 17:04 |只看该作者
回复 1# 316953425

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

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



   

论坛徽章:
0
3 [报告]
发表于 2014-03-19 17:29 |只看该作者
本帖最后由 316953425 于 2014-03-19 17:30 编辑

回复 2# Godbach


    那每一次成功调用send,都会产生一个新的sk_buff吗

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
4 [报告]
发表于 2014-03-19 17:48 |只看该作者
回复 3# 316953425

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

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

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


   

论坛徽章:
0
5 [报告]
发表于 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呢???

   

论坛徽章:
4
酉鸡
日期:2014-03-21 23:19:50狮子座
日期:2014-08-01 22:11:40酉鸡
日期:2015-01-10 21:31:442015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2014-03-20 09:16 |只看该作者
回复 5# 316953425
我觉得:让代理做dnat,同时保证server对client的路由指向代理。
具体配置就不清楚了。


   

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
7 [报告]
发表于 2014-03-20 10:04 |只看该作者
回复 5# 316953425

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


   

论坛徽章:
0
8 [报告]
发表于 2014-03-20 10:33 |只看该作者
本帖最后由 316953425 于 2014-03-20 10:36 编辑

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

   

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
9 [报告]
发表于 2014-03-20 11:32 |只看该作者
回复 8# 316953425

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

   

论坛徽章:
0
10 [报告]
发表于 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的
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP