Python網路編程——Socket

來源:互聯網
上載者:User

標籤:過程   script   操作性   programs   form   science   int   參與   傳輸服務   

一、網路的基礎知識

1、OSI參考模型

  OSI是Open System Interconnect的縮寫,意為開放式系統互聯。一般都叫OSI參考模型,是ISO組織在1985年研究的網路互聯模型。該體繫結構標準定義了網路互連的七層架構,在這一架構下進一步詳細規定了每一層的功能,以實現開放系統內容中的互連性、互通性和應用的可移植性。

  OSI七層參考模型的各個層次的劃分遵循下列原則:

  1、同一層中的各網路節點都有相同的階層,具有同樣的功能。

  2、同一節點內相鄰層之間通過介面(可以是邏輯介面)進行通訊。

  3、七層結構中的每一層使用下一層提供的服務,並且向其上層提供服務。

  4、不同節點的同等層按照協議實現對等層之間的通訊。

 

物理層物理層是OSI的第一層,它雖然處於最底層,卻是整個開放系統的基礎。物理層為裝置之間的資料通訊提供傳輸媒體及互連裝置,為資料轉送提供可靠的環境。1.1媒體和互連裝置規定通訊裝置的機械的、電氣的、功能的和過程的特性,用以建立、維護和拆除物理鏈路串連。具體地講,機械特性規定了網路連接時所需接外掛程式的規格尺寸、引腳數量和排列情況等;電氣特性規定了在物理串連上傳輸bit流時線路上訊號電平的大小、阻抗匹配、傳輸速率 距離限制等。物理層的媒體包括架空明線、平衡電纜、光纖、無線通道等。通訊用的互連裝置指DTE和DCE間的互連裝置。DTE即資料終端設備,又稱物理裝置,如電腦、終端等都包括在內。而DCE則是資料通信設備或電路串連裝置,如數據機等。資料轉送通常是經過DTE——DCE,再經過DCE——DTE的路徑。互連裝置指將DTE、DCE串連起來的裝置,如各種插頭、插座。LAN中的各種粗、細同軸電纜、T型接、插頭,接收器,發送器,中繼器等都屬物理層的媒體和連接器。1.2物理層的主要功能1.2.1為資料端裝置提供傳送資料的通路,資料通路可以是一個物理媒體,也可以是多個物理媒體串連而成。一次完整的資料轉送,包括啟用物理串連,傳送資料,終止物理串連.所謂啟用,就是不管有多少物理媒體參與,都要在通訊的兩個資料終端設備間串連起來,形成一條通路。1.2.2傳輸資料,物理層要形成適合資料轉送需要的實體,為資料傳送服務。一是要保證資料能在其上正確通過,二是要提供足夠的頻寬(頻寬是指每秒鐘內能通過的位元(BIT)數),以減少通道上的擁塞。傳輸資料的方式能滿足點到點,一點到多點,串列或並行,半雙工或全雙工系統,同步或非同步傳輸的需要。 資料連結層資料鏈路可以粗略地理解為資料通道。物理層要為終端裝置間的資料通訊提供傳輸媒體及其串連.媒體是長期的,串連是有生存期的.在串連生存期內,收發兩端可以進行不等的一次或多次資料通訊.每次通訊都要經過建立通訊聯絡和拆除通訊聯絡兩過程.這種建立起來的資料收發關係就叫作資料鏈路.而在物理媒體上傳輸的資料難免受到各種不可靠因素的影響而產生差錯,為了彌補物理層上的不足,為上層提供無差錯的資料轉送,就要能對資料進行檢錯和錯誤修正.資料鏈路的建立,拆除,對資料的檢錯,錯誤修正是資料連結層的基本任務。2.1鏈路層的主要功能鏈路層是為網路層提供資料傳送服務的,這種服務要依靠本層具備的功能來實現。鏈路層應具備如下功能:物理地址定址、資料的成幀、流量控制、資料的檢錯、重發等。在這一層,資料的單位稱為幀(frame)。2.2資料連結層的主要協議資料連結層協議是為發對等實體間保持一致而制定的,也為了順利完成對網路層的服務。資料連結層協議的代表包括:SDLC、HDLC、PPP、STP、框架轉送等。 網路層網路層的產生也是網路發展的結果.在聯機系統和線路交換的環境中,網路層的功能沒有太大意義.當資料終端增多時。它們之間有中繼裝置相連.此時會出現一台終端要求不只是與唯一的一台而是能和多台終端通訊的情況,這就是產生了把任意兩台資料終端設備的資料連結起來的問題,也就是路由或者叫尋徑。另外,當一條物理通道建立之後,被一對使用者使用,往往有許多空閑時間被浪費掉.人們自然會希望讓多對使用者共用一條鏈路,為解決這一問題就出現了邏輯通道技術和虛擬電路技術。3.1網路層主要功能網路層的任務就是選擇合適的網間路由和交換結點,確保資料及時傳送。網路層將資料連結層提供的幀組成資料包,包中封裝有網路層包頭,其中含有邏輯地址資訊- -來源站點點和目的網站地址的網路地址。如果你在談論一個IP地址,那麼你是在處理第3層的問題,這是“資料包”問題,而不是第2層的“幀”。IP是第3層問題的一部分,此外還有一些路由協議和位址解析通訊協定(ARP)。有關路由的一切事情都在這第3層處理。位址解析和路由是3層的重要目的。網路層還可以實現擁塞控制、網際互連等功能。在這一層,資料的單位稱為資料包(packet)。網路層協議的代表包括:IP、IPX、RIP、OSPF等。 傳輸層第4層的資料單元也稱作資料包(packets)。但是,當你談論TCP等具體的協議時又有特殊的叫法,TCP的資料單元稱為段 (segments)而UDP協議的資料單元稱為“資料報(datagrams)”。這個層負責擷取全部資訊,因此,它必須跟蹤資料單元片段、亂序到達的資料包和其它在傳輸過程中可能發生的危險。第4層為上層提供端到端(終端使用者到終端使用者)的透明的、可靠的Data Transmission Service。所為透明的傳輸是指在通訊過程中 傳輸層對上層屏蔽了通訊傳輸系統的具體細節。傳輸層協議的代表包括:TCP、UDP、SPX等。  會話層會話層提供的服務可使應用建立和維持會話,並能使會話獲得同步。在會話層及以上的高層次中,資料傳送的單位不再另外命名,而是統稱為報文。會話層不參與具體的傳輸,它提供包括訪問驗證和會話管理在內的建立和維護應用之間通訊的機制。如伺服器驗證使用者登入便是由會話層完成的。會話層使用校正點可使通訊會話在通訊失效時從校正點繼續恢複通訊。這種能力對於傳送大的檔案極為重要。會話層,展示層,應用程式層構成開放系統的高3層,面對應用進程提供分布處理,對話管理,資訊表示,恢複最後的差錯等. 展示層

