【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”消息,接收端将接收到此消息。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章