套接字網絡編程基礎(一)

網絡編程相關基本概念

進程與線程###

進程(Process)是計算機中的程序關於某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎。它可以申請和擁有系統資源,是一個動態的概念,是一個活動的實體

進程的概念主要有兩點:第一,進程是一個實體。每一個進程都有它自己的地址空間,一般情況下,包括文本區域(text region)、數據區域(data region)和堆棧(stack region)。文本區域存儲處理器執行的代碼;數據區域存儲變量和進程執行期間使用的動態分配的內存;堆棧區域存儲着活動過程調用的指令和本地變量。第二,進程是一個“執行中的程序”。程序是一個沒有生命的實體,只有處理器賦予程序生命時(操作系統執行之),它才能成爲一個活動的實體,稱其爲進程。進程是有一定生命期的

進程和線程關係:
通常在一個進程中可以包含若干個線程,它們可以利用進程所擁有的資源,在引入線程的操作系統中,通常都是把進程作爲分配資源的基本單位,而把線程作爲獨立運行和獨立調度的基本單位,由於線程比進程更小,基本上不擁有系統資源,故對它的調度所付出的開銷就會小得多,能更高效的提高系統內多個程序間併發執行的程度

當創建一個進程時,系統會自動創建它的第一個線程,稱爲主線程。然後,該線程可以創建其他的線程,而這些線程又能創建更多的線程

這裏寫圖片描述

###網絡應用程序###

這裏寫圖片描述

從計算機網絡體系結構的角度來看,網絡應用處於網絡層次的最上層。

從功能上可以將網絡應用程序分爲兩部分。一部分是專門負責網絡通信的模塊,它們與網絡協議棧相連接,藉助網絡協議棧提供的服務完成網絡上數據信息的交換;另一部分是面向用戶或者進行其他處理的模塊,它們接收用戶的命令,或者藉助網絡傳輸過來的數據進行加工。這兩部分模塊相互配合,來實現網絡程序的功能。

網絡編程首先要解決網間進程通信的問題,然後才能在通信的基礎上開發應用功能。

###實現網間進程通信必須解決的問題###

  • 網間進程的標識問題
  • 與網絡協議棧連接問題
  • 多重協議的識別問題
  • 不同通信服務的問題

###Internet中網間進程通信###

這裏寫圖片描述

網間進程通信是指網絡中不同主機中的應用進程之間的相互通信。

對於Internet中網間進程通信主要是對TCP/IP協議棧的應用,因爲Internet是基於TCP/IP協議棧的。實現網絡中應用進程之間的通信對於網絡協議棧來說,是在發送端自上而下地複用,在接收端自下而上的分用

其中,傳輸層在網絡通信中佔據重要地位。傳輸層是對計算機網絡中通信主機內部進行獨立操作的第一層,是支持端到端的進程通信的關鍵一層。TCP/IP提出了傳輸層協議端口(Protocol Port,端口)的概念,解決了通信進程的標識問題

網絡層的IP在Internet中也起着重要作用,使用IP地址統一了Internet中的各種主機的物理地址,用IP數據報統一了各種物理網的幀,實現了異構網的互連

###端口###

端口是TCP/IP協議簇中,應用層進程與傳輸層協議實體間的通信接口。應用層進程通過系統調用與某個端口進行綁定,之後通過這個端口與其它網絡進程進行數據交換

類似於文件描述符,每個端口都擁有一個叫作端口號(Port Number)的整數型標識符,用於區別不同的端口

端口是操作系統可分配的一種資源;從實現角度來看,端口是一種抽象的軟件機制,包括一些數據結構和I/O緩衝區

###進程的標識###

在Internet中,用一個三元組可以在全局中唯一地標識一個應用層進程:
應用層程序 = (傳輸層協議、主機IP地址、傳輸層的端口號)
這樣一個三元組,叫做一個半相關,它標識了Internet中進程間通信的一個端點

###網間進程通信的標識###

一個完整的網間通信需要一個無援助在全局中唯一地標識:
(傳輸層協議、本地機IP地址、本地機傳輸層端口端口、遠地機IP地址、遠地機傳輸層端口)

這個五元組稱爲一個全相關,即兩個協議相同的半相關才能組合成一個合適的全相關,或完全指定一對網間通信的進程

###網絡協議的特徵###

####面向消息的協議與基於流的協議####

**面向消息的協議:**面向消息的協議以消息爲單位在網上傳送數據,消息在發送端一條一條地發送,在接收端也只能一條一條地接收,每條消息是獨立的,消息之間存在邊界

**基於流的協議:**基於流的協議不保護消息邊界,將數據當作字節流連續地傳輸,不管實際邊界是否存在。如果發送端連續發送數據,接收端有可能在一次接收動作中接收兩個或者更多的數據包。在發送端,允許系統將原始消息分解成幾條小消息分別發送,或者把幾條消息積累在一起,形成一個較大的數據包,一次送出。多次發送的數據統一編號,從而把它們聯繫在一起。接收端會盡量地讀取有效數據。只要數據一到達,網絡堆棧就開始讀取它,並將它緩存下來等待進程處理。在進程讀取數據時,系統儘量返回更多的數據

**保護消息邊界:**傳輸協議把數據當作一條獨立的消息在網絡上傳輸,接收端只能接收獨立的消息。存在保護消息邊界,接收端一次只能接收發送端發出的一個數據包

####面向連接的服務和無連接的服務####

面向連接的服務是電話系統服務模式的抽象,即每一次完整的數據傳輸都要經過建立連接、使用連接和終止連接的過程。在數據傳輸的過程中,各數據分組不攜帶目的地址,而使用連接號(Connect ID)。本質上,連接是一個管道,收發數據不但順序一致,而且內容相同

無連接服務是郵政系統服務的抽象,每個分組都攜帶完整的目的地址,各分組在系統中獨立傳送。無連接服務不能保證分組到達的先後順序,不進行分組出錯的恢復與重傳,不保證傳輸的可靠性。無連接協議在通信前,不需要建立連接,也不管接收端是否正在準備接收。

####可靠性和次序性####

可靠性保證保證了發送端發出的每個字節都能到達既定的接收端,不出錯,保證數據的完整性,稱爲保證投遞。

次序性是指對數據到達接收端的順序進行處理。保護次序性的協議保證接收端收到數據的順序就是數據的發送順序,稱爲按序遞交。

可靠性和次序性與協議是否是面向連接密切聯繫,多數情況下,面向連接的協議做了許多工作能確保數據的可靠性和次序性。而無連接的協議不必去驗證數據的完整性,不必確認收到的數據,不必考慮數據的次序,因而簡單快速的多。

//以上內容大部分摘自《網絡編程實用教程(第三版)》 編者 段利國 劉金江 倪天偉 葉樹華
//侵權必刪
//僅供參考
//windows網絡編程

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章