TCP/IP 簡單介紹
- 應用層 (Application):應用層是個很廣泛的概念,有一些基本相同的系統級 TCP/IP 應用以及應用協議,也有許多的企業商業應用和互聯網應用。
- 傳輸層 (Transport):傳輸層包括 UDP 和 TCP,UDP 幾乎不對報文進行檢查,而 TCP 提供傳輸保證。
- 網絡層 (Network):網絡層協議由一系列協議組成,包括 ICMP、IGMP、RIP、OSPF、IP(v4,v6) 等。
- 鏈路層 (Link):又稱為物理數據網絡接口層,負責報文傳輸。
Socket相關概念
- socket的英文原義是“孔”或“插座”。作為進程通信機制,取后一種意思。通常也稱作“套接字”,用於描述IP地址和端口,是一個通信鏈的句柄。(其實就是兩個程序通信用的。)
- socket非常類似於電話插座。以一個電話網為例。電話的通話雙方相當於相互通信的2個程序,電話號碼就是IP地址。任何用戶在通話之前,首先要占有一部電話機,相當於申請一個socket;同時要知道對方的號碼,相當於對方有一個固定的socket。然后向對方撥號呼叫,相當於發出連接請求。對方假如在場並空閑,拿起電話話筒,雙方就可以正式通話,相當於連接成功。雙方通話的過程,是一方向電話機發出信號和對方從電話機接收信號的過程,相當於向socket發送數據和從socket接收數據。通話結束后,一方掛起電話機相當於關閉socket,撤消連接。
-
在Internet上有很多這樣的主機,這些主機一般運行了多個服務軟件,同時提供幾種服務。每種服務都打開一個Socket,並綁定到一個端口上,不同的端口對應於不同的服務(應用程序)。例如:http 使用80端口 ftp使用21端口 smtp 25端口
按端口號可分為3大類
(1)公認端口(WellKnownPorts):從0到1023,它們緊密綁定(binding)於一些服務。通常這些端口的通訊明確表明了某種服務的協議。例如:80端口實際上總是HTTP通訊。
(2)注冊端口(RegisteredPorts):從1024到49151。它們松散地綁定於一些服務。也就是說有許多服務綁定於這些端口,這些端口同樣用於許多其它目的。例如:許多系統處理動態端口從1024左右開始。
(3)動態和/或私有端口(Dynamicand/orPrivatePorts):從49152到65535。理論上,不應為服務分配這些端口。實際上,機器通常從1024起分配動態端口。
- 有兩種類型:
是一種面向連接的Socket,針對於面向連接的TCP服務應用,安全,但是效率低;
是一種無連接的Socket,對應於無連接的UDP服務應用.不安全(丟失,順序混亂,在接收端要分析重排及要求重發),但效率高.
Socket的一般應用模式(服務器端和客戶端)

1.服務端welcoming socket 開始監聽端口(負責監聽客戶端連接信息)
2.客戶端client socket連接服務端指定端口(負責接收和發送服務端消息)
3.服務端welcoming socket 監聽到客戶端連接,創建connection socket。(負責和客戶端通信)
Socket的通訊過程
AddressFamily.InterNetWork:使用 IP4地址
SocketType.Stream:支持可靠、雙向、基於連接的字節流,而不重復數據。此類型的 Socket 與單個對方主機進行通信,並且在通信開始之前需要遠程主機連接。Stream 使用傳輸控制協議 (Tcp) ProtocolType 和 InterNetworkAddressFamily。
ProtocolType.Tcp:使用傳輸控制協議。
注意:
- 至少要定義一個要連接的遠程主機的IP和端口號。
- 端口號必須在 1 和 65535之間,最好在1024以后。
- 要連接的遠程主機必須正在監聽指定端口,也就是說你無法隨意連接遠程主機。
- 如:
IPAddress addr = IPAddress.Parse("127.0.0.1");
IPEndPoint endp = new IPEndPoint(addr, 10001);
服務端先綁定:serverWelcomeSocket.Bind(endp)
客戶端再連接:clientSocket.Connect(endp)
5.一個Socket一次只能連接一台主機。
Socket的方法
- ------------------相關類--------------------------
- IPAddress類:包含了一個IP地址
- IPEndPoint類:包含了一對IP地址和端口號
- --------------------方法們------------------------------
- Socket (): 創建一個Socket
- Bind(): 綁定一個本地的IP和端口號(IPEndPoint)
- Listen(): 讓Socket偵聽傳入的連接嘗試,並指定偵聽隊列容量
- Connect(): 初始化與另一個Socket的連接
- Accept(): 接收連接並返回一個新的socket
- Send(): 輸出數據到Socket
- Receive(): 從Socket中讀取數據
- Close(): 關閉Socket (銷毀連接)
Socket通信基本流程圖
基於TCP的Socket編程(TCP service:可靠的字節流傳輸)
結語
根據之前的學習筆記,關於Socket的基礎知識就介紹到這里,之后會做一個小案例,可以更好的對socket的理解。主要是項目中需要用到網絡編程方面的東西,周末沒事干,就將之前socket的方面的知識點復習了一下,也為了更好更快的投入工作中.....