网络发展史:
单机时代(独立模式) -> 局域网时代 -> 广域网时代 -> 移动互联网时代
网络互联:将多台计算机链接再一起,完成数据共享。
数据共享的本质是网络数据传输,即计算机之间通过网络来传输数据,也称网络通信。根据网络互联的规模不同,可以划分为局域网和广域网。
独立模式:计算机之间相互独立
局域网:即 Local Area Network,简称 LAN。Local 即标识了局域网是本地,局部组建的一种私有网络。局域网内的主机之间能方便的进行网络通信,又称为内网。局域网和局域网之间在没有链接的情况下,是无法通信的。
局域网组建网络的方式有很多种方式:
(1)基于网线直连
(2)基于集线器组建
(3)基于交换机组建
(4)基于交换机和路由器组建
交换机可以视为是“对路由器的接口进行了扩展”,家用路由器,一般就是插 4 个网线(1 WAN口连运营商的设备)
交换机不会进行组局域网功能,可以把路由器的接口进行扩展。(也就是,某个电脑连接到交换机上就相当于连接到路由器了),交换机也是可以连接交换机的
广域网:即Wide Area Network,简称WAN。通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部的局域网都属于其子网。
IP地址
在 cmd(win + r) 上输入 ipconfig 可以查看自己电脑的IP。
IP 地址主要用于标识网络主机,其他网络设备(如路由器)的网络地址。简单说,IP地址用于定位主机的网络地址。
就像发快递一样,需要知道对方的收获地址,快递员才能将包裹送到目的地。
格式:IP地址是一个32位的二进制数,通常被分割为 4 个“8位二进制数”(也就是4个字节),如:01100100.00000100.00000101.00000110。通常用“点分十进制”的方式来表示,即a.b.c.d的形式(a,b,c,d都是0~255之间的十进制整数)。
端口号
在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据,接受数据的进程。简单说:端口号用于定位主机中的进程(一台主机上可能有多个程序同时使用网络,端口号是区分一台主机上多个应用程序的)。类似发快递时,不光需要收获地址(IP地址),还需要收货人姓名(端口号)。
格式:端口号是 0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接受网络数据。
理解IP地址和端口号之后,还有一个问题:网络通信是基于二进制0/1数据来传输的,如果我的程序已经收到数据了,哪程序如何理解数据的含义呢??
认识协议
协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定,规则。如怎么样建立链接,怎么样互相识别等。只有遵守这个约定,计算机之间才能互相通信交流。
协议最终体现为在网络上传输的数据包的格式。
网络协议,通信双方对于发送/接受 数据格式的约定,我的数据怎么发,你收到就得怎么解析。
五元组
在TCP/IP协议中,用五元组来标识一个网络通信:
1.源IP:标识源主机。
2.源端口号:标识源主机中该次通信发送数据的进程。
3.目的IP:标识目的主机。
4.目的端口号:标识目的主机中该次通信接受数据的进程。
5.协议号:标识发送进程和接受进程双发约定的数据格式。
可以在cmd中,输⼊ netstat -ano 查看⽹络数据传输中的五元组信息。如果需要过滤(⼀般是通过端⼝号或进程PID过滤),可以使⽤ netstat -ano | findstr 过滤
字符串。
协议分层
网络通信,非常复杂,如果我们设计一个协议,完成网络通信中方方面面的问题,势必会使这个协议非常复杂,非常庞大。所以就把协议拆分。把一个大的协议拆成若干个小的,功能单一的协议了。但是拆完之后,发现小的协议太多了,于是就把这些小的协议归类,最后形成了好几个层次。
分层:只有相邻两层协议之间可以进行交互。上层协议可以调用下层协议,下层协议可以给上层提供服务。(协议之间的交互,不能跨层进行)
什么是协议分层:
在这个例⼦中,我们的协议只有两层;但是实际的⽹络通信会更加复杂,需要分更多的层次。
OSI七层网络模型
OSI:即Open System Interconnection。开放系统互联。
- OSI 七层网络模型是一个逻辑上的定义和规范:把网络从逻辑上分为了7层。
- OSI 七层模型是一种框架性的设计方法,其最重要的功能就是帮助不同类型的主机实现数据传输。
OSI七层模型划分为以下七层:
由于OSI 七层模型既复杂又不实用,所以这一套分层的体系,只是存在与教科书上。
而真实实际组建网络时,只是以OSI七层模型设计中的部分分层,最主要还是使用 TCP/IP五层(或四层)模型来实现。
TCP/IP五层(或四层)模型
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
TCP/IP通讯协议采用的五层层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
- 应用层:负责应用程序沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层。(也就是我们拿到包裹之后怎样使用)
- 传输层:负责两台主机之间的数据传输。如传输控制协议(TCP),能够确保数据可靠的从源主机发送到目标主机。(也就是两个任意设备之间的通信,不考虑中间过程,只考虑起点和终点)
- 网络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的路线(路由)。路由器工作在网络层(也就是两个任意设备之间如何进行通信,考虑的是中间过程是怎么样的。(这两个设备之间,可能隔着很多的交换机和路由器))
- 数据链路层:负责设备之间的数据帧的传送和识别。有以太网,令牌环网,无线LAN等标准。交换机工作在数据链路层。(也就是完成两个相邻设备直间如何进行通信的。(先考虑一小步怎么走)通过网线,把电脑连到路由器/交换机上)
- 物理层:负责光/点信号的传递方式。物理层的能力决定了最大传输速率,传输距离,抗干扰性等。集线器工作在物理层。(也就是物理层规定了网络通信中的一些硬件设施符合的要求。(像网线,WIFI,光纤这物理层的协议,就是约定这些硬件设施要符合的要求是怎样的))
举个例子:
至于为什么有的资料又叫四层呢?
其实是把数据链路层和物理层看作一个整体了。
网络设备所在分层
- 对于一台主机,他的操作系统内核实现了从传输层到物理层的内容,也即是TCP/IP五层模型的下四层;
- 对于一台路由器,它实现了网络层到物理层,也即是TCP/IP五层模型的下三层;
- 对于一台交换机,它实现了从数据链路层到物理层,也即是TCP/IP五层模型的下两层;
- 对于集线器,他只实现了物理层;
注意我们这里说的是传统意义上的交换机和路由器,也成为二层交换机(TCP/IP五层模型的下两层),三层路由器(TCP/IP五层模型的下三层)。
随着现在网络设备技术的不断发展,也出现了很多三层或四层交换机,四层路由器。我们一下说的网络设备都是传统意义上的交换机和路由器。
封装和分用
- 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部,称为封装。
- 首部信息中包含了一些类似于首部有多长,载荷有多长,上层协议是什么等信息。
- 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的部首,根据首部中的“上层协议字段”将数据交给对应的上层协议处理。
网络数据通信的基本流程:
比如我通过qq,发送hello给对方
像上述过程,从上层到下层,数据进一步加工(添加报头)的过程,称为封装(和面向对象的封装,不是一个封装 )
还有一个小知识点:
谈到网络传输的“基本数据单位”涉及到多个术语:
网络数据包/帧/报/段
段(segment) TCP用 段
报(Datagram) UDP用 报
包(packet) IP 用 包
帧 (frame) 数据链路层 以太网数据帧
日常工作中,就不太会区分这些概念,这里就混着用了。
分用,就是封装的逆向过程,当数据到达接收方主机,逐层进行解析的过程。
传输的中间过程中,也是涉及到封装分用的。
交换机,只需要封装到 数据链路层即可。交换机是工作在数据链路层(二层转发)
主机的数据 => 交换机。交换机收到之后,物理层解析,数据链路层解析(没有网络层了,数据链路层中,得到的以太网数据帧的帧头,信息就足以支持交换机进行下一步工作),重新构造出新的以太网数据帧,发给下一个设备。
路由器是工作在网络层(三层转发)
主机的数据 => 路由器,路由器收到之后,物理层,数据链路层,网络层解析(没有传输层),重新构造出新的网络数据包,构造出以太网数据帧,构造出二进制数据,进行转发。
物理层考虑信号衰减事情,,不管是有线/无线都会有衰减,不过无线衰减的快,有线衰减的慢,到达下一个节点,下一个节点重新发送数据的时候把信号又加强了。
两台计算机通过 TCP/IP 协议通讯的过程如下图所示:
另外一些网络中的基本概念:
请求:在互联网通信中,请求通常指的是客户端(如网页浏览器、移动应用程序等)向服务器发送的请求信息。
响应:响应是服务器对客户端请求的回应。当服务器接收到请求后会进行处理,然后返回一个响应,其中包含了处理结果和一些其他相关信息。
客户端是指通过网络向服务器发送请求以获取服务的计算机或设备。客户端通常由用户直接操作,如浏览器、邮件客户端等。
服务器是指存储数据、运行程序并提供服务的计算机,它响应客户端的请求并返回结果。服务器可以是网站服务器、数据库服务器等。