網絡基礎
說到網絡,我們不得不說一下OSI七層模型,OSI是Open System Interconnection的簡稱,中譯爲開放式系統互連參考模型。他將網絡協議從邏輯上劃分成7層,從上到下分別爲:應用層,表示層,會話層,傳輸層,網絡層,數據鏈路層,物理層。網絡上傳輸數據流程如下圖所示。
上圖表示的是主機1向主機2發送數據"ABC'的過程,主機從應用層逐層往下,直到物理層,沒到一層都會將數據進行一次封裝,這個過程稱爲加包。然後通過物理層發送到主機2的物理層中,主機2逐層解包提前數據,最後應用層能夠獲得主機1發送的數據“ABC”。
TCP/IP層級結構簡化了OSI的七層結構,TCP/IP分爲4層結構,分別爲 應用層,傳輸層,網際層,網絡接口層。
端口和IP
在本地,我們向本地指定文件寫入數據,我們需要指定文件的路徑去確定該文件。網絡中我們進行通信,也需要確定通信目標,網絡中通過IP和端口號來確定通信目標。IP位目標的主機號,端口號爲一個邏輯號碼,該號碼可以區分主機的不同應用,一般我們不使用0~1024端口,因爲這些是預留給系統的,如果我們使用的話很有可能會造成不可預知的衝突。
java中將ip與端口號一起分裝成了一個類InetAddress,該類提供了很多操作端口號,ip的方法,詳情參考JAVA Api。
UDP
網絡通信中,傳輸層協議可分爲TCP 和UDP兩種,此處我們講解一下UDP協議。
UDP是一種無連接的傳輸協議,他只負責將數據打包後發送,不會去理會對稱是否成功,正確接收到數據,網絡視頻直播用的就是UDP協議,他適用於對速度要求高,但對數據準確度一般的場合。
UPD特點:
1.速度快
2.不可靠
3.不需要建立連接
4.數據大小限制在64k內UDP協議是以數據包的形式發送數據的,java中將UDP協議封裝到了DatagramSocket中,將數據包封裝到了DatagramPacket中,我們可以通過這兩個類實現UDP。
UDP實現步驟:
發送端:1.創建DatagramSocket類對象,指定端口號。
2.創建DatagramPacket類對象,將要發送的數據封裝到這個對象中,並制定目標IP與端口號。
3.調用DatagramSocket類對象的send方法發送數據。
接收端:1.創建DatagramSocket類對象,指定端口號。
2.創建DatagramPacket類對象,用於接收數據。
3.調用DatagramSocket的recieve方法接收數據,存儲到DatagramPacket類對象中。
TCP
TCP是一種基於鏈接的,可靠的網絡通信協議。他需要經過三次握手信號,來確保收發端都能夠準確的收到數據。基於TCP的網絡通信需要一個服務端,一個客戶端。服務器端可以同時與多個客戶端連接。java中將TCP服務器封裝成了ServerSocket類,將客戶端封裝成了Socket。當客戶端請求連接服務端時,服務端會獲得該客戶端的Socket屬性,根據這些屬性在服務器端創建一個Socket對象。Socket類內部封裝了InputStream和OutputStream用於數據的通信,大致示意圖如下:
TCP實現:
客戶端:1.創建套接字Socket對象,參數傳入服務器IP,以及使用的端口號。
2.獲取套接字的輸出流,向輸出流寫入數據。
3.獲取套接字的輸入流,監聽獲取服務器端的反饋。
4.關閉套接字。服務端:1.創建服務器套接字ServerSocket,指定監聽的端口號。
2.創建創建Socket對象,調用accept方法獲取與服務器連接的套接字對象。
3.獲取Socket的輸入流,獲取客戶端發送過來的數據。
4.獲取Sokcet的輸出流,向客戶端發出反饋。
5.關閉套接字Socket,關閉服務端套接字ServerSocket。