Java网络编程 01网络概念

网络

网络定义:

1:几乎可以实时发送和接收数据的计算机和其它设备以及物理传输介质的集合。

2:网络可以大致分为

  • 有线网络:网络通常用线缆连接,数据位转换为电磁波,通过线缆移动;
  • 无线网络:无线电波传输数据,许多长距离的传输现在会用通过玻璃纤维发送可见光的光纤电缆来完成,我们常说的wifi就是指的无线网络。

3:网络中的每个设备都称之为一个节点,比如:接入网络的计算机,打印机,路由器,网关,可口可乐机,电视机,电冰箱等都可称之为该网络中的一个节点。每个节点都有IP地址,这个地址用来识别网络中的唯一设备,有点类似全球地球村中的每人独有的身份证号。

4:网络间的信息数据传输是靠数据包(分组交换)来交换的,每个数据包中包含的信息都必有该包是哪个设备(源头)发出的,发往哪个设备(目的)来接收。将很大的信息量分割成一个个的小的数据包的好处是:公用一条线缆,可以达到多个设备之间同时互不干扰的共享该线缆,这相对于传统的电话线缆独占技术(一方打电话时,哪怕你沉默思考没有说话,此时该电话线也是被你独占的,别人此时在着急打这个电话,也是被告知占线中)前进了一大步,使得多台设备同时上网可行。


 

TCP/IP网络分层模型

网络间的设备交换信息都是靠数据包来交换的,那么如果多台设备同时需要相互交换数据,怎么保障【设备A】<->【设备B】互访,【设备C】<->【设备D】互访的诉求,不会发生【设备A】<->【设备C】访错,【设备B】<->【设备D】访错的现象呢?答:这要靠网络协议制定好的规则来保证的。

网络协议:定义网络通信的规则,包括地址格式,数据如何分包,每个数据包中的数据的组织形式,源头发送者怎么发出数据包,目的接收者怎么接收数据包等等。

下图是一般的网络分层模型,该分层模型实现了应用协议与网络硬件物理特性以及网络连接拓扑结构的解耦合。比如:网络的顶层应用协议HTTP协议并不关心底层的TCP协议,更不关心数据包是如何通过底层的有线线缆(/或者无线电波)物理介质传输的;反之亦然,底层协议只关心传输的交换数据包,也不关心高层的协议是干嘛用的。

Java网络编程 01网络概念_第1张图片

上图是一般性的偏向于大而全的网络分层模型,针对Java网络编程开发来说,有更加简易版本的网络分层模型,如下图所示:

上面的简易网络分层模型,比如:我们经常开发的web应用程序用到的HTTP协议,开发基于SOAP协议的soap程序都规整到应用层。

我们开发的java网络编程的程序,简单的理解了上图中的逻辑路径即可,可认为是水平方向上的客户端的应用层和服务器的应用层的通讯。

举例:以HTTP协议来讲解下客户端设备请求一次web服务器设备的全过程:

发送请求:

客户端本地计算机中的web浏览器中输入http://www.baidu.com请求访问百度网站设备

A:浏览器实际只与本地的传输层TCP对话,将请求http://www.baidu.com数据传递给本地传输层

B:本地传输层将请求地址信息分解为若干个TCP数据片,将TCP数据片传递给本地网际层

C:本地网际层将TCP数据片分割成IP报文,将IP报文传递给主机网络层以便通过物理路径传输

D:主机网络层中一般都有路由器,路由器收到IP报文,根据路由算法,将IP报文发给目标设备

百度网站设备收到发送过来的请求

1:百度网站目标设备收到IP请求报文,将IP报文交由服务器网际层解析

2:服务器网际层检查IP报文是否有分割,如有分片将重组数据形成TCP片传递给服务器传输层

3:服务器传输层将收到足够多的TCP片之后,组织成请求信息传递给服务器应用层

4:服务器应用层解析请求http://www.baidu.com内容,应用处理,响应内容进行回传

以上是一个完整的HTTP请求的网络处理过程。

响应请求:

响应请求刚好是发送请求的一个逆反过程。

一次完整的HTTP网络访问:至少包含A客户端对B服务器的请求以及B服务器对A客户端的应答。


 

