随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据,即以多个计算机协同工作来完成
业务,就有了网络互连。
网络互连:将多台计算机连接在一起,完成数据共享。
数据共享本质是网络数据传输,即计算机之间通过网络来传输数据,也称为网络通信。
根据网络互连的规模不同,可以划分为局域网和广域网。
局域网,即 Local Area Network,简称LAN。
Local 即标识了局域网是本地,局部组建的一种私有网络。局域网内的主机之间能方便的进行网络通信,又称为内网;局域网和局域网之间在没有连接的情况下,是无法通信的。
(1)基于网线直连
(2)基于集线器组建
(3)基于交换机组建
(4)基于交换机和路由器组建
交换机:组建局域网
路由器:本质是把两个局域网连起来
广域网,即 Wide Area Network,简称WAN。
通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部的
局域网都属于其子网。
IP地址主要用于标识网络主机、其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机
的网络地址。
就像我们发送快递一样,需要知道对方的收货地址,快递员才能将包裹送到目的地。
格式:
IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节),如:
01100100.00000100.00000101.00000110。
通常用“点分十进制”的方式来表示,即 a.b.c.d 的形式(a,b,c,d都是0~255之间的十进制整数)。如:
100.4.5.6。
特殊IP:
127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1
本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开
发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。
IP地址解决了网络通信时,定位网络主机的问题,但是还存在一个问题,传输到目的主机后,由哪个进
程来接收这个数据呢?这就需要端口号来标识。
在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。简
单说:端口号用于定位主机中的进程。
类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货人(端口号)。
格式:端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据。
注意事项:
两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号。
协议是通信网络中最核心的概念。它是一个约定,商量好数据是啥样的格式来进行传输的。有了这个约定,才能让双方理解对方的含义。
协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从
的一组约定、规则。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互
通信交流。通常由三要素组成:
(1)语法:即数据与控制信息的结构或格式;
类似打电话时,双方要使用同样的语言:普通话
(2)语义:即需要发出何种控制信息,完成何种动作以及做出何种响应;
语义主要用来说明通信双方应当怎么做。用于协调与差错处理的控制信息。
类似打电话时,说话的内容。一方道:你瞅啥?另一方就得有对应的响应:瞅你咋的!
(3)时序,即事件实现顺序的详细说明
时序定义了何时进行通信,先讲什么,后讲什么,讲话的速度等。比如是采用同步传输还是
异步传输。
女生和男生的通话,总是由男生主动发起通话,而总是在男生恋恋不舍的时候,由女生要求
结束通话。
网络通信,是一个比较复杂的史强,需求场景复杂了,实现功能也会比较复杂,如果这个协议太复杂,那么学习成本,使用成本,理解成本,维护成本都会比较高。因此,实际中,是针对这个复杂的大协议,拆成若干个相对简单的小协议。
针对这些小的协议,再进行“分类”。(分层)
在TCP/IP协议中,用五元组来标识一个网络通信:
协议分层有很多好处
当前互联网世界,协议分层有两种风格:
(1) OSI七层网络模型
(2)TCP\IP五层网络模型
OSI七层模型分为以下七层:
OSI 七层模型既复杂又不实用:所以 OSI 七层模型没有落地、实现。
实际组建网络时,只是以 OSI 七层模型设计中的部分分层,也即是以下 TCP/IP 五层(或四层)模型来实现。
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
越往下的,越接近硬件设备。越往上,就越接近用户。
网络分层:相当于上层协议要调用下层协议。下层协议给上层协议提供服务。
举个:
我在淘宝上买了一件衣服,需要填写收件人地址和收件人姓名。
物理层:约定了网络通信中基础的硬件设备。
数据连接层/网卡层:主要负责相邻的两个节点之间具体的传输。
(相邻的两个节点就是指从浙江到湖南,从湖南到陕西这种传输途径。)
网络层:主要负责路径规划,走那条路比较划算。
(比如快递是从浙江义乌到西安,有很多途径可以选择,走哪一条路,怎么走,就是网络层关心的)
传输层:只关心起点到终点(端与端之间的传输)。
(站在我和商家的角度。我们不关心快递传输的过程,只关心起点和终点。这个过程就是传输层的工作。)
应用层:描述了数据的传输。用户要怎么来使用。
(我买了一个刷子,我可以用来刷鞋,刷梳子,刷羽绒服…)
节点:上述设备的统称,任何一个连入网络的交换机,路由器,电脑都可以成为“节点”。
相邻节点:通过一根线连在一起。
注意我们这里说的是传统意义上的交换机和路由器,也称为二层交换机(工作在TCP/IP五层模型的下两
层)、三层路由器(工作在TCP/IP五层模型的下三层)。
随着现在网络设备技术的不断发展,也出现了很多3层或4层交换机,4层路由器。我们以下说的网络设
备都是传统意义上的交换机和路由器。
用户在输入框输入“hello”这个字符串,qq这个应用程序,就把这个字符串,构造成一个应用层数据报。
应用层数据报本质上就是一个遵守了约定格式的字符串。
发送方:
应用层
一个假设的应用层协议的格式:
发送QQ号;发送时间;接收方QQ号;消息内容
程序要调用操作系统的api,把这个应用层数据,交给传输层。
传输层(进入操作系统内核)
在传输层中,要把上述应用层程序构造成传输层的 数据报。
传输层使用到的协议:最知名的UDP和TCP。
比如此处使用UDP,就需要构造出UDP数据报。(在应用层基础上,加上UDP报头)
此处相当于字符串拼接,将报头和后面数据拼接在一起。
所谓“报头”就是一个“标签”
通过标签标示出当前要把这个消息怎样进行传输。
传输层就把这个UDP数据报交给“网络层”。
那么为什么要网上拼报头呢?
商家给我们发货,也是要套上包装的。比如一件T恤,要先套上一层塑料,再套一个纸盒。外面再套纸壳的盒…
一方面是防止衣服脏了或者运输过程损坏了。另一方面,可以在包装上面贴标签。标签上可以写一些信息。
这是快递传输中必要的内容。
接下来这个数据继续往下传输,交给物理层。
此时就把真正的数据发出去了。
知识拓展:
表示一个网络传输的数据单位
包(packet)
报(datagram)
帧(frame)
端(segment)
上述过程,从应用层到物理层,层层加码,这个过程称为封装。
接收方:
(1)物理层
网卡接收到的信号是光信号和电信号,是在物理层,把这个光电信号转换回二进制的数据
转换回的这个数据,其实是一个以太网数据帧。
(2)把这个数据交给数据链路层尽心解析:
数据链路层没需要去掉帧头帧尾。取出中间的载荷。再交给上层的网络层。IP协议
以太网数据帧帧头里也会记录,这个载荷是不是一个IP数据报。
(3)网络层,IP写针对这里进行解析,解析出IP报头,取出IP协议的载荷,把这里得到的数据层数据报,交给上层传输层。
IP报头里会记录载荷是UDP还是TCP
(4)传输层:UDP再进行解析,取出报头,取出载荷,再把这个载荷交给对应的应用程序层。
UDP报头中有一个重要字段“目的端口”,目的端口是一个具体的应用程序,关联在一起的。因此就可以根据这个端口来把数据交给应用程序了。
(5)应用层:QQ应用程序,QQ就会针对应用层协议进行解析,显示到页面上。
上述过程,从下到上,层层解析,这个过程称为“分用”。
封装:包装快递
分用:拆快递。
整个的网络协议中,协议分为了很多层。
上层协议要调用下层协议(上层吧数据交给下层,继续封装)。
下层要给上层协议提供支持(下层协议解析好数据,交给上层)。
这里的几层协议之间是有明确的层级关系的,只有响铃的两层之间才能够进行交互。(不能跨层交互)