深入剖析网络发送过程
8页1、深入剖析网络发送和接收过程本文在基于以下三个条件所写的:1) OSI七层网络通信模型。2) 所阐述的函数是基于 Linux2.6.1内核。3) 在面向连接的通信协议 TCP/IPV4的基础上。由于七层模型(应 用 层 , 表 示 层 , 会 话 层 , 传 输 层 , 网 络 层 , 数 据 链 路 层 , 物 理 层 )可以简化为以下五层结构: 应 用 层 (Application Layer), 传 输 层 (Transport Layer), 网 络 层 (Network Layer), 数 据 链 路 层 (Data Link Layer), 物 理 层 (Physical Layer).其 中 七 层 模 型 中 的 前 三 层 都 归 结 为 五 层 结 构 中 的 应 用 层 。 为 了 简 化 讨 论 , 本 文 主 要 从 这五 层 结 构 来 探 讨 。Layer 5:应用层(A pplication Layer)在 TCP协议上,当通过三方握手建立了连接之后,就进入数据包的实质发送阶段,在本文中以 send命令来阐述。当通过 send将数据包发送之后,glibc
2、函数库会启用另外一个其定义的别用名函数_libc_sendto(),该函数最后会间接执行到 sendto系统调用:inline_syscall#nr(name, args);/ #nr 说明是该系统调用带有 nr 个 args 参数 sendto 系统调用的参数值是 6,而 name 就是 sendto从上面的分析可以看出 glibc 将要执行的下面一条语句是inline_syscall6(name,arg1,arg2,arg3,arg4,arg5,arg6)在该函数中一段主要功能实现代码如下:_asm_ _volatile_ (callsys # %0 %1 0) /* We have some space in skb head. Superb! */if (copy skb_tailroom(skb)copy = skb_tailroom(skb);if (err = skb_add_data(skb, from, copy) != 0)goto do_fault;2.2)如果 skb没有了可用空间,内核会使用 TCP_PAGE宏来为发送的数据包分配一个高速缓存页空间,当该页被正
3、确地分配后就调用 Copy_from_user(to(page地址),from(usr 空间),n)将用户空间数据包复制到 page所在的地址空间。但是我们都知道数据包在协议层之间的传输是通过 skb的,难道将数据包复制到这个新分配的 page中,内核就可以去睡大觉了吗?当然不是!接下来内核就要来处理这个问题了,那么怎样来处理呢?此时就需要使用到 skb中的另外一个数据区 struct skb_shared_info,但是该数据区在创建 skb时是没有为其分配空间的,也就是说它开始纯粹就是个指针,而没有具体的告诉它要指向什么地方。这时大家应该知道它可以指向什么地方了,对,就是 page!在内核中对这种情况的具体是通过 fill_page_desc(struct sk_buff *skb,int I,struct page *page,int off,int size)来实现的,代码如下:static inline void fill_page_desc(struct sk_buff *skb, int i,struct page *page, int off, int size)skb
4、_frag_t *frag = frag-page = page;frag-page_offset = off;frag-size = size;skb_shinfo(skb)-nr_frags = i + 1;这里需要注意的是 struct skb_shared_info只能通过 skb_shinfo来获取,在该结构体中 skb_flag_t类型的 flagsi就是具体指向 page的数组。2.3)至此 skb数据包的装载工作算是结束了,接下来就需要做一些后续工作,包括是否要分片,以及后来的 TCP协议头的添加。先看在 tcp_sendmsg()中 的 最 后 一 个 重 要 函 数tcp_push,它 的 调 用 格 式 如 下 :static inline void tcp_push(struct sock *sk, struct tcp_opt *tp, int flags,int mss_now, int nonagle)细心的朋友会发现,在该函数中传输的竟然不是 skb,而是一个名为 sock的结构体,那这又是什么东东呢?个人理解是它在顶层协议层之间(例如:应用层和传输层之
《深入剖析网络发送过程》由会员飞***分享,可在线阅读,更多相关《深入剖析网络发送过程》请在金锄头文库上搜索。
人教版一年级下册数学第二单元20以内的退位减法测试卷精品【考试直接用】
人教版一年级下册数学第二单元20以内的退位减法测试卷(实用)word版
人教版一年级下册数学第二单元20以内的退位减法测试卷及答案(夺冠)
人教版一年级下册数学第二单元20以内的退位减法测试卷(典型题)
人教版一年级下册数学第二单元20以内的退位减法测试卷精品(a卷)
人教版一年级下册数学第二单元20以内的退位减法测试卷及答案【精品】
部编版二年级上册道德与法治期中测试卷 (考试直接用)
部编版二年级上册道德与法治期中测试卷 带答案(培优)
部编版二年级上册道德与法治期中测试卷 含答案(精练)
部编版二年级上册道德与法治期中测试卷 及答案【各地真题】
部编版二年级上册道德与法治期中测试卷 及完整答案【名校卷 】
部编版二年级上册道德与法治期中测试卷 【考点精练】
部编版三年级上册道德与法治期末测试卷 (重点)
部编版三年级上册道德与法治期末测试卷 (模拟题)word版
部编版三年级上册道德与法治期末测试卷 附答案(预热题)
部编版三年级上册道德与法治期末测试卷 附参考答案(b卷 )
部编版三年级上册道德与法治期末测试卷 答案下载
部编版三年级上册道德与法治期末测试卷 含答案【夺分金卷 】
部编版三年级上册道德与法治期末测试卷 含完整答案【网校专用】
部编版三年级上册道德与法治期末测试卷 及答案(最新)
2024-04-18 4页
2024-04-18 2页
2024-04-18 2页
2024-04-18 2页
2024-04-18 5页
2024-04-18 2页
2024-04-18 4页
2024-04-18 3页
2024-04-18 2页
2024-04-18 2页