随着时代的发展,需要多个计算机协同工作来完成业务的要求越来越多,也因此诞生了网络互连
网络互连:将多台计算机连接在一起,完成数据共享
根据网络互联的规模不同,可以划分为局域网和广域网
局域网,即Local Area Network,简称LAN。
Local即标识了局域网是本地,局部组建的一种私有网络。
局域网内的主机之间能方便的进行网络通信,又称内网;局域网和局域网之间在没有连接的情况下是无法通信的。
局域网组建网络的方式可分为以下几种:
广域网,即Wide Area NetWork,简称WAN
通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部的局域网都属于其子网
如果有北、中、南等分公司,甚至海外分公司,把这些分公司以专线方式连接起来,即称为“广域网”。如果属于全球化的公共型广域网,则称为互联网(又称公网,外网),属于广域网的一个子集。
网络互连的目的是进行网络通信,也可认为是网络数据传输,更具体一点,是网络主机中的不同进程间基于网络传输数据
在此情况下,以下两个标识在网络通信中显得尤为重要:
概念
IP地址用于定位主机的网络地址,就像我们发送快递一样,寄件人需要有一个地址来寄出货物(源IP),收件人也要有一个地址来接受货物(目的IP)
格式
IP地址是一个32位的二进制数,通常用 “点分十进制” 的方式来表示,即a.b.c.d的形式(a,b,c,d都是0~255之间的十进制整数)。如:127.0.0.1
概念
端口号用于定位主机的进程。类似发送快递时,不关需要指定收获地址(JP地址),还需要指定收货人(目的端口号),并且在网络通信中,即要有目的端口,还要有源端口
格式
端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接受网络数据
有了以上两个标识,可以定位到网络中唯一的一个进程,但还存在一个问题,网络通信是基于二进制0/1数据来传输的,如何告诉对方发送的数据是什么样的?又是什么类型的数据呢?
对此,基于网络数据传输,需要使用协议来规定双方的数据格式
网络协议,简称协议,网络协议是网络通信(即网络数据传输)**经过的所有网络设备都必须共同遵守的一组约定、规则。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。协议(protocol) 最终体现为在网络上传输的数据包的格式。
计算机之间的传输媒介是光信号和电信号。通过“频率” 和 “强弱” 来标识 0 和 1 这样的信息。要想传递各种不同的信息,就需要约定好双方的数据格式,大家都来遵守,这就是网络协议。
在TCP/IP协议中,用五元组来标识一个网络通信:
五元组在网络通信中的作用,类似于发送快递:
可以在cmd中,输入 netstat -ano
查看网络数据传输中的五元组信息:
协议分层就是把一个复杂的协议拆分成多个不同层次的协议,把功能定位相似的协议放到同一层中,使得上层协议能够调用下层协议封装好的功能,下层协议给上层协议提供服务,同时只有相邻的层次之间可以进行沟通,不能跨层次调用
这样的协议分层也给我们带来了许多好处:
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇
TCP/IP 通讯协议采用了五层的层级结构,每一次都呼叫它的下一层所提供的网络来完成自己的需求:
应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层。
传输层: 负责两台主机之间的数据传输。如传输控制协议 (TCP),能够确保数据可靠的从源主机发 送到目标主机。
网络层: 负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识⼀台主机,并通过路由表 的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)工作在网路层。
数据链路层: 负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。 有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层。
物理层: 负责光/电信号的传递方式。比如现在以太网通用的网线(双绞线)、早期以太网采的的同 轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。物理 层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层。
我们可以把网络通信在这五层模型上的传输步骤和我们平时网购相关联:
我在京东上买了一个鼠标,等我拿到这个鼠标后要用来干什么,解决什么问题,这是应用层的事情,即应用层负责拿到数据之后要用来干啥;
快递从哪里寄出,又寄到哪里去,起点和终点在哪里,这是传输层关注的,即传输层负责关注网络数据包的起点和终点;
有了起点和终点后,要走哪条路将快递从起点运送到终点,这是网络层负责的,即网络层负责路径规划;
确定路线后,我要以什么方式来进行运输,比如从上海到广州用飞机空运,从广州到深圳用货车运输等,这是数据链路层负责的,即数据链路层负责两个相邻节点之间的传输;
通信过程中的基础设施如公路、铁路、航线等,这一块由物理层负责,即物理层负责硬件措施。
注:OSI七层模型
相对复杂且不实用,一般实际组建网络使用TCP/IP 五层模型来实现,这里不过多解释
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment), 在网络层叫做数据报(datagram), 在链路层叫做帧(frame);
应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装。
例如,数据到传输层时要给应用数据(载荷)加上TCP报头,构成TCP数据包;而到了网络层就要给此时的TCP数据包加上IP报头,构成IP数据包;之后到数据链路层又要给IP数据包首尾各加上以太网帧头和以太网帧尾,构成以太网数据帧,之后在物理层把以太网数据帧这样的二进制结构数据转换成光信号/电信号/电磁波然后进行发送,这样我们的数据才算发送出去了!
首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息;
数据封装成帧后发送到传输介质上,到达目的主机后每层协议在剥削掉相应的首部,根据首部中的"上层协议字段"将数据交给对应的上层协议处理,这个过程就叫做分用,可以理解为封装的反过程。