目录
局域网(简称LAN)
广域网
IP地址
端口号
协议
协议分层
互联网的分层
网络设备的分层
封装和分用
局域网(简称LAN)
简单来说就是把两台或多台机器连接在一起,局部组建的一种私有网络,局域网内的主机之间能方便的进行网络通信,,而局域网和局域网之间没有连接的话是无法通信的.
局域网之间的通信方式右很多种:
1.网线直接相连
这是一种简单的局域网,也比较简单,但是这种组网方式并不太常用,如果主机更多的话就会更加麻烦,是会非常耗费网线和网口的
2.基于集线器组建
这种组网方式比较"坑",就不过多介绍了
3.基于交换器组建
交换机其实家里也不太常见,交换机上面的网口都是相等的口,效果就是把插在上面的设备给组建成一个局域网,这个局域网内部的主机之间就可以相互进行访问,交换机就把若干个设备组建到了一个局域网中
4.基于路由器组建
而对于路由器而言,上面是有两种网口的,通过LAN口插的设备就可以组成一个局域网,而通过WAN口就可以插在另一个路由器的LAN口上,然后连接另一个局域网,路由器就可以连接两个不同的局域网
上述讨论的区别,仅仅局限于"传统"的交换机和路由器,实际上,真实的交换机和路由器之间的界限已经越来越模糊了,两个的功能之间基本差别不大了!
广域网
广域网其实和局域网之间没有明确的界限,一般认为比较大的局域网,就可以称为"广域网 ",全世界最大的广域网,叫做Internet(因特网)
IP地址
描述了网路上的一个主机的位置,IP地址本质上是一个32位的整数~~但是由于32位的整数不方便人来读和记忆,因此一般常见的操作就是把这个32位的整数,按照每个字节,分成四个部分~中间用.来分割,这种称为"点分十进制".类似于这样的IP地址每一部分都是0~255,这样更方便人来读和记忆
端口号
描述了一个主机上的某个应用程序,端口号本质上是一个16位的无符号整数(0~65535),(3306就是mysql默认的端口号),服务器程序在启动的时候,就需要绑定上一个端口号,以便客户端程序来访问
协议
要进行有效的通信,前提就是能够明确通信协议~协议本质上就是约定,发出来的数据是什么样的格式,接收方就需要按照对应的格式来进行解析~
而在网络通信的时候,本质上传输的是光信号和电信号,通过光信号的频率(高频率/低频率),电信号的电平(高电平/低电平)来表示0/1!
协议分层
网络通信这个过程其实是非常复杂的,里面有很多很多的细节,如果只通过一个协议的话,这个协议会非常的庞大,复杂,因此我们需要把这个庞大的协议进行拆分,拆成多个小的,更简单的协议,每个协议负责一部分工作!!这样的好处是:①每层协议不需要理解其他层协议的细节(更好的做到了封装,不需要理解里面的据图工作原理,就可以完成操作,降低了使用成本)②把对应层的协议替换成其他协议(更好的解耦合,例如两个人打电话的话,就可以不局限于使用有线电话,也可以使用无线电话,也可以不使用英语,汉语)
互联网的分层
OSI七层网络模型:
OSI为(Open System interconnect)的缩写,自上而下分别是应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
TCP/IP网络模型:
自上而下分别是应用层、传输层、网络层、数据链路层、物理层,在这个模型中把应用层,表示层,会话层合并成了一层应用层,其他层都是基本类似的
如果站在一个全局的角度来看这个模型的话就是五层模型,而站在程序员的角度看的话,最下面的物理层描述的是硬件设备,这个时候就被认为是四层模型了
简单介绍一下这几层结构的功能:
物理层:针对网络通信的硬件设备,类似于网线,网卡,对硬件设备的约定,就是物理层协议所负责的范畴,需要保证所有的主机和网络设备之间都是相互匹配的
数据链路层:负责完成两个相邻(这里的相邻代表的是通过一根网线连接的两台设备,类似于上面的路由器和主机,但是各个主机之间没有通过一根网线相连就不是相邻的)的设备之间的通信
网络层:负责点到点之间的通信,这里就是全局的了,网络中的任意节点,到任意一个节点的通信(更多指不相邻的),然后网络层的协议就负责在这两个点之间规划出一条最优的路线(这个最优用户可以自己定义),因为两个点之间的路线不会只有一条,然后网络层就会帮助规划出一条最优的路线出来(例如高德地图),然后相邻之间的就可以通过数据链路层来通信了
传输层:负责端到端之间的通信,这里只关注起点和终点,就不会关注过程(不关注数据视奏哪条路线来通信的)只关注结果(只关注数据到没),这里就类似于买快递,你和商家就是只关注结构的,而快递公司才会去关注过程
应用层:这个是和程序员密切相关的,这里就会关注,你传输的这个数据是做什么用的,不同的应用程序就有不同的用处,就拿上面的快递举例子:商家就是站在传输层,考虑这个东西能不能发到我手上,而快递公司就是站在网络层来规划路线,快递员就是就是站在数据链路层将货物拉到快递站点,电动车/卡车/公路都是站在物理层,提供传输的基础,而买快递的我们就站在应用层,是抱有一定的用途才需要的这个快递(数据)
网络设备的分层
一台主机,其实就对应了物理层到应用层五层都实现了
一台路由器,主要就是物理层到网络层(实现了物理层,数据链路层,网络层)
一台交换机,主要就是物理层到数据链路层(实现了物理层,数据链路层)
封装和分用
(这里的封装和Java面向对象的封装没关系)
这个其实是网络分层中的一组重要概念,主要是不同的分层的协议之间是如何相互配合的
举个例子:
例如使用QQ发送消息:
用户A在键盘上,输入"hh",按下发送键,然后QQ应用程序(应用层),就会根据用户输入的内容,把数据构造成一个应用层的协议报文(协议是约定,而报文是遵守了这个约定的一组数据,QQ中的代码会根据程序员所涉及的应用层协议(其他层的协议都是操作系统/硬件/驱动已经实现好的,而应用层的协议是程序员自己实现的),来构造出一个应用层的数据报文)
然后到了传输层(操作系统内核),然后根据刚才传过来的数据,基于当前使用的传输层协议,来构造出一个传输层协议报文(传输层最低按次那个的协议:UDP,TCP,以TCP为例)
而这里的封装也不是仅有一层,接下来就会把这个传输层的数据报,交给网络层再由网络层来处理(也是在操作系统内核),拿到了完整的传输层数据报,就会再根据当前使用的网络协议(例如IP),再次进行封装,把TCP数据报构造成IP数据报,还是会添加一个协议报头
这也是一个封装,紧接着当前的网络层协议,就会把这个IP数据报,交给数据链路层(驱动程序),在刚才的IP数据报基础上,根据当前使用的数据链路层协议(典型的数据链路层协议叫做"以太网"),给构造成一个数据链路层的数据报,就会构造成一个"以太网数据帧"
然后数据链路层又会把这个数据交给物理层(硬件设备),这里做的工作就是根据刚才的以太网数据帧(一组0 1),把这里的0 1变成高低电平,通过网线传输出去,或者把这里的0 1变成高频/低频的电磁波,通过光纤/无线的方式传播出去~~
这就是一次完整的数据传输过程,这里的整个过程都称为封装,从上往下,数据从上层协议,交给下层协议,由下层的协议进行封装(构造成该层协议的报文),直到物理层才完成传输!
到了刚才这一步,数据就已经离开了当前主机,前往了下一个设备,下一个设备可能是其它设备,这里的用户A和B大概率不是网线直连的,中间就有很多个路由器和交换机来负责数据的转发,这里我们来看一下数据到达B之后的表现:
先到物理层(硬件设备,网卡),主机B的网卡感知到了一组高低电平,然后就会把这些电平翻译成0 1的一串数据,然后这一串0 1就是一串完成的以太网数据帧,然后物理层就会把这个数据交给数据链路层(驱动程序),然后数据链路层就会对这个数据进行解析,去掉帧头帧尾,取出里面的IP数据报,然后交给网络层协议(操作系统),网络层协议(IP协议)又会把这个数据进行解析,去掉IP数据报头,取出里面的TCP数据报,然后再交给传输层(操作系统内核),传输层协议(TCP协议)又会把这个数据进行解析,去掉TCP报头,取出TCP报,交给应用层(应用程序 QQ),应用层就是调用刚才的socket API从内核中读取到这个应用层数据报,再按照应用层协议进行解析,根据解析结构显示到窗口,这样就完成了一个数据具体的解析过程,这里从下往上的解析就是分用
分用就是封装的逆过程,封装就是从上往下数据依次被加上了协议报头(包快递),分用就是从下往上,数据依次被去掉了协议报头(拆快递)
上述讨论的只是起点和终点的情况,A和B中间还有很多的路由器和交换机,简单介绍一下
交换机
路由器
中间更多路由器和交换机
无论网络多么复杂,这里整体的传输过程都是类似的,只是在不停的重复封装和分用的过程