DSP

BSD socket

2019-07-13 18:57发布

BSD是UNIX系统中通用的网络接口,它不仅支持各种不同的网络类型,而且也是一种内部进程之间的通信机制。两个通信进程都用一个套接口来描述通信链路的两端。套接口可以认为是一种特殊的管道,但和管道不同的是,套接口对于可以容纳的数据的大小没有限制。   Linux支持多种类型的套接口,也叫做套接口寻址族,这是因为每种类型的套接口都有自己的寻址方法。Linux支持以下的套接口类型:   UNIX UNIX域套接口   INET Internet地址族TCP/IP协议支持通信。   AX25 Amateur radio X25   IPX Novell IPX   APPLE TALK Appletalk DDP   X25 X25   这些类型的套接口代表各种不同的连接服务。   Linux的BSD套接口支持下面的几种套接口类型:   1、流式(stream)   这些套接口提供了可靠的双向顺序数据流连接。它们可以保证数据传输中的完整性、正确性和单一性。I N E T寻址族中的T C P协议支持这种类型的套接口。   2、数据报(Datagram)   这种类型的套接口也可以像流式套接口一样提供双向的数据传输,但它们不能保证传输的数据一定能够到达目的节点。即使数据能够到达,也无法保证数据以正确的顺序到达以及数据的单一性、正确性。UDP协议支持这种类型的套接口。   3、原始(Raw)   这种类型的套接口允许进程直接存取下层的协议。   4、可靠递送消息(Reliable Delivered Messages)   这种套接口和数据报套接口一样,只能保证数据的到达。   5、顺序数据包(Sequenced Packets)   这种套接口和流式套接口相同,除了数据包的大小是固定的。   6、数据包(Packet)   这不是标准的BSD 套接口类型,而是Linux 中的一种扩展。它允许进程直接存取设备层的数据包。   利用套接口进行通信的进程使用的是客户机/服务器模式。服务器用来提供服务,而客户机可以使用服务器提供的服务,就像一个提供w e b页服务的We b服务器和一个读取并浏览web页的浏览器。服务器首先创建一个套接口,然后给它指定一个名字。名字的形式取决于套接口的地址族,事实上也就是服务器的当地地址。系统使用数据结构sockaddr来指定套接口的名字和地址。一个INET 套接口可以包括一个I P端口地址。你可以在/etc/services中查看已经注册的端口号,例如,一个web页面服务器的端口号是80。在服务器指定套接口的地址以后,它将监听和此地址有关的连接请求。请求的发起者,也就是客户机,将会创建一个套接口,然后再创建连接请求,并指定服务器的目的地址。对于一个INET 套接口来说,服务器的地址就是它的I P地址和端口号。这些连接请求必须通过各种协议层,然后等待服务器的监听套接口。一旦服务器接收到了连接请求,它将接受或者拒绝这个请求。如果服务器接受了连接请求,它将创建一个新的套接口。一旦服务器使用一个套接口来监听连接请求,它就不能使用同样的套接口来支持连接。当连接建立起来以后,连接的两端都可以发送和接收数据。最后,当不再需要此连接时,可以关闭此连接。   使用BSD套接口的确切含义在于套接口所使用的地址族。设置一个TCP/IP连接就和设置一个业余无线电X.25连接有很大的不同。和VFS一样,Linux从BSD 套接口协议层中抽象出了套接口界面,此界面负责和各种不同的应用程序之间进行通信。内核初始化时,内核中的各个不同的地址族将会在BSD 套接口界面中登记。稍后当应用程序创建和使用BSD 套接口时,就将会在BSD 套接口和它支持的地址族之间建立一个连接。此连接是通过交叉关联的数据结构和地址族表建立的。例如,当一个应用程序创建一个新的套接口时,将产生一个可以被BSD 套接口使用的与特定的地址族有关的套接口创建子过程。   设置系统内核时,一系列的地址族和协议将会保存在协议向量中。每一个协议都由它的名字代表,例如, I N E T和其初始化进程的地址。当系统启动并初始化套接口界面时,将会调用每一个协议的初始化进程。对于套接口地址族来说,这意味着它们注册的一系列有关协议操作。   这是一系列的子程序,每一个都执行一个和特定的地址族有关的操作。已经注册的和协议相关的操作保存在pops向量中,而此向量由一系列指向数据结构proto_ops的指针组成。   数据结构proto_ops包括地址族的类型以及指向与特定地址族有关的套接口操作程序的指针。Pops向量用地址族标识符作为索引。

热门文章