今天开始介绍的是网络,这是最核心最重要的板块之一~
目录
网络互连
局域网 LAN
广域网WAN
网络通信基础
IP地址
端口号
协议
发送方的工作
应用层
传输层
网络层
数据链路层
物理层
接收方的工作
随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据,即以多个计算机协同工作完成业务,就有了网络互连。
网络互联就是将多台计算机连接在一起,完成数据共享。
数据共享本质是网络数据传输,即计算机之间通过网络来传输数据,也称为网络通信。
根据网络互连的规模不同,可以划分为局域网和广域网。
但是我们需要组建网络需要网络设备,在这里我们简单的介绍集线器、交换机和路由器。
局域网,即 Local Area Network,简称LAN。 Local 即标识了局域网是本地,局部组建的一种私有网络。局域网内的主机之间能方便的进行网络通信,又称为内网;局域网和局域网之间在没有连接的情况下, 是无法通信的。
广域网,即 Wide Area Network,简称WAN。 通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部的局域网都属于其子网。
需要注意的是,广域网和局域网只是一个相对的概念,我们有一个比较小的广域网,也可以看做是一个较大的局域网。
网络互连的目的是进行网络通信,也即是网络数据传输,更具体一点,是网络主机中的不同进程间,基于网络传输数据。 那么,在组建的网络中,如何判断到底是从哪台主机,将数据传输到那台主机呢?这就需要使用IP地址来标识。
IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机的网络地址。
就像我们发送快递一样,需要知道对方的收货地址,快递员才能将包裹送到目的地。
格式 :IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节),如: 01100100.00000100.00000101.00000110。通常用“点分十进制”的方式来表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数)。例如最熟悉的:192.168.1.1
特殊IP :127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1 本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开 发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。
IP地址解决了网络通信时,定位网络主机的问题,但是还存在一个问题,传输到目的主机后,由哪个进程来接收这个数据呢?这就需要端口号来标识。
端口号可以标识主机中发送数据、接收数据的进程。简单说:端口号用于定位主机中的进程。
类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货人(端口号)。
格式 :端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据。
两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号。
有了IP地址和端口号,可以定位到网络中唯一的一个进程,但还存在一个问题,网络通信是基于二进制 0/1数据来传输,如何告诉对方发送的数据是什么样的呢? 网络通信传输的数据类型可能有多种:图片,视频,文本等。同一个类型的数据,格式可能也不同,如发送一个文本字符串“你好!”:如何标识发送的数据是文本类型,及文本的编码格式呢? 基于网络数据传输,需要使用协议来规定双方的数据格式。
协议是网络通信中最核心的概念。
协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从 的一组约定、规则。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互 通信交流。
通常由三要素组成:
1. 语法:即数据与控制信息的结构或格式;
2. 语义:即需要发出何种控制信息,完成何种动作以及做出何种响应;
3. 时序,即事件实现顺序的详细说明。
协议(protocol)最终体现为在网络上传输的数据包的格式。
为什么需要协议?
计算机之间的传输媒介是光信号和电信号。
通过 "频率" 和 "强弱" 来表示 0 和 1 这样的信息。要想传递各种不同的信息,就需要约定好双方的数据格式。 计算机生产厂商有很多; 计算机操作系统,也有很多; 计算机网络硬件设备,还是有很多; 如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来,约定一个共 同的标准,大家都来遵守,这就是网络协议。
网络通信,是一个比较复杂的事情,需求场景复杂了,实现功能也会比较复杂。如果这个协议太复杂了,那么学习成本、使用成本、理解成本、维护成本都会非常高。因此实际采取的做法是:
针对这个复杂的大协议,拆分成若干个相对简单的小协议。随着把协议拆分成一些小的协议,每个协议负责一部分功能,此时就发现,某些协议之间,起到的功能和作用是类似的~针对这些小的协议,再进行(分类、分层)。
当前互联网世界,协议分成有两种风格:
OSI七层网络模型(教科书上教的)
TCP\IP五层网络模型(实际上的情况)(不算物理层就是四层)
越往下,越接近硬件设备。越往上,越接近用户。
直接和咱们打交道的,其实只是应用层,下面四层都是现成的,只需要知道如何工作的就行了~
应用层是应用程序实现的,下面两层是通过硬件和驱动设备来实现的。
下面我们就来详细的说说每个层之间会干一些什么事情:
首先我们假设一个应用场景:
用户在输入框中输入hello这个字符串,用qq这个应用程序就会把这个字符串构造成一个应用层数据报
应用层数据具体的数据格式我们是不知道的,每个应用程序都不一样。我们这里假设一个应用层协议的格式:
应用层数据报本质上就是一个遵守了约定格式的字符串,程序调用操作系统的API,把这个应用层数据交给传输层。
到传输层就代表着从应用层面进入到操作系统内核了。
在传输层中,就要把上述应用层数据,构造成传输层的数据报。
传输层使用到的协议最知名的就是UDP和TCP。比如此处使用UDP,那么就需要构造出UDP数据报,比如在应用层数据的基础上加上一个UDP报头。
此处就像字符串拼接一样,把这个报头和后面的数据拼接到一起。所谓的报头其实就是一个标签,通过标签表示出当前要把这个消息怎样进行传输。
最知名的协议:IP协议。IP协议要基于上述数据,打包成一个IP数据报。
也相当于是一个字符串,包含了另外一组信息:源IP和目的IP。
之后网络数据报准备好,进一步的交给数据链路层。
最知名的协议:“以太网”。基于上述数据,还要打包成为一个“以太网数据帧”。
接下来这个数据继续往下传输,交给物理层。
把上述的二进制数据转换成电信号\光信号,然后发送出去。
上述过程,从应用层到物理层,层层加码,这个过程称为“封装”。
其中,发送方使用的QQ协议、UDP、IP、以太网,必须接收方也使用对应相同的协议。
整个的网络协议中,协议分成了很多层。上层协议要调用下层协议,下层协议要给上层协议提供支持。这几层协议之间是有明确的层级关系的,只有相邻的两层才能交互。(不能跨层交互)。
所以通过上述这些约束,让通信过程变得简单、清晰起来。