随笔分类 -  网络编程

linux内核ipv4网络部分分层结构及涉入源文件
摘要:http://hi.baidu.com/amy_yeni/blog/item/c54003004d9a080b738da5b3.htmllinux内核ipv4网络部分分层结构:BSD socket层: 这一部分处理BSD socket相关操作,每个socket在内核中以struct socket结构体现。这一部分的文件主要有:/net/socket.c /net/protocols.c etcINET socket层:BSD socket是个可以用于各种网络协议的接口,而当用于tcp/ip,即建立了AF_INET形式的socket时,还需要保留些额外的参数,于是就有了struct sock结构 阅读全文
posted @ 2011-11-20 20:15 chingliuyu 阅读(403) 评论(0) 推荐(0)
linux 内核网络,数据接收流程图
摘要:4.3 数据接收流程图各层主要函数以及位置功能说明: 1)sock_read:初始化msghdr{}的结构类型变量msg,并且将需要接收的数据存放的地址传给msg.msg_iov->iov_base. net/socket.c 2)sock_recvmsg: 调用函数指针sock->ops->recvmsg()完成在INET Socket层的数据接收过程.其中sock->ops被初始化为inet_stream_ops,其成员recvmsg对应的函数实现为inet_recvmsg()函数. net/socket.c 3)sys_recv()/sys_recvfrom(): 阅读全文
posted @ 2011-11-20 20:09 chingliuyu 阅读(1110) 评论(1) 推荐(0)
linux 内核网络,数据发送流程图
摘要:4.2 数据发送流程图各层主要函数以及位置功能说明: 1)sock_write:初始化msghdr{}结构 net/socket.c 2)sock_sendmsg:net/socket.c 3)inet_sendmsg:net/ipv4/af_net.c 4)tcp_sendmsg:申请sk_buff{}结构的空间,把msghdr{}结构中的数据填入sk_buff空间。net/ipv4/tcp.c 5)tcp_send_skb:net/ipv4/tcp_output.c 6)tcp_transmit_skb:net/ipv4/tcp_output.c 7)ip_queue_xmit:net/. 阅读全文
posted @ 2011-11-20 20:07 chingliuyu 阅读(633) 评论(0) 推荐(1)
Libpcap BPF(BSD Packet Filter)包过滤机制
摘要:http://hi.baidu.com/ahtaria/blog/item/969ae4447eaa59076a63e57d.htmlLibpcap 重点使用 BPF(BSD Packet Filter)包过滤机制,BPF 于 1992 年被设计出来,其设计目的主要是解决当时已存在的过滤机制效率低下的问题。BPF的工作步骤如下:当一个数据包到达网络接口时,数据链路层的驱动会把它向系统的协议栈传送。但如果 BPF 监听接口,驱动首先调用 BPF。BPF 首先进行过滤操作,然后把数据包存放在过滤器相关的缓冲区中,最后设备驱动再次获得控制。注意到BPF是先对数据包过滤再缓冲,避免了类似 sun 的 阅读全文
posted @ 2011-11-19 23:42 chingliuyu 阅读(5323) 评论(0) 推荐(0)
Linux Netfilter实现机制和扩展技术
摘要:http://www.ibm.com/developerworks/cn/linux/l-ntflt/2.4.x的内核相对于2.2.x在IP协议栈部分有比较大的改动, Netfilter-iptables更是其一大特色,由于它功能强大,并且与内核完美结合,因此迅速成为Linux平台下进行网络应用扩展的主要利器,这些扩展不仅包括防火墙的实现--这只是Netfilter-iptables的基本功能--还包括各种报文处理工作(如报文加密、报文分类统计等),甚至还可以借助Netfilter-iptables机制来实现虚拟专用网(VPN)。本文将致力于深入剖析Netfilter-iptables的组织结 阅读全文
posted @ 2011-11-19 14:09 chingliuyu 阅读(1442) 评论(0) 推荐(0)
Linux内核bridge浅析
摘要:Linux网桥模型: Linux内核通过一个虚拟的网桥设备来实现桥接的,这个设备可以绑定若干个以太网接口设备,从而将它们桥接起来。如下图所示:网桥设备br0绑定了eth0和eth1。对于网络协议栈的上层来说,只看得到br0,因为桥接是在数据链路层实现的,上层不需要关心桥接的细节。于是协议栈上层需要发送的报文被送到br0,网桥设备的处理代码再来判断报文该被转发到eth0或是eth1,或者两者皆是;反过来,从eth0或从eth1接收到的报文被提交给网桥的处理代码,在这里会判断报文该转发、丢弃、或提交到协议栈上层。 而有时候eth0、eth1也可能会作为报文的源地址或目的地址,直接参与报文的发送.. 阅读全文
posted @ 2011-11-17 14:38 chingliuyu 阅读(1105) 评论(0) 推荐(0)
深度探索套接字缓冲区 sk_buff skb
摘要:http://blog.csdn.net/aaa6695798/article/details/4879271 套接字缓冲区用结构体struct sk_buff表示,它用于在网络子系统中的各层之间传递数据,处于一个核心地位,非常之重要。它包含了一组成员数据用于承载网络数据,同时,也定义了在这些数据上操作的一组函数。下面是其完整的定义: struct sk_buff { struct sk_buff *next; struct sk_buff *prev; struct sock *sk; struct skb_timeval tstamp; struct net_device *dev; s. 阅读全文
posted @ 2011-11-17 13:43 chingliuyu 阅读(1421) 评论(1) 推荐(0)
封包和拆包
摘要:封包和拆包 收藏作者:fengge8ylf 博客:http://blog.csdn.net/fengge8ylf对于基于TCP开发的通讯程序,有个很重要的问题需要解决,就是封包和拆包.自从我从事网络通讯编程工作以来(大概有三年的时间了),我一直在思索和改进封包和拆包的方法.下面就针对这个问题谈谈我的想法,抛砖引玉.若有不对,不妥之处,恳求大家指正.在此先谢过大家了.一.为什么基于TCP的通讯程序需要进行封包和拆包.TCP是个"流"协议,所谓流,就是没有界限的一串数据.大家可以想想河里的流水,是连成一片的,其间是没有分界线的.但一般通讯程序开发是需要定义一个个相互独立的数据包 阅读全文
posted @ 2011-05-11 11:01 chingliuyu 阅读(194) 评论(0) 推荐(0)
select、poll、epoll
摘要:版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明http://xufish.blogbus.com/logs/72686176.htmlselectselect最早于1983年出现在4.2BSD中,它通过一个select()系统调用来监视多个文件描述符的数组,当select()返回后,该数组中就绪的文件描述符便会被内核修改标志位,使得进程可以获得这些文件描述符从而进行后续的读写操作。select目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优点,事实上从现在看来,这也是它所剩不多的优点之一。select的一个缺点在于单个进程能够监视的文件描述符的数量存在最大限制,在L 阅读全文
posted @ 2011-05-05 20:24 chingliuyu 阅读(310) 评论(0) 推荐(1)
揭开Socket编程的面纱
摘要:揭开Socket编程的面纱Posted on 2005-12-10 22:59源码工作室阅读(42903)评论(70)编辑收藏所属分类:网络编程 对TCP/IP、UDP、Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵。那么我想问:1.什么是TCP/IP、UDP?2.Socket在哪里呢?3.Socket是什么呢?4.你会使用它们吗?什么是TCP/IP、UDP?TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,它是为广域网(WANs)设计的。UDP(Us 阅读全文
posted @ 2010-12-21 09:40 chingliuyu 阅读(200) 评论(1) 推荐(1)