2012年1月9日
摘要: Connect函数的执行流程,就是按照上图的顺序,一步一步的由各个协议层来封装或解封数据的而构成的,所以这些数据,都是在分配skb_buff这个结构体空间时加入的数据空间中,按照MAC/IP/TCP的先后顺序,把数据封装好,而不是按照TCP/IP/MAC的顺序来的,在connect中,系统会调用ip_send()的函数,返回MAC的数据,此时,有可能远端地址还没有知道(本地路由是否有记录),那么在数据即将发送之前,系统还会调用ARP协议,来解析地址并填充相应字段,如果ARP发送没有结果,就会调用ICMP协议还报告错误。创建完MAC首部之后,在把指针移动IP首部位置,填充IP地址,其中的IP数据 阅读全文
posted @ 2012-01-09 11:32 image eye 阅读(962) 评论(0) 推荐(0) 编辑
摘要: 在使用socket函数创建套接字时,系统创建socket/sock两个结构体,用于本地数据的管理,组织,而这两个数据结构是不会被传送到网络上的,而真正被用来携带数据的结构体是skb_buff,系统在开辟skb_buff结构体空间时,同时把用户数据所需要的空间一起开辟了,也就是一次malloc(sizeof(struct skb_buff)+size)这么多空间,即skb_buff本身的大小,加上用户空间所需要的size大小的空间,由于malloc分配,所以这些空间时连续的一片空间的,也就是说skb_buff结构体数据结束后,接着就是用户的数据,因此,skb_buff结构体的最后成员unsign 阅读全文
posted @ 2012-01-09 10:35 image eye 阅读(1883) 评论(0) 推荐(0) 编辑