一. 网络基础知识
- 局域网,即 Local Area Network,简称LAN. Local 即标识了局域网是本地,局部组建的一种私有网络
-
广域网,即 Wide Area Network,简称WAN。 通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部的 局域网都属于其子网.
有时候,我们会按照网络覆盖范围来划分WAN,MAN(城域网),LAN.但实际上,它们只是一个相对概念,比如由两个局域网组成的广域网,也可以看作另一个广域网的局域网.
关于这些网络设备,后面的博文中会详细讲解,各位看官耐心等待~
- IP地址,IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机的网络地址。
- 端口号,在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程.简单说:端口号用于定位主机中的进程。
举个栗子~,就好像我们去取快递,IP号就是驿站的地址,端口号就是快递单号
在java编程这边,两个进程不能绑定一个端口号,通常一个进程也只能绑定一个端口号.但实际上一个进程是可以绑定多个端口号的.
端口号的取值范围是0~65535,其中0~1023为知名端口号(又称"具名端口号"),这些端口预留给某些知名协议使用.通常情况下,程序猿操作的进程绑定的端口号不应该包括它们.
我们可以通过netstat -ano | findstr + 端口号指令查看绑定某一端口号的进程
二. 网络协议
2.1 什么是协议?
协议,网络协议的简称,网络协议是网络通信(即网络数据传输) 经过的所有网络设备 都必须共同遵从的一组约定、规则。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。
就好比两个人相互交流,他们使用的语言就是"协议"
2.2 协议标准化及分层
先来谈谈为啥要对协议进行标准化~
在计算机通信诞生之初,系统化和标准化并未得到重视.每家计算机的厂商都出产各自的网络产品来实现网络通信.
1974年,IBM公司将本公司的计算机通信技术作为通信技术作为计算机系统化网络结构公之于众.从此,各大计算机产商也纷纷发布各自的网络系统结构.然而百花齐放的结果是各种协议之间并不兼容.也就是说,如果我起初使用了某一厂商的网络产品,和我通信的计算机同样也要使用他家的.
这对用户来讲及其不方便,很多公司开始着手研究异构机型之间的通信技术.为了解决这一问题,ISO(International Organization forStandards,国际标准化组织)推出了OSI通信模型,对通信系统进行了标准化和分层.
标准化的必要性我们已经知晓了,下面来讲解一下为啥要对协议进行分层~
就像流水线能够使福特公司进入盛世一样,对协议进行分层,每一层的协议都有自己的任务--调用下层协议的接口,为上层协议提供服务.
分层具有以下优点:
1. 降低了学习和维护成本.(底层协议的封装)
为计算机通信制定协议并不是一件容易的事,需要同时考虑硬件和软件.如果不对这个协议分层,每个程序猿要想让自己的程序能进行网络交互,就需要把整个协议都熟记于心.
经过分层后的协议,上层协议不需要关心下层协议是如何来实现的,只需要使用它提供的接口即可.
2. 低耦合,可以针对某一协议进行灵活替换.
举个打电话的例子~
在语言层上,两位老哥可以用汉语,英语,腹语...在物理传输层上,可以使用无线电,电话线...可以进行灵活替换.
2.3 OSI七层协议模型
OSI: 即Open System Interconnection,开放系统互连.
- OSI 七层网络模型是一个逻辑上的定义和规范:把网络从逻辑上分为了7层。
- OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输
- 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整.通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。
可惜的是,由于OSI 的设计者们并没有进行实施,只是对各层的作用进行了粗略的限定,各层之间的功能也有所重叠,所以"OSI"终究只是一个模型,并不是实际生活中真正使用的协议.
但是作为初学者,理解OSI模型是我们认识网络通信的第一步.见下图~
2.4 TCP/IP模型
TCP/IP并不是只包括两种协议,在很多情况下,它是指利用IP协议进行通信时必须使用到的协议群的统称.
TCP/IP被广泛应用的原因有两点:
1. 开放性,TCP/IP协议是由IETF讨论制定的,这个组织本身就允许任何人加入进行讨论.
2. 实用性,只要有一处新的规范被提出来,人们就会在多个设备之间进行试验,多次发现,解决问题之后才会将它变成标准文档上的一部分.因此传说"TCP/IP先开发程序,后写规格标准"一点都不夸张.
重点来咯,我们要熟记TCP/IP每一层的功能,这将是学习后面网络协议的必经之路.
1. 应用层: 负责应用程序之间的沟通.描述了用户之间传输什么样的数据.我们要进行的网络编程主要针对应用层,在后面的博文中会get到的.
2. 传输层:负责两台主机之间的传输.传输层负责端到端之间的传输,只在双方通信结点上进行处理.
3. 网络层: 负责地址管理和路由选择. 从起点到终点之间有很多路径,网络层协议负责规划走哪一条路径效率高.
4. 数据链路层:负责物理层面上互连的两个节点之间的通信. 将0,1序列划分成有意义的数据帧传给对方.
5. 物理层:约定网络通信中使用的基础硬件设备.比如使用哪种网线,哪个网口,比特流和电压之间的转换等.
干讲概念你们肯定是听不进去的~
下面来讨论一下,我们的QQ消息是怎么发给对方的?
上图中从上到下,从硬件到软件,对数据进行的操作,称为"封装".
下面来康康B老弟是怎么接收消息的?
上图中,数据经过层层解析传送到接收方的过程,称之为"分用".
当然了,数据传输肯定不止有起点和终点,还有中间的网络设备.
下图演示一下这段数据经过交换机(二层转发)和路由器的过程(三层转发).
而前文提到的集线器,只是在物理层上起到放大信号的作用.
当然,现在的交换机/路由器之间的功能并没有明确的界限,交换机也大都可以完成路由器的工作.