初识网络原理

前言:

远古时期,计算机之间是相互独立的。随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据,即以多个计算机协同工作来完成 业务,就有了网络互连

        网络互连:将多台计算机连接在一起,完成数据共享。

        数据共享本质是网络数据传输,即计算机之间通过网络来传输数据,也称为网络通信。 根据网络互连的规模不同,可以划分为局域网和广域网。

一、局域网 LAN

局域网,即 Local Area Network,简称LAN。 Local 即标识了局域网是本地,局部组建的一种私有网络。

局域网内的主机之间能方便的进行网络通信,又称为内网

局域网和局域网之间在没有连接的情况下, 是无法通信的。

局域网组建网络的方式有很多种:

二、广域网WAN

 广域网,即 Wide Area Network,简称WAN。

通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。

广域网内部的 局域网都属于其子网

如果有北、中、南等分公司,甚至海外分公司,把这些分公司以专线方式连接起来,即称为“广域网”。

如果属于全球化的公共型广域网,则称为互联网(又称公网,外网),属于广域网的一个子集。

有时在不严格的环境下说的广域网,其实是指互联网。 所谓 "局域网" 和 "广域网" 只是一个相对的概念。

比如,我们有 "天朝特色" 的广域网,也可以看做 一个比较大的局域网。

互联网就是通过组网设备把很多台计算机连接在一块。形成一个庞大的局域网LAN或者说广域网WAN(两者是相对的概念)。在这些设备中可以通过有线或者无线进行数据传输。

三、网络通信基础

        网络互连的目的是进行网络通信,也即是网络数据传输,更具体一点,是网络主机中的不同进程间,基于网络传输数据。

问题一:

那么,在组建的网络中,如何判断到底是从哪台主机,将数据传输到那台主机呢?

这就需要使用IP地址来标识。

四、IP地址

概念:IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机 的网络地址。就像我们发送快递一样,需要知道对方的收货地址,快递员才能将包裹送到目的地。 

格式:ip地址是一个32位的二进制数,通常被分割为4个8为二进制数(四个字节)。通常使用"点分十进制"来表示ip地址。

