独立模式:计算机之间相互独立
这个时候的计算机还不能够联网,当时的家用计算机可以用来打单机游戏或者是视频播放等功能。
随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据,即以多个计算机协同工作来完成业务,就有了网络互连。
网络互连:将多台计算机连接在一起,完成数据共享。
数据共享本质是网络数据传输,即计算机之间通过网络来传输数据,也称为网络通信。
根据网络互连的规模不同,可以划分为局域网和广域网
(1)基于网线直连
将两个电脑通过一根网线进行连接,这就是构成了一个简单的局域网。
但是通过传输线互联连接起来,要保证每一个节点至少与其他节点相连。但其结构复杂,实现起来费用较高,不易管理和维护。因此我们也会使用交换机和路由器进行互联。
(2)基于交换机和路由器进行组建
广域网,即 Wide Area Network,简称WAN。
通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部的局域网都属于其子网。因此局域网规模足够大,就成了广域网。
网络互连的目的是进行网络通信,也即是网络数据传输,更具体一点,是网络主机中的不同进程间,基于网络传输数据。
那么,在组建的网络中,如何判断到底是从哪台主机,将数据传输到那台主机呢?这就需要使用IP地址来标识。
IP地址:标识了一个主机的具体位置。
IP地址是一个32位的二进制数。
格式
本质上是一个4个字节,32位的整数,往往写成“点分十进制”。
例如192.168.0.136
三个点把整个ip分成了四个部分,每个部分都是一个字节(取值范围0-255)
查询自己的IP
如果想要查看自己电脑的ip地址,可以通过
win+r -> cmd -> ipconfig
查看ip
特殊IP
127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1
本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。
IP地址解决了网络通信时,定位网络主机的问题,但是还存在一个问题,传输到目的主机后,由哪个进程来接收这个数据呢?这就需要端口号来标识
概念
在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。简单说:端口号用于定位主机中的进程。
类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货人(端口号)。
格式
端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据。
注意事项
两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号。
了解:
一个进程启动后,系统会随机分配一个端口(启动端口)程序代码中,进行网络编程时,需要绑定端口号(收发数据的端口)来发送、接收数据。
进程绑定一个端口号后,fork一个子进程,可以实现多个进程绑定一个端口号,但不同的进程不能绑定同一个端口号。
问题:
有了IP地址和端口号,可以定位到网络中唯一的一个进程,但还存在一个问题,网络通信是基于二进制0/1数据来传输,如何告诉对方发送的数据是什么样的呢?
网络通信传输的数据类型可能有多种:图片,视频,文本等。同一个类型的数据,格式可能也不同,如发送一个文本字符串“你好!”:如何标识发送的数据是文本类型,及文本的编码格式呢?
基于网络数据传输,需要使用协议来规定双方的数据格式
概念
协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。
协议是什么?
协议就是约定,约定发送的数据格式。
使得双方能够互相进行通信。
协议(protocol)最终体现为在网络上传输的数据包的格式。
在TCP/IP协议中,用五元组来标识一个网络通信:
源IP:标识源主机
源端口号:标识源主机中该次通信发送数据的进程
目的IP:标识目的主机
目的端口号:标识目的主机中该次通信接收数据的进程
协议号:标识发送进程和接收进程双方约定的数据格式
五元组在网络通信中的作用,类似于发送快递:
对于网络协议来说,往往分成几个层次进行定义。
在网络通信中,需要约定的协议,其实是非常复杂的。
而面对复杂的环境,就需要复杂的协议。
但是协议太复杂也不好。
因为一个协议太复杂,就可以拆分成多个协议。协议是可以拆分出很多存在一些小的协议定位或者作用是类似的。
针对这些小的协议进行分类。同时再针对这些不同的类别进行分层。
调用关系
我们约定了层与层之间的调用关系。
要求上层协议调用下层协议,下层协议给上层提供支持,不能跨级调用。
例如
公司有一定的层级关系,这种层级关系是要求两个相邻的层级才能交互,不能够跨层交互。
在代码中,类似于定义好一个接口,一方为接口的实现类(提供方,提供服务),一方为接口的使用类(使用方,使用服务):
这样能更好的扩展和维护,如下图:
OSI七层网络模型既复杂又不实用,仅仅存在于教科书当中。
TCP/IP五层网络模型是当下最广泛使用的网络模型
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
上面的定义可能有些复杂繁琐,我们可以进行简化
物理层我们考虑的比较少。因此很多时候也可以称为 TCP/IP四层模型。
应用层,对应程序员写的应用程序,下面四层,则是操作系统内部已经封装好的。
因此写代码,进行网络编程,主要工作还是围绕应用层进行展开。
传输层要被应用层进行调用,所以也要对传输层有一定的理解。
封装:发送方发送数据,要把数据从上到下,依次交给对应的层次的协议,进行封装。
解析:接收方收到的数据,要把数据从下到上,依次交给对应的层次的协议,进行解析。解析过程就叫做分用。
我们举一个例子进行过程的解析。
首先假设在通信应用程序,进行聊天的环境下。
我发送“在吗?”给对方
qq会拿到上述用户数据进行封装,封装成应用层数据包。
- 这里的应用层数据包格式,只是假设的,qq实际的应用层数据包,是qq开发者自己规定的。
- 这里的数据包,本质上就是字符串的拼接
- 为了区分上述字段,可能引入分隔符等进行界定,就像 发送方断桥烟雨;接收方刘cc;时间20230813;消息内容在吗;
传输层有很多协议,最典型的是TCP和UDP。
此处以UDP为例
UDP针对上述数据包再进行封装。
此处,UDP协议再给应用层数据报整个作为载荷并且再加个UDP报头,就是为了填写必要的属性
传输层协议最关键的属性是源端口和目的端口
数据报本质上是字符串拼接
UDP协议进行封装后,将这个数据报交给网络层的协议
网络层最常见的协议就是IP协议
上述UDP数据报到达网络层,需要进一步的封装,添加IP协议报头
源IP和目的IP就是描述了这次传输中,最初的起点和最终的终点
IP和端口
IP是找到主机,端口是确定主机上的哪个程序/进程
我的电脑有一个IP
但是电脑上有很多的程序有着不同的端口号
数据链路层的协议是以太网协议
以太网协议对网络层的协议进行封装
mac地址,也叫做物理地址
也是描述一个主机在网络上的位置
它的功能和IP很相似,但是当下就把这两个地址分别作用于不同的用途。
IP用来进行网络层的路径规划
mac用来进行描述数据链路层,两个进行传输的相邻节点。
mac是和网卡进行绑定的。每个网卡的mac是为一个
物理层要把上述的0101的二进制数据转换成光信号/电信号/电磁波信号,进行传输。
接收方进行解析数据。
接受过程和封装过程刚好相反。
发送,从上到下,依次封装,新增报头
接收,从下到上,依次分用,去掉报头
忽略中间的转发过程,只考虑对方的电脑收到这个消息的情况。
物理层会收到高低电平的二进制数据。
会对这里的信号进行解析,还原成0101这样的二进制序列。
此时把接收到的二进制数据当成一个以太网数据帧(此处是从以太网线收到的数据,就是要交给以太网协议来进行处理)
以太网协议进行解析,把以太网帧头和帧尾去掉,取出中间的载荷,再往上交给网络层。
此时就由网络层的IP协议进行解析数据报,也就是去掉IP报头。取出载荷,交给传输层协议。
传输层由UDP协议进行解析处理,还是去掉报头,取出载荷,把数据交给应用层
由应用程序对应用层数据报进行解析,放到程序的界面
发送方是进行层层封装
接收方是进行层层分用
真实的网络环境中,数据的传输中间可能要经历很多节点进行转发。
交换机只需要封装分用到数据链路层(只需要改源mac和目的mac)
路由器需要封装分用到网络层(更改mac地址,以及根据目的IP进行下一阶段的路径规划)
通常也说,交换机是进行“二层转发”,路由器进行“三层转发”。
我们这里说的是教科书上的“经典”交换机路由器(教科书和考试上的标准)
实际上,真实的路由器和交换机之间的界限越来越小
路由器可以通过设定特殊模式只进行二层转发
交换机也有高端交换机,支持三层转发
甚至路由器/交换机还可以封装分用到传输层甚至应用层
路由器/交换机封装分用到传输层应用层的一个应用场景就是进行舆情分析。