协议:TCP

 传输层协议:TCP协议,负责确保各个数据包以发送的顺序接收下来,并保证没有数据丢失和破坏,如果发生丢包或破坏,则尝试要求发送方重传数据包。TCP协议代价高,所以又称为可靠的协议。

协议:UDP

 传输层协议:UDP协议,负责确保各个数据包的接收下来但不保证接收的有序性和完整性,并保证没有数据丢失和破坏,如果发生丢包或破坏,则尝试要求发送方重传数据包。UDP协议代价小,又称为不可靠的协议。一般主要用在数据广播和视频网站上(视频网站具备这样的功能,哪怕少传了几帧视频静态画面,浏览器照样感觉不到,感官上可以看到整个视频貌似是连贯的)

协议:IP

网际层协议:IP协议,定义了IP报文的格式,如何组织为更大的传输层的数据包,寻址机制(不同的网络设备如何寻找到彼此)。它是Java唯一理解的网络层协议。

IP报文

 以上是IP数据包的内容格式,我们主要关心的是:源地址,代表请求发出设备;目的地址,代表请求接收设备;数据,代表请求的数据内容。

由于IPv4地址的稀缺,现在大多数的网络都使用了网络地址转换(Network Address Translation NAT)。例如,宿舍内大约有10来个计算机,都想上网,它们都共用一个外部可见的IP地址,假如A计算机的私有IP为192.168.1.15,B计算机的私有IP为192.168.1.188,两台计算机都可以共用Internet的IP地址216.254.85.72(这个IP地址是宿舍办理宽带上网时ISP服务商电信/移动/联通给分配的)来上网。怎么能做到上网时,A,B两台计算机互不影响呢?这是靠宿舍内的路由器的监管功能达到的。

路由器会监管出站和入站连接,调整IP包中的地址。对于出站的包,它将源地址192.168.1.15改为路由器的外部地址216.254.85.72,并记录该请求是哪个计算机发出的;对于入站的包,它将目的地址216.254.85.72改为本地地址192.168.1.15,这样A计算机就完成了一次完整的请求/应答的网络连接。


 

防火墙

位于Internet和本地网络之间的一些硬件和软件会检查所有进出的数据,以保证其合法性,这就称之为防火墙。防火墙有一套过滤规则,过滤一般都是基于网络地址和端口的。

防火墙一般工作于TCP传输层和IP网际层。

代理服务器

代理服务器与防火墙有关。如果说防火墙会阻止一个网络上的主机与外界直接建立连接,那么代理服务器就起到了中间人的作用。本地主机和代理服务器打交道,外界也是和这个中间人打交道,这样通过中间人的代理,即可达到本地主机访问外界的诉求。

代理服务器一般工作于应用层,例如HTTP代理。

万维网Internet

 不同的网络会以不同的方式分配地址,万维网IP地址是分配IP的组织来分配的,可以动态分配IP,也可以静态分配IP。

Internet是世界上最大的基于IP的网络。

以太网Ethernet

不同的网络会以不同的方式分配地址,以太网地址与物理以太网卡硬件关联。每个以太网卡设备的mac物理地址必须是不同的,这一点由生产以太网卡的硬件提供商来保证。

局域网LAN

10.、192.168.、172.16.、172.31.、这些网段的IPv4地址,都是预留给局域网使用的,也就说,这些不可路由的IP地址对于万维网Internet上看不到的专用网特别有用。

127.0.0.1指的是localhost,永远代表本机的IP地址。

0.0.0.0指的是起使主机,只能用做源地址,而不能作为目标地址。

255.255.255.255指的是广播地址,发送到这个地址的包将由本地网络的所有的节点接收,但不能超越这个本地网络。广播地址的一个用处体现为,例如一个临时使用的计算机想动态的获取动态IP地址时,这个计算机在启动时,就往广播地址发送请求信息,本地网络中的所有节点都能收到这个请求,但是只有本地网络中的DHCP服务器处理这个请求信息后,为该计算机动态分配一个动态IP地址。


 

客户端/服务器模型(图示举例Http请求)

你可能感兴趣的:(Java,网络编程,Java网络编程)