特殊ip:127.0.0.1。称之为本机环回 ip ~~主要用于本机环回(loop back)测试(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机环回(loop back)测试。

问题二:

IP地址解决了网络通信时,定位网络主机的问题,但是还存在一个问题,传输到目的主机后,由哪个进程来接收这个数据呢?

这就需要端口号来标识。

五、端口号

通过ip地址可以确定主机在网络中的地址,当知道地址还需要确定主机上哪一个进程来接收数据。

概念:在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。

简单说:端口号用于定位主机中的进程。类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货人(端口号)。

格式:端口号是一个 0 - 65535 之间的一个数字。在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据。其中:0 - 1023 为知名端口号,这些端口预留给服务端程序绑定广泛使用的应用层协议,我们最好别用。

注意:

  1. 两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号。如果两个不同的进程绑定了同一个端口号,那么当请求过来哪个端口去接收这个请求,就说不清楚了。在java中也会抛异常。
  2. 一个主机上,一个进程可以绑定多个端口号。
  3. 在java中通过 Socket 对象直接操作网卡Socket对象和端口号是一一对应的,一个进程中可以存在多个Socket对象。

了解:

         一个进程启动后,系统会随机分配一个端口(启动端口) 程序代码中,进行网络编程时,需要绑定端口号(收发数据的端口)来发送、接收数据。 进程绑定一个端口号后,fork一个子进程,可以实现多个进程绑定一个端口号,但不同的进程不能 绑定同一个端口号。

六、网络协议 protocol

概念:网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组网络。发送方按照这个格式进行数据发送,那么接收方也需要按照这个格式解析数据。只有遵守这个约定,计算机之间才能相互 通信交流。

通常由三要素组成:

1. 语法:即数据与控制信息的结构或格式; 类似打电话时,双方要使用同样的语言:普通话

2. 语义:即需要发出何种控制信息,完成何种动作以及做出何种响应; 语义主要用来说明通信双方应当怎么做。用于协调与差错处理的控制信息。 类似打电话时,说话的内容。一方道:你瞅啥?另一方就得有对应的响应:瞅你咋的!

3. 时序:即事件实现顺序的详细说明。 时序定义了何时进行通信,先讲什么,后讲什么,讲话的速度等。比如是采用同步传输还是 异步传输。 女生和男生的通话,总是由男生主动发起通话,而总是在男生恋恋不舍的时候,由女生要求 结束通话。

协议(protocol)最终体现为在网络上传输的数据包的格式

作用:就好比见网友,彼此协商胸口插支玫瑰花见面,这就是一种提前的约定,也可以称之为协议。

        计算机之间的传输媒介是光信号和电信号。通过 "频率" 和 "强弱" 来表示 0 和 1 这样的信息。要想传递 各种不同的信息,就需要约定好双方的数据格式。

  • 计算机生产厂商有很多;
  • 计算机操作系统,也有很多;
  • 计算机网络硬件设备,还是有很多;
  • 如何让这些不同厂商之间生产的计算机能够相互顺畅的通信?
  • 就需要有人站出来,约定一个共同的标准,大家都来遵守,这就是 网络协议;

        知名协议的默认端口:系统端口号范围为 0 ~ 65535,其中:0 ~ 1023 为知名端口号,这些端口预留给服务端程序绑定广泛使 用的应用层协议,如:

  • 22端口:预留给 SSH 服务器绑定 SSH 协议
  • 21端口:预留给 FTP 服务器绑定 FTP 协议
  • 23端口:预留给 Telnet 服务器绑定 Telnet 协议
  • 80端口:预留给 HTTP 服务器绑定 HTTP 协议
  • 443端口:预留给 HTTPS 服务器绑定 HTTPS 协议

需要补充的是:以上只是说明 0 ~ 1023 范围的知名端口号用于绑定知名协议,但某个服务器也可以使用其他 1024 ~ 65535 范围内的端口来绑定知名协议。(餐厅的VIP包房是给会员使用,但会员也可以不坐包房,坐其他普通座位 )

七、五元组

在TCP/IP协议中,用五元组来标识一个网络通信:

  1. 源IP:标识源主机
  2. 源端口号:标识源主机中该次通信发送数据的进程
  3. 目的IP:标识目的主机
  4. 目的端口号:标识目的主机中该次通信接收数据的进程
  5. 协议号:标识发送进程和接收进程双方约定的数据格式

五元组在网络通信中的作用,类似于发送快递:

八、协议分层

        一个大协议往往包含很多内容,同样的制定这个协议也会包含很多需要考虑的因素,不利于我们去设定(比较杂乱)。因此采用协议分层处理,针对这个复杂的大协议,拆分成若干个相对简单的小的协议,随着把协议拆分成一些小协议,会发现某些协议之间起到的作用和功能类似,就把这些相同功能协议分为一层。

分层的作用:

分层最大的好处,类似于面向接口编程:定义好两层间的接口规范,让双方遵循这个规范来对接。

在代码中,类似于定义好一个接口,一方为接口的实现类(提供方,提供服务),一方为接口的使用类 (使用方,使用服务): 对于使用方来说,并不关心提供方是如何实现的,只需要使用接口即可 对于提供方来说,利用封装的特性,隐藏了实现的细节,只需要开放接口即可。

这样能更好的扩展和维护,如下图:

分层优点:

  1. 降低了学习和维护成本,利于封装。
  2. 灵活的针对某一层协议进行替换。

九、OSI七层模型 

OSI:即Open System Interconnection,开放系统互连。

  • OSI 七层网络模型是一个逻辑上的定义和规范:把网络从逻辑上分为了7层。
  • OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
  • 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整。
  • 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。

         OSI 七层模型既复杂又不实用:所以 OSI 七层模型没有落地、实现。 实际组建网络时,只是以 OSI 七层模型设计中的部分分层,也即是以下 TCP/IP 五层(或四层)模型来 实现。

十、TCP/IP五层(或四层)模型

        TCP/IP是OSI的简化的实现方式,把OSI的应用层,表示层,会话层统一用应用层表示。传输层和网络层由操作系统实现。数据链路层和物理层是由硬件的设备驱动程序和网络接口实现。

        TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。 TCP/IP通讯协议采用了5层的层级结构,上层协议要调用下层协议,下层协议给上层协议提供服务

    1)应用层:应用程序,描述了传输的数据,用户怎样使用。

    2)传输层:确定两端(发送方,接收方)。

    3)网络层:负责传输路径规划,走哪条路比较划算。

    4)数据链路层:主要负责相邻节点怎样传输数据(传输的形式是什么)。

    5)物理层:约定了网络通信中的基础设备(比如网线,网口等设备)。

越往下的越接近硬件设备,越往上就越接近用户

