socket通信需要网线连接吗_socket网络编程基础知识篇
網絡通信是一種進程間通信(IPC,
Inter-Process
Communication),要求位于不同網絡節點不同進程的通信雙方必須遵循統一的通信協議方可實現。基于套接字(Socket)通信是應用在不同節點上的進程間通信的典型辦法。
1、基本原理
1.1、 Socket API基本概念
Socket
API是TCP/IP網絡的API,用于提供IPC通信。下面是socket
API的概念模型。?
Socket是物理網絡地址和邏輯端口號的一個集合,通過這個集合可以向另外一個位置的與它具有相同定義的Socket進行數據傳輸。由于Socket是由機器地址和端口號來識別,那么在一個特定的計算機網絡上,每一個socket都是由此方式被唯一標識的,這也使得應用程序可以被唯一定位。socket類型有兩種:一個是流式socket,提供進程之間的邏輯鏈接,并且支持可靠的數據交換;另一個則是數據包socket,無連接且不可靠。
1.2、 JAVA對網絡通信的支持
JDK提供的預定義類庫支持Java程序直接發送與接收TCP數據段或UDP數據報,并幫助程序員以更直接的方式處理建立在TCP之上的應用層協議HTTP、FTP等。JDK預定義的類均放在程序包java.net中,使用其中哪些類取決于所需要處理的通信協議。例如,基于TCP的應用程序可使用Socket,ServerSocket等類;基于HTTP和FTP等協議直接訪問URL資源的應用程序可使用URL、URLConnection等類。
1.3、TCP、UDP與端口
傳輸控制協議(TCP,
Transfer Control
Protocol)是一種面向連接的傳輸層協議,可為兩臺主機上的應用程序提供可靠的數據流連接。所謂”面向連接”意味著兩個使用TCP通信的應用程序在交換數據之前必須先建立一個TCP連接,帶通信結束后須關閉該連接。這一過程與電話通信類似。TCP執行的任務包括把應用層傳來的數據分解為合適的數據段交給網絡層,確認接收到的數據分組,設置發送最后確認分組的超時時間等,為應用層屏蔽了實現端到端可靠通信的細節。TCP可保證數據從連接的一端送到另一端時仍能保持原來發送時的次序,否則將出現一個傳輸錯誤。TCP為需要可靠通信的應用程序提供了一種點對點信道,在因特網上常見的FTP、SMTP等協議都是建立在TCP的基礎上。
用戶數據報協議(UDP, User
Datagram
Protocol)不是基于連接的,而是為應用層提供一種非常簡單、高效的傳輸服務。UDP從一個應用程序向另一個應用程序發送獨立的數據報,但并不保證這些數據報一定能到達另一方,并且這些數據報的傳輸次序無保障,后發送的數據報可能先到達目的地。使用UDP協議時,任何必需的可靠性都須由應用層自己提供。UDP適用于對通信可靠性要求低且對通信性能要求高的應用,如DNS、RIP等協議都建立在UDP的基礎上。
由于現代計算機大多運行多任務操作系統,故一臺主機上可能同時運行多個應用程序進程,并且一個進程還可能使用多個不同的連接,因而僅用主機名或IP地址無法唯一標識數據包的源或目標。端口為標識參與通信的主機、進程與連接提供了一種統一的、唯一的方法。
2、數據報socket
2.1
面向無連接數據包UDP
UDP協議使用數據報式套接字,在數據傳輸之前不需要先建立連接,UDP沒有組裝和重傳請求的功能,并不保證接收方能夠接收到該數據包,也不保證接收方所接收到的數據和發送方所發送的數據在內容和順序上是完全一致的。其主要工作是將應用程序傳輸過來的數據分塊交給網絡層,確認接收到分組信息。?
2.2
面向連接數據包UDP
一般來說,很少用數據報socket實現面向連接通信,因為此API提供的連接非常簡單,通常難以滿足應用需求。?
3、流式socket
3.1
基本編程原理
流式socket所完成的通信是一種基于連接的通信,即在通信開始之前先由通信雙方確認身份并建立一條專用的虛擬連接通道,然后它們通過這條通道傳送數據信息進行通信,當通信結束時再將原先所建立的連接拆除。在這個過程中,Server端首先在某個端口提供一個監聽Client請求的監聽服務,并處于監聽狀態,當Client端向該Server的這個端口提出服務請求時,Server端課Client端就建立了一個連接和一條傳輸數據的通道,通信結束時該通道被拆除。?
3.2
單線程服務程序與客戶程序
使用基于TCP協議的雙向通信時,網絡中的兩個應用程序之間必須首先建立一個連接,這一連接的兩個端點分別被稱為socket。由于socket被綁定到某一固定的端口號,故TCP可將數據傳輸給正確的應用程序。從應用變成的角度看,應用程序可將一個輸入流或一個輸出流綁定到某一socket,讀寫這些輸入/輸出流即可實現基于TCP的通信。
使用網絡通信的應用程序普遍采用客戶機/服務器計算模型(C/S架構),其中客戶程序作為通信的發起者,向服務器提出信息或服務請求;服務程序則負責提供這種信息或服務,服務程序經常在一個無限循環中等待客戶程序的請求并執行相應的服務。
在,申請建立一個到服務程序的連接。服務程序在收到某一客戶程序的連接請求后,并不是利用對外發布的那個端口號建立與該客戶程序的連接,而是另外分配一個新的端口號建立與客戶程序之間的連接,原端口號仍用于監聽其他客戶程序的連接請求,不會因為該端口長期處理客戶程序請求而導致其他客戶程序阻塞。?
3.3 多線程服務程序
單線程的服務端在同一時刻只能處理一個客戶連接,一旦服務程序的accept()被調用,服務程序主線程將持續執行客戶程序發來的服務請求,再無其他線程監聽服務程序對外發布的端口,導致后續的客戶連接請求失敗。一種簡單的改進途徑是當服務程序處理完一個客戶連接后再次循環執行accept()。這種改進雖然可以使服務程序在處理完一個客戶程序的所有服務請求后,還可繼續建立與下一客戶程序的連接并處理請求。但在一個客戶程序提交的服務請求需占用服務程序較長時間的情況下,其他客戶程序的連接請求將進入隊列等待,甚至可能因隊列溢出而丟失。
另外一種改進途徑是使用多線程編程方式,讓服務程序的主線程執行監聽客戶程序連接請求的任務,而處理客戶程序服務請求的任務則交由另一個新建的線程負責。
4、應用層協議開發
4.1 應用層協議理解
一般來說,網絡協議有三個要素,分別是:語法、語義與規則(時序)。語義規定了通信雙方彼此之間準備”講什么”,即確定協議元素的類型;語法規定通信雙發彼此之間”如何講”,即確定協議元素的格式;變換規則用以規定通信雙方彼此之間的”應答關系”,即確定通信過程中的狀態變化,通常可用狀態變化圖來描述。針對應用層協議,此三要素的含義是:語法是消息的語法和描寫,語義是指消息的解釋或含義,規則是進程間通信的順序。
4.2 FTP協議開發
文件傳輸協議FTP(File
Transfer
Protocol)是一個用于在兩臺裝有不同操作系統的計算機之間傳輸計算機文件的軟件標準,工作于應用層。FTP服務一般運行在20和21兩個端口。端口20用于在客戶端和服務器之間傳輸數據流,而端口21用于傳輸控制流。當數據通過數據流傳輸時,控制流處于空閑狀態。?
FTP協議有兩種工作方式:PORT方式和PASV方式,即主動模式和被動模式。主動模式要求客戶端和服務器同時打開并且監聽一個端口以建立連接,主動模式的連接過程是:客戶端向服務器的FTP端口(默認是21)發送連接請求,服務器接受連接,建立一條命令鏈路。當需要傳送數據時,服務器從20端口向客戶端的空閑端口發送連接請求,建立一條數據鏈路來傳送數據。
在主動模式下,客戶端可以由于安裝了防火墻會產生一些問題,所以創立了被動模式。被動模式只要求服務器端產生一個監聽相應端口的過程,這樣就可以繞過客戶端安裝了防火墻的問題。被動模式的連接過程是:客戶端向服務器的FTP端口發送請求,服務器接受連接,建立一條命令鏈路。當需要傳送數據時,客戶端向服務器空閑端口發送連接請求,建立一條數據鏈路來傳送數據。
4.3 HTTP協議開發
超文本傳輸協議HTTP采用典型的”請求-答復”通信模型:客戶程序建立與服務器程序的連接后,向服務程序發送一個服務請求;服務程序根據請求獲取相應的文檔作為答復送回客戶程序,最后關閉連接。?
由于在客戶程序和服務程序的整個會話過程中可能需要建立多個連接(例如,為獲取兩個不同URL指定的資源而分別建立兩個TCP連接),而不是持久地使用同一TCP連接,故HTTP是一種無狀態協議。在HTTP協議的實現中可通過減少TCP連接的建立與次數以提高通信效率,HTTP/1.1的持久連接機制甚至還保證了客戶程序與服務程序之間同一類型元素持久地使用同一連接,但HTTP仍不能被視為一種可保持會話狀態的協議。
總結
以上是生活随笔為你收集整理的socket通信需要网线连接吗_socket网络编程基础知识篇的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: vue-resource如何设置同步异步
- 下一篇: h5 一镜到底_这些一镜到底的H5还能怎