136 socket 1 基礎知識

2021-07-09 19:01:48 字數 2022 閱讀 8394

socket,網路應用程式介面,是應用層到傳送層的介面。簡單點就是使用者程序,與系統核心的介面。

socket是應用層與tcp/ip協議族通訊的中間軟體抽象層,它是一組介面。

在設計模式中,socket其實就是乙個門面模式,它把複雜的tcp/ip協議族隱藏在socket介面後面,對使用者來說,一組簡單的介面就是全部,讓socket去組織資料,以符合指定的協議。

tcp/ip模型,應用層形成使用者程序,下面3層一般作為作業系統的核心。

* 應用層

* 傳送層

* 網路層

* 資料鏈路層

一種是」stream sockets」(流格式),另外一種是」datagram sockets」(資料報格式)。我們以後談到它們的時候也會用到」sock_stream」 和 「sock_dgram」。資料報套接字有時也叫「無連線套接字」(如果你確實要連線的時候可以用connect()。)

流式套接字是可靠的雙向通訊的資料流。如果你向套接字按順序輸出「1,2」,那麼它們將按順序「1,2」到達另一邊。它們是無錯誤的傳遞的,有自己的錯誤控制,在此不討論。

為什麼它們是無連線的呢?主要是因為它並不象流式套接字那樣維持乙個連線。你只要建立乙個包,構造乙個有目標資訊的ip 頭,然後發出去。無需連線。它們通常使用於傳輸包-包資訊。簡單的應用程式有:tftp, bootp等等。

你也許會想:「假如資料丟失了這些程式如何正常工作?」我的朋友,每個程式在 udp 上有自己的協議。

例如,tftp 協議每發出的乙個被接受到包,收到者必須發回乙個包來說「我收到了!」 (乙個「命令正確應答」也叫「ack」 包)。如果在一定時間內(例如5秒),傳送方沒有收到應答,它將重新傳送,直到得到 ack。這一ack過程在實現sock_dgram 應用程式的時候非常重要。

既然我剛才提到了協議層,那麼現在是討論網路究竟如何工作和一些 關於 sock_dgram 包是如何建立的例子。當然,你也可以跳過這一段, 如果你認為已經熟悉的話。

現在是學習資料封裝 (data encapsulation) 的時候了!它非常非常重 要。它重要性重要到你在網路課程學(圖1:資料封裝)習中無論如何也得也得掌握它。主要 的內容是:乙個包,先是被第乙個協議(在這裡是tftp )在它的報頭(也許 是報尾)包裝(「封裝」),然後,整個資料(包括 tftp 頭)被另外乙個協議 (在這裡是 udp )封裝,然後下乙個( ip ),一直重複下去,直到硬體(物理) 層( 這裡是乙太網 )。

當另外一台機器接收到包,硬體先剝去乙太網頭,核心剝去ip和udp 頭,tftp程式再剝去tftp頭,最後得到資料。現在我們終於講到聲名狼藉的網路分層模型 (layered network model)。這種網路模型在描述網路系統上相對其它模型有很多優點。例如, 你可以寫乙個套接字程式而不用關心資料的物理傳輸(序列口,乙太網,連 接單元介面 (aui) 還是其它介質),因為底層的程式會為你處理它們。實際 的網路硬體和拓撲對於程式設計師來說是透明的。

不說其它廢話了,我現在列出整個層次模型。如果你要參加網路考試, 可一定要記住:

表示層 (presentation)

會話層 (session)

傳輸層(transport)

網路層(network)

資料鏈路層(data link)

物理層(physical)

這個模型如此通用,如果你想,你可以把它作為修車指南。把它對應 到 unix,結果是:

傳輸層(host-to-host transport layer) (tcp, udp)

internet層(internet layer) (ip和路由)

網路訪問層 (network access layer) (網路層,資料鏈路層和物理層)

socket 基礎知識

socket是使用 標準unix 檔案描述符 file descriptor 和其它程式通訊的方式。struct sockaddr.這個結構 為許多態別的套接字儲存套接字位址資訊 struct sockaddr sa family 能夠是各種各樣的型別,但是在這篇文章中都是 af inet sa d...

socket基礎知識

注意 如果你已經接觸過socket,那就沒什麼必要耽誤時間看下去了。另外,如果發現其中任何錯誤,歡迎直接指出。1.按慣例先來介紹下socket windows中的很多東西都是從unix領域借鑑過來的,socket也是一樣。在unix中,socket代表了一種檔案描述符 在unix中一切都是以檔案為單...

socket程式設計基礎知識

為了使網路上的計算機能夠彼此識別對方,每台計算機都需要乙個ip位址以標識自己。ip位址由ip協議規定,以32位的二進位制數示。最新的ipv6協議將ip位址公升為128位,這使得ip位址更加廣泛,能夠很好地解決目前ip位址緊缺的情況,但是ipv6協議距離實際應用還有一段距離,目前多數作業系統和應用軟體...