应用层是应用程序实现的(与程序员自己写的代码相关)

 核心思想:

    不同层有不同层所遵循的一些协议,从应用层往下经过每一层,用每一层所遵循的协议对数据进行“打包”。接收方接收到数据后,也是通过每一层用相同的协议进行解析,最终解析出发送方的数据。

  • 封装:上层到下层数据“打包的过程”。(发送方)
  • 分用:下层对上层数据进行解析(接收方,解析需要和封装过程中每层协议相同)

注意:

    不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。

    数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中
的 "上层协议字段" 将数据交给对应的上层协议处理。 

网络设备所在分层

  • 对于一台主机,它的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下四 层;
  • 对于一台路由器,它实现了从网络层到物理层,也即是TCP/IP五层模型的下三层;
  • 对于一台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层;
  • 对于集线器,它只实现了物理层;

十一、网络分层对应

小知识汇总:

传输信号的介质:

  1. 电信号(网线)                使用 低电平表示1 ,高电平表示0
  2. 光信号(光纤、电磁波)  使用 高频光表示1, 低频光表示0

光纤就是玻璃丝

 看下整个信息传输过程:发送方

我们来模拟一个QQ 信息传输过程

A用户给B用户发送一个 hello world!
我们用户在聊天界面输入hello world!时,QQ就会将这个字符串给构造成一个应用层数据报

所谓的应用层数据报,本质上就是一个遵守了约定格式的字符串

1.应用层
我们QQ的应用层的具体数据格式我们是不清楚的,我们假设这里的应用层协议的格式是: 发送方QQ,接收方QQ,发送时间,消息内容。

 程序调用操作系统API,将这个应用层数据交给传输层

2.传输层(操作系统内核)
在传输层中,我们要将应用层的数据 构造成 传输层的数据报,我们传输层常用的协议TCP/UDP,假设我们这里使用的是UDP协议,那么我们就需要构造出UDP的数据报(在应用层数据的基础上,加个UDP报头)

 所谓报头就是一个标签,通过标签表示出当前要把这个信息怎样进行传输。

我们这里的UDP报头,是一个特定格式的字符串(涉及源端口,目的端口),此处就像字符串拼接一样,把这个报头和后面的数据拼接到一起。
然后传输层将UDP数据报交给网络层.

3.网络层
网络层最常用的协议是:IP协议,将UDP数据报构造成一个IP数据报

我们这里的IP报头也相当于是一个特定的字符串,包含一些其他信息(源IP和目的IP)
然后将IP数据报交给数据链路层

4.数据链路层
我们数据链路层最知名常用的协议:以太网,将上述的IP数据报打包成一个以太网数据帧,

 然后将以太网数据帧交给物理层

5.物理层
物理层将上述的以太网数据帧的二进制数据转换为电信号/光信号,然后进行真正的发送。

我们网络传输数据的单位:
包(packet),报(datagram),帧(frame),段(segment)

 上述过程,从应用层到物理层,层层加码,这个过程称为封装(这个封装不是面向对象的封装)

 看下整个信息传输过程:接收方

1.物理层
我们接收方的网卡接收到了光信号或者电信号,然后将这个信号转换回二进制数据,转回的这个数据是一个以太网数据帧,然后交给数据链路层。

2.数据链路层
我们数据链路层对这个数据进行解析

 数据链路层去掉帧头帧尾,取出中间的载荷,然后交给网络层IP协议
为什么知道这是IP数据报,因为我们以太网数据帧帧头会记录这个载荷是不是IP数据报

3.网络层
IP协议进行解析,取出IP数据头,取出IP协议的载荷,将得到的传输层数据报交给传输层

 我们的IP报头里会记录,载荷是TCP还是UDP协议

4.传输层
UDP进行解析,取出UDP报头,取出载荷,然后将载荷交给应用层对应的应用层程序

 我们的UDP报头里有一个目的端口,目的端口标识着一个具体的应用程序,关联在一起的,因此可以根据这个端口来把数据交给应用程序

5.应用层
QQ就会对上述数据进行解析,然后显示到用户界面上。

上述,从上到下 层层解析,这个过程称为分用

可以把封装理解为包装快递,分用理解为拆快递

这些传输过程中的一些协议都是固定的,通信双方按照同样的方式来理解数据。

两个不同的程序,只要他们遵循相同的应用层协议,就可以通信

这就是一个简单的网络通信流程,我们整个网络协议,分成了许多层,上层协议调用下层协议(上层将数据交给下层,继续封装),下层协议为上层协议提供服务(下层对数据进行解析,然后交给上层)。
但是我们这里的几层协议之间是有层级关系的,只有相邻的层级之间才能进行交互(不能跨层交互)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值