這一層主要解決擁護資訊的文法表示問題。它將欲交換的資料從適合於某一使用者的抽象文法,轉換為適合於OSI系統內部使用的傳送文法。即提供格式化的表示和轉換資料服務。資料的壓縮和解壓縮, 加密和解密等工作都由展示層負責。

通過前面的介紹,我們可以看出,會話層以下5層完成了端到端的資料傳送,並且是可靠,無差錯的傳送.但是資料傳送只是手段而不是目的,最終是要實現對資料的使用.由於各種系統對資料的定義並不完全相同,最易明白的例子是鍵盤,其上的某些鍵的含義在許多系統中都有差異.這自然給利用其它系統的資料造成了障礙.展示層和應用程式層就擔負了消除這種障礙的任務. 應用程式層應用程式層為作業系統或網路應用程式提供訪問網路服務的介面。應用程式層協議的代表包括:Telnet、FTP、HTTP、SNMP等。  2、TCP/UDP協議

  TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)協議屬於傳輸層協議。其中TCP提供IP環境下的資料可靠傳輸,它提供的服務包括資料流傳送、可靠性、有效流控、全雙工系統操作和多路複 用。通過連線導向、端到端和可靠的資料包發送。通俗說,它是事先為所發送的資料開闢出串連好的通道,然後再進行資料發送;而UDP則不為IP提供可靠性、流控或差錯恢複功能。一般來說,TCP對應的是可靠性要求高的應用,而UDP對應的則是可靠性要求低、傳輸經濟的應用。TCP支援的應用協議主要 有:Telnet、FTP、SMTP等;UDP支援的應用程式層協議主要有:NFS(網路檔案系統)、SNMP(簡易網路管理通訊協定)、DNS(主網域名稱稱系 統)、TFTP(通用檔案傳輸通訊協定)等.

  TCP/IP協議與低層的資料連結層和物理層無關,這也是TCP/IP的重要特點。

 

