是直接或间接地通过网络协议与其他计算机进行通信
。在Java中包含网络编程地各种API,通过创建这些类的对象,就可以进行网络应用程序的编写。调用相应的方法
两台或更多的计算机组成的网络
,由于同一个网络
中并遵循同一种网络协议
,所以任意两台
计算机都可以直接通信
。连接网络的网络(internet)
,即把很多计算机网络连接起来,形成一个全球统一的互联网。为了把计算机网络接入互联网,就必须使用网络通信协议,如果计算机网络各自的通讯协议不统一,就没法把不同的网络连接起来形成互联网。
。
通过计算机网络
可以使多台计算机实现连接
,位于同一个网络
中的计算机在进行连接和通信时需要遵守一定的规则
,这就好比在道路中行驶的汽车一定要遵守交通规则一样。在计算机网络中,这些连接和通信的规则被称为网络通信协议
,它对数据的传输格式、传输速率、传输步骤
等做了统一规定,通信双方必须同时遵守才能完成数据交换。
通信设备线路
连接起来,在网络连接
的支持下,实现彼此之间资源共享和数据通信
的整个系统。按照规模主要将网络分为局域网
、城域网
、广域网
和因特网
。
网络分类 | 描述 |
---|---|
局域网 | (LocalArea Network) 简称 LAN ,是一种在小范围内实现的计算机网络,一般在一个建筑物内或者一个工厂、一个事业单位内部独有,范围较小。=>局域网可以实现文件管理、应用软件共享、打印机共享、扫描仪共享、工作组内的日程安排、电子邮件和传真通信服务等功能。局域网是封闭型的 ,可以由办公室内的两台计算机组成,也可以由一个公司内的上千台计算机组成。 |
城域网 | (Metropolitan Area Network)简称为MAN ,一般是一个城市内部 组建的计算机信息网络,提供全市的信息服务。 |
广域网 | (Wide Area Network)简称为 WAN,它的范围很广,可以分布在市,省、一个国家或者几个国家。广域网包括大大小小不同的子网,子网可以是局域网,也可以是小型的广域网。 |
因特网 | (Internet)则是由无数的LAN(局域网) 和 WAN(广域网) 组成的。 |
按照使用的传输介质可分为有线网
和无线网
网络传输介质是网络中发送方
与接收方
之间的物理通路
,它对网络的数据通信具有一定的影响
。常用的传输介质分为有线传输介质
和无线传输介质
两大类,不同的传输介质,其特性也各不相同。
网络分类 | 描述 |
---|---|
有线传输介质 | 指在两个通信设备之间实现的物理连接部分,它能将信号从一方传输到另一方,有线传输介质主要有双绞线 、同轴电缆 和光纤 。双绞线和同轴电缆传输电信号,光纤传输光信号。 |
无线传输介质 | 1.指利用无线电波 在自由空间的传播可以实现多种无线通信。2.根据电磁波频谱可将其分为 无线电波、微波、红外线、激光 等,信息被加载在电磁波上进行传输。 3.无线传输的介质有:无线电波、红外线、微波、卫星和激光。 4.在 局域网 中,通常只使用无线电波 和红外线 作为传输介质。5.无线传输介质通常用于广域互联网的广域链路的连接。 6.无线传输的优点在于安装、移动以及变更都较容易,不会受到环境的限制。但信号在传输过程中容易受到干扰和被窃取,且初期的安装费用较高。 |
按照使用的拓扑结构可分为星形网络
,总线网络
,环状网络
总线型
在网络通信中主要有两种模式的通信方式:一种是客户机/服务器(Client/Server)模式
,简称C/S模式;另一种是浏览器/服务器(Browser/Server)模式
,简称B/S模式
C/S结构
:全称为Client/Server结构,是指客户端和服务器结构。常见程序有QQ、迅雷等软件。
使用 C/S 模式的程序,在开发时需要分别针对客户端和服务器端进行专门开发。这种开发模式的优势在于由于客户端是专门开发的,表现力会更强。缺点就是通用性差,也就是说一种程序的客户端只能和对应的服务器端进行通信,不能和其他的服务器端进行通信,在实际维护中,也需要维护专门的客户端和服务器端,维护的压力较大。
B/S结构
:全称为Browser/Server结构,是指浏览器和服务器结构。常见浏览器有谷歌、火狐等。
对于很多程序,运行时不需要专门的客户端,而是使用通用的客户端,例如使用浏览器。用户使用浏览器作为客户端的这种模式叫作浏览器/服务器模式。使用这种模式开发程序时只需开发服务器端即可,开发的压力较小,不需要维护客户端。但是对浏览器的限制比较大,表现力不强。
两种架构各有优势,但是无论哪种架构,都离不开网络的支持。网络编程就是在一定的协议下,实现两台计算机的通信的程序。
IP地址
指互联网协议地址(Internet Protocol Address)
,俗称IP。用来给一个网络中的计算机设备(通常是网卡)
做唯一的编号。假如我们把“个人电脑”比作“一台电话”的话,那么“IP地址”就相当于“电话号码”。计算机设备可以是计算机,路由器等。(注意:一台联入互联网的计算机肯定有一个IP地址,但也可能有多个IP地址)
IP地址分类
IPv4
32位的二进制数
,通常被分为4个字节
,表示成a.b.c.d
的形式,例如101.202.99.12。其中a、b、c、d都是0~255之间的十进制整数
,那么最多可以表示 $232^2$个(大约42亿)
。IPv4的地址目前已耗尽IPv4地址实际上是一个32位整数。例如:
106717964 = 0x65ca630c
= 65 ca 63 0c
= 101.202.99.12
IPV6
128位地址长度
,每16个字节一组,分成8组十六进制数
,数之间用冒号(:)分开,表示成ABCD:EF01:2345:6789:ABCD:EF01:2345:6789
,号称可以为全世界的每一粒沙子编上一个网址,这样就解决了网络地址资源数量不够的问题。特殊的IP地址
127.0.0.1、localhost
公网地址.内网地址
公网IP地址
和内网IP地址
。公网IP地址可以直接被访问,内网IP地址只能在内网访问。内网IP地址类似于:192.168.0.0——192.168.255.255
属于内网地址,属于非注册地址,专门为组织机构内部使用。使用端口来区分这些应用程序
。通过端口可以在一个主机上运行多个网络应用 程序。
IP地址可以唯一标识网络中的设备
,那么端口号就可以唯一标识设备中的进程(应用程序)
了。加粗样式端口分类
端口类型 | 描述 |
---|---|
公认端口 | 0—1023 比如80端口分配给WWW,21端口分配给FTP ,用于一些知名的网络服务和应用 |
注册端口 | 1024—49151 分配给用户进程或应用程序 |
动态/私有端口 | 49152–65535 |
端口号:用两个字节表示的整数,它的取值范围是0-65535。其中,0-1023
之间的端口号用于一些知名的网络服务和应用,普通的应用程序需要使用1024以上
的端口号。如果端口号被另外一个服务或应用所占用,会导致当前程序启动失败。
理解IP和端口的关系
协议+IP地址+端口
组合,就可以标识网络中的进程
了,那么进程间的通信就可以利用这个标识与其它进程进行交互。如果一台计算机只有一个网卡
,并且接入了网络,那么,它有一个本机地址127.0.0.1
,还有一个IP地址,例如101.202.99.12
,可以通过这个IP地址接入网络。
如果一台计算机有两块网卡
,那么除了本机地址127.0.0.1
外,它还可以有两个IP地址
,可以分别接入两个网络
。通常连接两个网络的设备是路由器
或者交换机
,它至少有两个IP地址,分别接入不同的网络,让网络之间连接起来。
如果两台
计算机位于同一网络
,那么他们之间可以直接通信
,因为他们的IP地址前段
是相同
的,也就是网络号是相同的
。网络号是IP地址
通过子网掩码过滤后
得到的。例如:
某台计算机的IP是
101.202.99.2
,子网掩码是255.255.255.0
,那么计算该计算机的网络号是:
IP = 101.202.99.2
Mask = 255.255.255.0
Network = IP & Mask = 101.202.99.0
每台计算机都需要正确配置
IP地址
和子网掩码
,根据这两个就可以计算网络号
,如果两台计算机计算出的网络号相同
,说明两台计算机在同一个网络,可以直接通信。
网关
如果两台计算机计算出的网络号不同,那么两台计算机不在同一个网络,不能直接通信,它们之间必须通过路由器
或者交换机
这样的网络设备间接通信,我们把这种设备称为网关
。
网关的作用就是连接多个网络,负责把来自一个网络的数据包发到另一个网络,`这个过程叫路由。
IP地址,例如:10.0.2.15
子网掩码,例如:255.255.255.0
网关的IP地址,例如:10.0.2.2
直接记忆IP地址非常困难,所以我们通常使用域名访问某个特定的服务。域名解析服务器DNS负责把域名翻译成对应的IP
,客户端再根据IP地址访问服务器。
用nslookup
工具可以查看域名对应的IP地址
如:查询百度的ip地址发现是IPV4的IP地址
如:查询百度的ip地址发现是IPV6的IP地址
有一个特殊的本机域名localhost
,它对应的IP地址总是本机地址127.0.0.1
DNS(Domain Name System,域名系统)是将域名解析成某个IP地址后,访问所指向的服务器获取资源
域名和IP(Internet Protocol Address)地址相互映射的一个分布式数据库
,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。端口号53
。动态域名解析(DDNS)
:是将固定的域名与动态
的IP地址相对应,如花生壳服务
就提供动态域名解析服务
。为个人和中小型企业提供动态域名解析服务,其网页资源存储的电脑,其分配的IP地址是动态的,所以需要花生壳服务,当外网访问时
,会将电脑的IP地址发给花生壳服务器,分配出固定的IP地址给该电脑,达到动态解析的目的,`实现外网访问内网。适用于个人以及中小型企业,没有购买静态域名的人群,需求还是很大的。而面对百度这样的网站,其解析baidu.com,并不是叫做动态域名解析。浏览器输入www.qq.com域名,操作系统会先检查本地hosts文件
是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
在windows系统中,可以通过
C:\Windows\System32\drivers\etc下的host文件
来修改。可以将任何的域名映射到对应的IP地址中。
如果本地hosts文件
没有这个域名的映射,则查找本地DNS解析器缓存
,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
如果本地hosts文件
与本地DNS解析器缓存
都没有相应的网址映射关系,首先会找TCP/IP参数
中设置的首选DNS服务器
,在此我们叫它本地DNS服务器
,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
如果要查询的域名,不由本地DNS服务器区域
解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
如果本地DNS服务器本地区域文件与缓存解析
都失效,则根据本地DNS服务器
的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至“根DNS服务器”
,“根DNS服务器”
收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器
的一个IP。本地DNS服务器
收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器
地址(qq.com)给本地DNS服务器。当本地DNS服务器
收到这个地址后,就会找qq.com域服务器
,重复上面的动作,进行查询,直至找到www.qq.com主机。
如果用的是转发模式,此DNS服务器
就会把请求转发至上一级DNS服务器
,由上一级服务器
进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。
hosts:定义的IP地址是,存有网站资源(图片、文字)的服务器;
NS记录:定义的IP地址是,域名解析的服务器地址;
A记录:定义的IP地址是,存有网站资源的服务器。
取自计算机网络 | 域名解析过程
(Squid是一个高性能的代理缓存服务器)
来实现的。计算机网络中实现通信必须有一些约定
即通信协议,即对 速率、传输代码、代码结构、传输控制步骤、出错控制
等制定标准 ,好比公路交通规则,学生守则网络协议太复杂
指定源地址和目标地址,加密解密,压缩解压缩,差错 控制,流量控制,路由控制,
如何实现如此复杂的网络协议呢?分层
同层间可以通信
、上一层可以调用下一层,而与再下一层不发生关系
。OSI(Open System Interconnect)网络模型
是ISO组织
定义的一个计算机互联的标准模型
,注意它只是一个定义,目的是为了简化网络各层的操作,提供标准接口便于实现和维护
。这个模型从上到下依次是:
如果我们分层了,我们在使用的时候就可以仅仅关注我们需要关注的层次,而不用理会其他层。
最上层
,也就是应用层
。这是最贴近我们的程序员
的层次。物理层 (负责把数据进行分片并且真正通过物理网络传输,例如,无线网、光纤等)
最底层
,是整个开放系统的基础
。物理层设计通信信道上传输的原始比特流(bits)
,它的功能主要是为数据段设备提供传送数据的通路以及传输数据
。数据链路层 (负责把数据进行分片并且真正通过物理网络传输,例如,无线网、光纤等)
实现计算机网络中相邻节点之间的可靠传输
,把原始的、有差错的物理传输线路加上数据链路协议之后,构成逻辑上可靠地数据链路。需要完成的功能有链路管理、成帧、差错控制以及流量控制等。其中成帧是对物理层的原始比特流进行界定,数据链路层也能够对帧的丢失进行处理。网络层 (负责根据目标地址选择路由来传输数据)
路由选择、网络寻址、流量控制、拥塞控制、网络互连
等。传输层 (负责提供端到端的可靠传输)
承上启下
的作用,涉及源端节点到目的端节点之间可靠的信息传输。传输层需要解决跨越网络连接的建立和释放
,对底层不可靠的网络,建立连接时需要三次握手,释放连接时需要四次挥手。会话层 (负责建立和维护会话)
负责应用程序之间建立、维持和中断会话。
同时也提供对设备和节点之间的会话控制,协调系统和服务之间的交流,并通过提供单工、半双工和全双工
3种不同的通信方式,使系统和服务之间有序地进行通信。表示层 (处理数据格式,加解密等等)
把应用层提供的信息变换为能够共同理解的形式,
提供字符代码
、数据格式
、控制信息格式
、加密
等的统一表示。应用层 (提供应用程序之间的通信)
最高层
,是直接为应用进程提供服务的。其作用是在实现多个系统应用进程相互通信的同时,完成一系列业务处理所需的服务。
TCP/IP协议栈
(Internet使用的协议)传输控制协议(Transmission Control Protocol )/因特网互联协议( /Internet Protocol)
,是Internet最基本、最广泛
的协议。它定义了计算机如何连入因特网
,以及数据如何在它们之间传输的标准
。它的内部包含一系列的用于处理数据通信
的协议,并采用了4层
的分层模型,每一层都呼叫它的下一层所提供的协议来完成自己的需求
TCP/IP协议中的四层分别是应用层、传输层、网络层和链路层
,每层分别负责不同的通信功能。
网络接口层
网络接口层是分为物理层和数据链路层
。网络层(IP层)
运输层(TCP层)
可以采用TCP协议,也可以采用UDP协议
。应用层
TCP/IP协议栈
把各种数据包准备无误的传递给对方
,其中两个重要的条件是IP地址
和MAC地址。
我们通常的IP地址是路由器给我们生成的IP地址,路由器里面会记录我们的MAC地址。
MAC地址是全球唯一的
。举例,IP地址就如同是我们居住小区的地址,而MAC地址就是我们住的那栋楼那个房间那个人。IP地址采用的IPv4格式,目前正在向IPv6过渡。TCP(传输控制协议)
是面向连接的传输层协议。TCP层是位于IP层之上,应用层之下的中间层。
不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。TCP协议采用字节流传输数据。
上面说了分层可以在使用的时候就可以仅仅关注我们需要关注的层次,而不用理会其他层。HTTP协议是在最上层,也就是应用层。这是最贴近我们的程序员的层次。
我们知道HTTP是在应用层中的,显然,我们在Web通信的过程中,不仅仅是需要HTTP协议的,还会涉及到其他的协议的
。
DNS:负责解析域名
我们访问一个网页的时候,往往是通过域名来访问的www.zhongfucheng.site,而计算机通信只认的是我们的主机地址(192.168.xxx.xxx),因此,当我们输入域名的时候,需要DNS把域名解析成主机来进行访问。
TCP协议:分割HTTP数据,保证数据运输
TCP协议采用了三次握手的方式来保证数据的准确运输,在运输的数据的时候,发送标识过去给服务器,服务器也返回标识给客户端,而客户端收到消息后再次返回标识给服务器。这样一来就保证了数据运输是可靠的。
IP协议:传输数据包,找到通信目的地地址。
IP协议把我们的产生的数据包发送给对方,IP地址指明了节点被分配的地址,但IP地址可能会变换,我们可以使用ARP协议来将IP地址反射为MAC地址。MAC地址是不会更改的,是网卡所属的固定地址。
在找到通信目的地之前,我们是需要不断的中转的,这过程我们称作为:“路由中转”
,我们并不知道路由中转了多少次的。
因此是不能全面了解到互联网中的传输状况的。
接下来就离我们比较远了,属于硬件相关的了,也就是链路层和物理层。
网页上请求数据大概就是上边这么一个流程。
HTTP,又叫超文本传输协议
,英文全称是Hypertext Transfer Protocol
,它是互联网上应用最为广泛的一种网络协议。HTTP是一种应用层协议
,它是基于TCP协议之上
的请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求;服务器接到请求后,给予相应的响应信息。HTTP协议默认的端口号为80.
对于从客户端到服务器的每一个请求,都有4个步骤:
现在使用的HTTP协议是HTTP/1.1版本,
1997年之前采用的是HTTP1.0版本。HTTP连接在1.0版本中采用
非持续连接工作方式,1.1版本采用的是持续连接工作方式,持续连接是指服务器在发送响应后仍然在一段时间内保持这条由TCP运输层协议建立起来的连接,使客户机和服务器可以继续在这条连接上传输HTTP报文。
是否采用持续连接工作方式,1.0中默认是关闭的
,需要在HTTP头加入"Connection:Keep-Alive"
,才能启用Keep-Alive。HTTP1.1中默认启用Keep-Alive
,如果加入"Connection:close",才关闭
。目前大部分浏览器都是用HTTP1.1协议,也就是说默认都会发起Keep-Alive的连接请求
了,所以是否能完成一个完整的Keep- Alive连接就看服务器设置情况。
HTTP请求报文:在请求中,HTTP报文由方法
、URI
、HTTP版本
、HTTP首部字段
等部分组成。
首部字段例子:
数据类型
】字符集
】压缩格式
】语言环境
】访问哪台主机
】缓存数据的时间
】防盗链
】浏览器的内核是什么
】带来的Cookie是什么
】请求完后是断开链接还是保持链接
】请求的时间
】HTTP响应报文:在响应中,HTTP报文由HTTP版本
、状态码(数字和原因短语)
、HTTP首部字段
3部分组成。
服务器的``基本信息
,及数据的描述
,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据】服务器向客户端回送的数据
】状态行
格式: HTTP版本号 状态码 原因叙述
状态行:HTTP/1.1 200 OK
首部字段例子:
要跳转到哪个页面
】服务器的型号是什么
】数据压缩的格式
】返回数据的长度
】服务器的语言环境
】返回数据的类型
】该资源上次更新时间
】定时刷新
】以下载方式打开数据
】数据以分块方式回送
】服务器告诉浏览器要保存Cookie
】不要设置缓存
】不要设置缓存
】不要设置缓存
】连接方式
】返回数据的时间
】HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer)
,是以安全为目标的HTTP通道,简单讲是HTTP的安全版
。即HTTP下加入SSL层
,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。它是一个URI scheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL表明它使用了HTTP,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息
。HTTP协议以明文方式发送内容,不提供任何方式的数据加密
,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息
,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码`等。
为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
HTTPS和HTTP的区别主要为以下四点:
(CA认证,即电子认证服务,是指为电子签名相关各方提供真实性、可靠性验证的活动)
前者是80,后者是443。
取自以下网站
Java—网络编程总结(整理版)
Java网络编程:Java网络编程基础
java网络编程入门
Java网络编程基础(Netty预备知识)
网络编程三要素(IP/端口/协议)