Linux不同服务器的协议栈描述,Linux协议栈pf_packet相关分析

一:名词解释:

1,BSD socket层:

bsd socket是Berkeley套接字应用程序接口(API)包括了一个用C语言写成的应用程序开发库,主要用于实现进程间通讯,在计算机网络通讯方面被广泛使用。

Berkeley套接字接口的定义在几个头文件中。这些文件的名字和内容与具体的实现之间有些许的不同。 大体上包括:

这个列表是一个Berkeley套接字API库提供的函数或者方法的概要:

socket() 创建一个新的确定类型的套接字,类型用一个整型数值标识,并为它分配系统资源。

bind() 一般用于服务器端,将一个套接字与一个套接字地址结构相关联,比如,一个指定的本地端口和IP地址。

listen() 用于服务器端,使一个绑定的TCP套接字进入监听状态。

connect() 用于客户端,为一个套接字分配一个自由的本地端口号。 如果是TCP套接字的话,它会试图获得一个新的TCP连接。

accept() 用于服务器端。 它接受一个从远端客户端发出的创建一个新的TCP连接的接入请求,创建一个新的套接字,与该连接相应的套接字地址相关联。

send()和recv(),或者write()和read(),或者recvfrom()和sendto(), 用于往/从远程套接字发送和接受数据。

close() 用于系统释放分配给一个套接字的资源。 如果是TCP,连接会被中断。

gethostbyname()和gethostbyaddr() 用于解析主机名和地址.

select() 用于修整有如下情况的套接字列表: 准备读,准备写或者是有错误。

poll() 用于检查套接字的状态。 套接字可以被测试,看是否可以写入、读取或是有错误。

getsockopt() 用于查询指定的套接字一个特定的套接字选项的当前值。

setsockopt() 用于为指定的套接字设定一个特定的套接字选项。

http://zh.wikipedia.org/wiki/Berkeley套接字

2,协议栈 Protocol Stack

协议族是一组协议的集合, 协议栈是协议的实现,指网络中各层协议的总和(有顺序的一组协议), 协议栈的工作原理类似于栈,遵守FIFO的原则。其形象的反映了一个网络中文件传输的过程:由上层协议到底层协议,再由底层协议到上层协议。使用最广泛的是英特网协 议栈,由上到下的协议分别是:应用层(HTTP,TELNET,DNS,EMAIL等),运输层(TCP,UDP),网络层(IP),链路层(WI- FI,以太网,令牌环,FDDI等),物理层.

TCP/IP也称”国际协议簇”, 即不仅指 TCP/IP协议本身,而且包括与其有关的协议。 TCP为传输控制协议,IP为网际协议,是网络层最重要的协议。采用TCP/IP协议通过互联网传送信息可减少网络中的传输阻塞,方便大批量的数据在网上 传输,从而提高网络的传输效率。 TCP/IP协议族中包括上百个互为关联的协议,其中有:Telnet(Remote Login):提供远程登录功能; FTP (FileTransfer Protocol):远程文件传输协议,允许用户将远程主机上的文件拷贝到自己的计算机上; SMTP (Simple Messagetransfer Protocol):简单信息传输协议,主要用于传输电子邮件;NFS(Network File Server):网络文件服务器,可使多台计算机透明地访问彼此的目录 ; UDP ( User DatagramProtocol):用户数据包协议。

3,INET socket层

BSD socket向用户提供了一个一致性的网络编程接口,他的底层是INET PF_UNIX PF_IPX PF_PACKET PF_INET6 等协议栈。INET socket层是其中的IPv4网络协议的接口,相当于建立了AF_INET形式的socket,该层使用sock结构保存接口上额外的参数,主要的文件有net/ipv4/protocol.c、net/ipv4/af_inet.c和net/core/sock.c。

socket层支持包括TCP/IP协议在内的Internet协议族,一个协议使用另一个协议的服务。它与BSD socket层的接口要通过一系列Internet协议簇,socket操作,这一操作是在网络初始化时就已经注册到BSD socket层的。BSD socket层从已注册的INET proto_ops数据结构中调用INET层socket支持例程来为它执行工作。例如,一个地址族为INET的BSD socket建立请求,将用到下层的INET socket的建立函数。。在这些操作中,BSD socket层把用来描述BSD socket的socket 结构传构到INET层。为了不把BSD socket与TCP/IP的特定信息搞混,INET socket层使用它自己的数据结构 --sock,它与BSD socket结构相连。这意味着后来的INET socket调用能够很容易地重新找到sock结构。sock结构的协议操作指针(sock->sk_prot)也在初始化时建立,它依赖与被请求的协议。如果请求的是TCP,那么sock结构的协议操作指针将指向TCP连接所必需的TCP协议操作集。proto_ops(socket->ops)结构由地址族类型和一系列指向与特定地址族对应的socket操作例程的函数指针组成。

推断:bsd socket层封装了操作inet socket层的函数,inet socket层可以替换成其他协议层,比如pf_packet

4,TCP/UDP层,IP层;

实现传输层和网络层的操作,TCP/UDP层使用inet_protocol和proto结构,主要文件有

5,驱动硬件接口层:

6,总结

本文要使用的Linux Net/4网络源代码的,其中大部分位于目录/usr/src/linux-2.x/net,列表如下,

插口层

BSD Socket /net/socket.c /net/protocols.c

INET Socket /ipv4/protocol.c /ipv4/af_inet.c /net/ipv4/core/sock.c

协议层

TCP/UDP /net/ipv4/udp.c /net/ipv4/datagram.c /net/ipv4/tcp_input.c /net/ipv4//tcp_output.c /net/ipv4/tcp.c /net/ipv4/tcp_minisocks.c /net/ipv4/tcp_timer.c etc...

IP /net/ipv4/ip_forward.c /net/ipv4/ip_fragment.c /net/ipv4/ip_input.c /net/ipv4/ip_output.c

接口层 net/core/dev.c driver/net Ethernet

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值