0.网络引言:
在之前的学习当中,我们学习了多线程,以及IO。接下来我们将要学习网络,那么你们对网的认识又是什么样的?你们对网络的构造组成又是什么样呢?别着急,下面我们会深入了解。什么是网络,网络的基本组成,在网络中数据传输的基本流程。
1.概念初步认识:
局域网: 多个设备连接到一个路由器上,那么这两个设备就在一个局域网当中。
广域网: 多个局域网了解到一起组成一个广域网。世界上最大的广域网是因特网
路由器: 网络的重要组成,通过路由器进行不同网络间实现连接 。
交换机: 实现在同一局域网当中,不同设备之间的连接 。通过交换机,可以在一个路由器上连接多个设备
IP: 标识不同设备的唯一标号,一台设备有一个唯一IP地址
端口号: 区分同一台设备的不同程序。例如mysql的端口号为3306;在同一时刻,一个端口号只能由一个程序使用。
补充:路由器的交换机的区别
路由器类似于房子的大门 ,交换机类似于房子室内的小门 ,房子类似于一个局域网 。通过大门(路由器 ),可以实现和外部的连接(其他不同网络 ),通过内部的门,可以实现对房子内不同设备的连接 (内部之间相互连接 ),同时也能 增加更多的房间和大门相通(增加设备)
补充:IP和端口号的区别
假如你去拿快递,快递站的地址就相当于IP ,你可以根据这个找到快递站。当你到达了快递站,你会发现哪里有很多的快递,你又如何进行区分 (很多程序,如何正确区分程序) ,快速找到自己的快递呢?这个时候我们的取件码(端口号) ,能帮助我们找到自己的快递(区分不同的程序)
2.协议
认识协议:
- 协议,是一种约定俗成约束 ,要求我们按照某一种规则去进行某种操作。为什么会有协议呢?每个人的思维方式都是不同的,处理事件的方式也不同,如果不进行约束的话,就会导致网络的通信很混乱。这就好比,你直接用中文和使用外语的外国人进行交流。
- 协议在网络通信中,十分的重要。不同的设备应该遵循同一套协议,才会使网络通信有意义。
- 网络通信的五元组:
- 源IP:发送请求的设备
- 源端口:发送请求的程序
- 目的IP:接受请求的设备
- 目的端口:接受请求的程序
- 网络协议:遵循的规则
- 网络通信的五元组:
- 不同的应用程序遵循一套协议,但是他们对协议的处理方式有所不同,这就导致不同程序的不兼容,如果要实现程序的兼容吗,需要要求对协议的处理方式一样。
协议分层:
- 在网络通信的过程中,其细节非常之多,这就导致如果协议都写在一个当中的话,会让协议非常之大,不方便使用。如果进行拆分的话,大大小小的协议会拆分得到很多个,导致协议不方便管理。
- 因此,就想到了给协议进行分层,将协议按照不同的类,进行归类,划分层数。
- 只有相邻的协议可以进行交互。
- 上层协议调用下层协议提供的API
- 下层协议给上层协议提供服务。
- 不能进行跨层交互。
3.网络分层
OSI七层网络模型:
OSI七层网络模型,这个分层太过复杂,一般只出现在教科书上,在这里我们简单了解一下就可以,知道他们的大概分层就可以。
- 应用层
- 表示层
- 会话层
- 传输层
- 网络层
- 数据链路层
- 物理层
TCP五层(四层)网络模型
OSI网络模型是理论参考模型,在实际当中,我们还是使用TCP五层网络模型。下面我们就详细说一下,TCP五层网络模型,以及各个分层。
- 物理层:
- 负责二进制数据在物理介质上的传输,是整个网络设备的基础
- 处理0 1比特流,不在意数据的含义。
- 典型设备:网线。
- 数据链路层
- 负责同一局域网中两个相邻设备之间的通信,把物理层的比特流封装成帧。
- 处理数据帧: 帧头+数据+帧尾。
- 典型设备:交换机
- 典型协议:以太网协议。
- 网络层
- 负责不同网络设备的通信, 基于数据链路层,考虑数据传输的中间过程。
- 处理数据包
- 典型设备:路由器
- 典型协议:IP协议
- 传输层:
- 任意设备之间的通信,不考虑中间过程,只考虑目标主机和源主机。
- 处理对象:数据报
- 典型协议:TCP协议,UDP协议。
- 应用层:
- 直接为应用程序提供服务。
- 处理的是具体的业务数据
- 典型协议:HTTP,FTP等
补充:
- 在一些数据上TCP网络分层只有四层,他们把物理层和数据链路层变成一个了。
- 应用层主要是在应用程序上工作,传输层网络层,在操作系统上进行工作。数据链路层和物理层涉及到应用驱动程序和网络接口。
- 主机涉及到:物理层到应用层
- 路由器:物理层到网络层
- 交换机:物理层到数据链路层
4.网络数据通信的基本流程。
假设A从QQ上给B发送了一个消息,大概流程如下:
发送流程:
-
1.应用层:
- 首先A发送B消息,应用程序会获取A所发送的消息,构造一个应用层数据包(结构化数据,包含将要发送的信息,以及一些基本信息),这个数据包会遵守应用层协议(程序员自己定义的) 。
- 调用传输层提供的API把数据包传给传输层
-
2.传输层:
- 传输层获取数据之后,会构造出一个传输层数据包。给应用层的传过来的数据包加了一个报头。 我们需要知道,这个报头包含了源端口和目的端口。
- 传输层会调用应用层提供的API,将数据传给网络层
-
3.网络层:
- 网络层就会接受数据,在传输层处理的基础上,并加IP报头(包含源IP和目标IP)
- 网络层会调用数据链路层的API,将数据传给数据链路层
-
4.数据链路层 和 物理层:
- 在数据链路层 最终要的协议是以太网协议,他会给网络层的数据进行再一次的处理,在这里会加上帧头和帧尾,进行封装。将数据给物理层,通过他把二进制数据以光电信号的形式进行发送,此时数据才真正意义上离开当前主机。
注意:
- 在数据进行发送的时候,会根据协议进行层层封装
- 在数据的传输以二进制的形式进行传输。
- 在开始的时候,我们的数据并不是以二进制的形式存在的,在传输的过程中,结构化数据变成了二进制的形式,这个也叫做数据的序列化。此外在接收数据,二进制的数据在解析的时候,由二进制数据变成了结构化数据,这个过程叫做反序列化。
数据的接收:
- 1.接受信号:
- 数据到达对方网卡,光电信号被接受转化成二进制数据,并传递给数据链路层。
- 2.数据链路层解析:
- 数据链路层获得数据之后,会把帧头和帧尾取出来,把载荷交给网络层。
- 帧头由专门的属性,描述了网络层具体使用了哪些协议,然后网络层就会根据具体协议进行数据的解析。
- 3.网络层解析:
- 网络层拿到数据之后,会按照相应协议进行解析。在这里网络层会按照IP协议格式进行解析,把载荷数据交给传输层。
- IP报头也包含了传输层所使用的一些协议
- 包含目标IP,这里路由器会确认当前主机是不是目标主机,如果是就会继续向上进行解析。
- 传输层解析:
- 传输层拿到协议之后,和网络层类似,会按照Tcp协议,进行数据的解析,把载荷交给应用
- 传输层的报头包含目标端口,告诉我们交给哪个应用程序。
- 应用层解析:
- **根据端口号,把数据传给对应的应用程序。**在这里QQ获得了数据,并根据QQ的协议进行协议。把二进制数据转化成用户所发送的信息。
上述就是数据进行传输的大概流程,实际上数据的传送和接受还包含很多的细节,在这里我们就先简单的了解一下。对数据的传输有一个简单的认识。
这里我们讲了网络的基本概念,以及网络的构成,还有一些TCP五层网络模型,以及协议。最后我们着重了解了一些网络的传输的大概流程