【tomcat】02 Web服務器機制 之 套接字通信

一、介紹

1套接字通信是應用層與TCP/IP協議族通信的中間抽象層,它是一組接口。應用層通過調用這些接口發送和接收數據。一般這種抽象層由操作系統提供或者由JVM自己實現。

套接字抽象層位於傳輸層與應用層之間。類似於設計模式中的門面模式,它把這些複雜的處理過程都隱藏在套接字接口下面,幫助用戶解析組織TCP/IP協議族報文數據,以符合TCP/IP協議族,這樣用戶只要簡單調用接口即可實現數據的通信操作(用戶沒必要知道和處理複雜的TCP/IP協議族業務邏輯的細節)。

2、使用套接字通信可以簡單地實現應用程序在網絡上的通信。一臺機器上的應用向套接字中寫入信息,另外一臺相連的機器能讀取到。

3、TCP/IP協議族中有兩種套接字類型,分別是流套接字和數據報套接字,分別對應TCP協議和UDP協議。

4、一個TCP/IP套接字由一個互聯網地址、一個協議及一個端口號唯一確定。

二、通信原理

1、單播通信:網絡節點之間通信方式的一種。單個網絡節點單個網絡節點之間的通信就稱爲單播通信。它是一種一對一的模式,發送、接收信息只在兩者之間進行,同時它也是最常見的一種通信。

a: 你瀏覽網頁訪問服務器時發生的通信屬於單播通信,報文的發送與接收發生在你的電腦與網站的服務器之間

b:單播通信的一個特點就是有多少臺主機就要發送多少次,當主機的數量越來越大時可能會導致網絡阻塞。

第一次
第二次
第三次
第一次
第二次
第三次
C1
router1
router2
C2
C3
C4

2、 組播通信:爲了彌補單播通信在某些使用場景的侷限性,它是一種一對多的傳播方式。假如某個主機結點想接收相關的信息,它只需要向路由器或交換機申請加入某組即可,路由器或交換機在接收到相關信息後就會負責向組內所有成員發送信息。

  1. 特點

節省網絡資源

有針對性地向組內成員傳播

可以在互聯網上進行傳播

沒有可靠傳輸協議、會導致數據不可靠

  1. 組播通信中最重要的內容是如何維護路由器與主機之間的關係,其主要通過IGMP協議進行維護。

a: 它主要維護不同路由器與不同主機之間的成員關係,具體的維護方式比較複雜,因爲涉及多個路由器且路由之間互相連接組成一個樹狀網絡,而組內成員可能處於任何一個路由中,即樹的任何葉結點,所以需要複雜的算法去維護這些關係才知道信息要往哪裏發送。

b:IGMP協議主要負責組成員的加入和退出、組內成員查詢等功能,使用組播通信需要通過IGMP協議申請加入組成員才能接收組播的消息,而退出組後將無法接收消息。

c: 在IP層面需要一個組播地址以指定組播,它稱爲D類地址,範圍是224.0.0.0~239.255.255.255。這些地址根據範圍大致分爲局域網地址和因特網地址,224.0.0.0~244.0.0.255用於局域網,224.0.1.0~238.255.255.255用於因特網。

Tomcat默認的組播地址爲228.0.0.4

  1. 組播通信相當於把主機與主機之間的通信壓力轉嫁到了路由器上面,所以要得到路由及網絡的支持才能進行組播通信,整個傳輸過程中涉及的路由器或交換機都要支持組播通信,否則將無法使用組播通信。主機必須支持組播通信,在TCP/IP層面支持組播發送與接收。

3、廣播通信:一種一對多的傳播方式,多的機器需要預先啓動監聽端口

A1
router
A2
A3
A4
A5
A6

4、單播、多播、廣播比較

  1. 單播通信模式中有服務器端和客戶端之分,而組播通信模式與單播通信模式不同,每個端都是以路由器或交換機作爲中轉廣播站,任意一端向路由器或交換機發送消息,路由器或交換機負責發送給其他節點,每個節點都是等同的。
  1. 廣播通信的重點在於廣,它向路由器連接的所有主機都發送消息而不管主機想不想要,雖然浪費了網絡資源,但它可以不用維護路由器與主機之間的成員關係。組播通信的重點在於組,它只會向加入了組的所有成員發送消息,具有針對性強、不浪費網絡資源的特點。
  1. 廣播通信只能在局域網內傳播,組播通信能在公網內傳播。

三、代碼實現

1、單播通信

  1. 綁定本地8888端口,然後調用accept()方法進行阻塞,等待客戶端的連接,一旦有連接到來就創建一個套接字並返回。獲取輸入/輸出流,輸入流用於獲取客戶端傳輸的數據,而輸出流則用來向客戶端響應發送數據,處理完後關閉套接字。
  1. 服務器端的8888端口已經處於監聽狀態,客戶端如果要與之通信,只須簡單地先指定服務器端IP與端口號以實例化一個套接字,然後獲取套接字的輸出流與輸入流。輸出流用於向服務器發送數據,輸入流用於讀取服務器發送過來的數據。交互處理完後關閉套接字。

2、組播通信

  1. 節點1,指定組播地址爲228.0.0.4,端口號爲8000。節點1通過調用MulticastSocket的JoinGroup 方法申請將節點1加入到組播隊伍中,接着使用一個無限循環往組裏發消息,這是爲了方便節點2加入後接收節點1的消息。組播通信是通過DatagramPacket對象發送消息的,調用MulticastSocket的Send方法即可把消息發送出去。
  1. 節點2,指定同樣的組播地址與端口,以申請加入與節點1相同的組播組。接着通過循環不斷接收從其他節點發送的消息,通過MulticastSocket的Receive方法可讀取消息,將不斷接收到從節點1發送的消息。節點2也可以向組播組發送消息,因爲每個節點都是等同的,只要其他節點對組播消息進行接收。

3、廣播通信

  1. 接收端,監聽8888端口,一旦接收到廣播消息則輸出消息
  1. 發送端,所屬的網段爲192.168.0,子網掩碼爲255.255.255.0,所以廣播地址爲192.168.0.255,然後往該網絡中所有機器的8888端口發送“hello”消息,接收端將接收到此消息。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章