bsd socket

bsd socket, 是UNIX系統中通用的網路接口,它不僅支持各種不同的網路類型,而且也是一種內部進程之間的通信機制。

基本介紹

  • 中文名:bsd socket
  • 性質: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向量用地址族標識符作為索引。

相關詞條

熱門詞條

聯絡我們