socket层次示意图

 


BSD Socket 接口
--------------------------------------------
    这是一个通用的接口,它不仅支持各种网络工作形式,而且还是一个交互式通讯机制。一个套接字描述一个通讯连接的一端,两个通讯程序中各自有一个套接字来描述它们自己那一端。套接字可以被看成一个专门的管道,但又不象管道,套接字对它们能容纳的数据量没有限制。Linux支持多种类型的套接字。这是因为每一类型的套接字有它自己的通信寻址方法。Linux支持下列套接字地址族或域:
    UNIX         Unix域套接字
    INET         Internet地址族支持通过TCP/IP协议的通信
    AX25         Amateur radio X25
    IPX          Novell IPX
    APPLETALK    Appletalk DDP
    X25          X25

    有一些套接字类型支持面向连接的服务类型。并非所有的地址族能支持所有的服务类型。Linux BSD套接字支持下列套接字类型:
    stream
    这些套接字提供可靠的双工顺序数据流,能保证传送过程中数据不丢失,不被弄混和复制。Internet地址中的TCP协议支持流套接字。
    datagram
    这些套接字提供双工数据传送,但与流套接字不同,这里不保证信息的到达。即使它们到达了,也不能保其到达的顺序,甚至不能保证被复制和弄混。这类套接字由Internet地址族中的UDP协议支持。
    raw
    允许直接处理下层协议(所以叫“raw”)。例如,有可能打开一个raw套接字到以太网设备,看raw IP数据传输。
    reliable delivered messages
    与数据报很象,但它能保证数据的到达。
    sequenced packets
    与流套接字相似,但的数据包大小是固定的。
    packet
    这不是一个标准的BSD套接字类型,而是一个Linux特定的扩展,它允许在设备级上直接处理包。


    对BSD socket进行准确操作要依赖于它下面的地址族(协议族)。象虚拟文件系统一样,Linux从BSD socket层抽象出socket接口,应用程序和BSD socket由每个地址族(协议族)的特定软件来支持。内核初始化时,地址族被置入内核中并将自己注册到BSD socket接口。之后,当应用程序建立用使用BDS sockets时,在BSD socket与它支持的地址族之间将产生一个联接。这一联接是由交叉链接数据结构和地址族表特定支持程序产生。例如,每当应用程序建立一个新的socket,就会有一个BSD socket接口用的地址族特定socket建立程序。
    proto_ops(socket->ops)结构由地址族类型和一系列指向与特定地址族对应的socket操作例程的函数指针组成。



INET Socket层
--------------------------------------------
    INET socket层支持包括TCP/IP协议在内的Internet地址族。这些协议是分层的,一个协议使用另一个协议的服务。Linux的TCP/IP代码和数据结构反映了这一分层模型。它与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协议操作集。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值