二、Socket

socket本質上就是在2台網路互連的電腦之間,架設一個通道,兩台電腦通過這個通道來實現資料的互相傳遞。 我們知道網路 通訊 都 是基於 ip+port 方能定位到目標的具體機器上的具體服務,作業系統有0-65535個連接埠,每個連接埠都可以獨立對外提供服務,如果 把一個公司比做一台電腦 ,那公司的總機號碼就相當於ip地址, 每個員工的分機號就相當於連接埠, 你想找公司某個人,必須 先打電話到總機,然後再轉分機 。 

建立一個socket必須至少有2端, 一個服務端,一個用戶端, 服務端被動等待並接收請求,用戶端主動發起請求, 串連建立之後,雙方可以互發資料。 

 

 

 socket中TCP的三向交握建立串連詳解

我們知道TCP建立串連要進行“三向交握”,即交換三個分組。大致流程如下:

  • 用戶端向伺服器發送一個SYN J
  • 伺服器向用戶端響應一個SYN K,並對SYN J進行確認ACK J+1
  • 用戶端再想伺服器發一個確認ACK K+1

只有就完了三向交握,但是這個三向交握發生在socket的那幾個函數中呢?請看:

socket中發送的TCP三向交握

可以看出,當用戶端調用connect時,觸發了串連請求,向伺服器發送了SYN J包,這時connect進入阻塞狀態;伺服器監聽到串連請求,即收到SYN J包,調用accept函數接收請求向用戶端發送SYN K ,ACK J+1,這時accept進入阻塞狀態;用戶端收到伺服器的SYN K ,ACK J+1之後,這時connect返回,並對SYN K進行確認;伺服器收到ACK K+1時,accept返回,至此三向交握完畢,串連建立。

總結:用戶端的connect在三向交握的第二個次返回,而伺服器端的accept在三向交握的第三次返回。

 

network socket is an endpoint of a connection across a computer network. Today, most communication between computers is based on the Internet Protocol; therefore most network sockets are Internet sockets. More precisely, a socket is a handle (abstract reference) that a local program can pass to the networking application programming interface (API) to use the connection, for example "send this data on this socket". Sockets are internally often simply integers, which identify which connection to use.

For example, to send "Hello, world!" via TCP to port 80 of the host with address 1.2.3.4, one might get a socket, connect it to the remote host, send the string, then close the socket:

1234 Socket socket = getSocket(type = "TCP")connect(socket, address = "1.2.3.4", port = "80")send(socket, "Hello, world!")close(socket)

socket API is an application programming interface (API), usually provided by the operating system, that allows application programs to control and use network sockets. Internet socket APIs are usually based on the Berkeley sockets standard. In the Berkeley sockets standard, sockets are a form of file descriptor (a file handle), due to the Unix philosophy that "everything is a file", and the analogies between sockets and files: you can read, write, open, and close both. In practice the differences mean the analogy is strained, and one instead use different interfaces (send and receive) on a socket. In inter-process communication, each end will generally have its own socket, but these may use different APIs: they are abstracted by the network protocol.

socket address is the combination of an IP address and a port number, much like one end of a telephone connection is the combination of a phone number and a particular extension. Sockets need not have an address (for example for only sending data), but if a program binds a socket to an address, the socket can be used to receive data sent to that address. Based on this address, internet sockets deliver incoming data packets to the appropriate application process or thread.

 

 

 

 

 

 

 

 

 

 

 

 

  

 

Python網路編程——Socket

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.