文章目录
- 前言
- ✍一、互联网的发展
- 1.独立模式
- 2.网络的出现
- 局域网LAN
- 广域网WAN
- ✍二、网络编程概述
- ✍三、网络编程中的术语介绍
- IP地址
- 端口号
- 协议
- OSI七层模型
- TCP\IP四层模型
- ✍四、协议的层级之间是如何配合工作的
前言
在本文中,会对网络编程的一些术语进行解释,例如什么是IP,什么是协议,什么是端口号。并且会对计算中各个协议的交互有一个初步的介绍
✍一、互联网的发展
1.独立模式
最开始时,计算机之间是相互独立的,每个计算机中的数据不能互通,想要对不同的数据进行操作,就需要到存储该数据的计算机上进行操作,非常麻烦。
2.网络的出现
随着时代的发展,越来越需要计算机之间相互通信,共享软件数据,就有了网络互联
网络互连 :将多台计算机连接到一起,完成数据共享
数据共享本质是⽹络数据传输,即计算机之间通过⽹络来传输数据,也称为⽹络通信。
根据⽹络互连的规模不同,可以划分为局域⽹和⼴域⽹。
局域网LAN
局域⽹,即 Local Area Network,简称LAN。
Local 即标识了局域⽹是本地,局部组建的⼀种私有⽹络。
局域⽹内的主机之间能⽅便的进⾏⽹络通信,⼜称为内⽹;局域⽹和局域⽹之间在没有连接的情况下,是⽆法通信的。
局域⽹组建⽹络的⽅式有很多种:
-
网线直连
-
由集线器组建
-
由交换机组建
-
由交互机和路由器组建
广域网WAN
⼴域⽹,即 Wide Area Network,简称WAN。
通过路由器,将多个局域⽹连接起来,在物理上组成很⼤范围的⽹络,就形成了⼴域⽹。⼴域⽹内部的局域⽹都属于其⼦⽹。
✍二、网络编程概述
计算机网络:计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统。
网络编程的目的:传播交流信息、数据交换、通信。
-
想要达到什么效果需要什么:
-
如何准确定位网络上的某台主机。IP地址+端口。定位到计算机上的某个资源。
找到这台主机,如何传输数据。
✍三、网络编程中的术语介绍
IP地址
概念
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地址⽤于标识主机⽹络地址,端⼝号可以标识主机中发送数据、接收数据的进程。
简单说:端⼝号⽤于定位主机中的进程。
类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货⼈(端⼝号)。
格式
端⼝号是0~65535范围的数字,在⽹络通信中,进程可以通过绑定⼀个端⼝号,来发送及接收网络数据。
协议
协议,⽹络协议的简称,⽹络协议是⽹络通信(即⽹络数据传输)经过的所有⽹络设备都必须共同遵从的⼀组约定、规则。如怎么样建⽴连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。
协议(protocol)最终体现为在⽹络上传输的数据包的格式。
协议分层
在不同的机器上通过网络进行传输文件时,涉及到的操作非常多,非常复杂,如果使用单一的协议来对问题进行解决时,这个协议需要考虑的问题非常多,一旦某块出现问题,修改起来可能会涉及到别的部分。那么我们将解决一个问题需要的操作交给几个协议来完成,降低耦合,增强网络编程的健壮性
协议分层的优点
- 各层之间互相独立。
每层不需要知道其他层是如何实现的,仅需要知道实现某个功能需要调用哪个api即可。 - 易于维护和实现。
这种结构的存在使得处理一个复杂而庞大的问题变得更加容易,使整个系统分割成多个独立的小系统 - 灵活性好。
当不需要某个功能时,可以删去实现该功能对应的层级,而其他层级的功能不受影响, - 实现功能的标准化。
在书写每一层的代码时,就会详细的给出该层对应的功能。
缺点
当然协议分层也存在着缺点
- 由于分层过于严密,导致不能越级调用底层的接口,降低了开发的效率
OSI七层模型
OSI定义了网络互连的七层模型(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层),如下图所示:
TCP\IP四层模型
-
应用层(Application Layer)
为应用程序或用户请求提供各种请求服务。 OSI参考模型最高层,也是最靠近用户的一层,为计算机用户、各种应用程序以及网络提供接口,也为用户直接提供各种网络服务。 -
传输层(Transport Layer)
数据通信。 建立主机端到端的链接,为会话层和网络层提供端到端可靠的和透明的数据传输服务,确保数据能完整的传输到网络层。 -
网络层(Network Layer)
IP选址及路由选择。 通过路由选择算法,为报文或通信子网选择最适当的路径。控制数据链路层与传输层之间的信息转发,建立、维持和终止网络的连接。数据链路层的数据在这一层被转换为数据包,然后通过路径选择、分段组合、顺序、进/出路由等控制,将信息从一个网络设备传送到另一个网络设备。 -
数据链路层(Data Link Layer)
提供介质访问和链路管理。 接收来自物理层的位流形式的数据,封装成帧,传送到网络层;将网络层的数据帧,拆装为位流形式的数据转发到物理层;负责建立和管理节点间的链路,通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。 -
物理层(Physical Layer)
管理通信设备和网络媒体之间的互联互通。 传输介质为数据链路层提供物理连接,实现比特流的透明传输。实现相邻计算机节点之间比特流的透明传送,屏蔽具体传输介质和物理设备的差异。
严格意义上只存在七层结构和四层结构,TCP/IP实际上是四层结构,包括应用层,传输层,网际层和网络接口层,我们常说的五层结构只具有教学意义,只是为了能讲清楚其中原理,实际上现实中并不存在五层结构。
✍四、协议的层级之间是如何配合工作的
简单来说,就是上层协议调用下层协议,下层协议服务于上层协议,也就是一个 封装与分用 的过程。
我们举例来说明这个过程究竟是怎样的
以A在抖音上向B发私信这个过程解释封装和分用的流程
- 应用层
A于5月8日下午4:00抖音上向B发送“你好,可以加个微信吗?",
抖音里会有一个应用层协议,会将要传输的 发送人、接受人、发送信息、发送时间等协议规定需求组织成一个字符串 ,注意:网络上传输的数据本质上是(二进制的)字符串(二进制的bit流)
A的账号ID为1685 B的账号ID为3694
"你好,可以加个微信吗?"转换成二进制为11100100 10111101 10100000 11100101 10100101 10111101 11101111 10111100 10001100 11100101 10001111 10101111 11100100 10111011 10100101 11100101 10001010 10100000 11100100 10111000 10101010 11100101 10111110 10101110 11100100 10111111 10100001 11100101 10010000 10010111 00001010
本身发送的是一个结构化的数据(包含很对属性,很多字段),但在计算机中传输就要转换成二进制序列,这个过程就叫做序列化
而由二进制序列转换成结构化的数据,这个过程叫做反序列化
以上应用层协议并非真实的,只是为了方便介绍举例而已,切勿当真!!!
不同应用的应用层协议不相同!!!
在应用层中,会将信息打包成”应用层数据包“,调用api传递给下层。
- 传输层
已经有了”应用层数据包“,通过调用应用层(操作系统内核)的api(Socket api)将数据传递给应用层 (进入操作系统内核)
在传输层拿到这个数据包后,会对这个数据包进行进一步的封装,构造成”传输层数据包“。
在传输层中,有两个经典的协议:TCP、UDP
假设此处是UDP协议
就会在“应用层数据包”前增加一个“报头”
构造好“传输层数据包”之后,再次调用api来将“传输层数据包”交给网络层。
这个过程同样是系统已经封装好api供我们使用,不需要关注其中的细节。 - 网络层
网络层中典型的协议是IP协议
注意:在对数据包进行封装时,他们并不关心数据包中是什么内容,只是简单的封装机器,添加好各自负责的报头,就继续调用下层api将其转递给下层
此时拥有了”网络层数据包“调用api将其传给”数据链路层“
4. 数据链路层
”数据链路层“在拿到数据包后,继续对数据包进行封装
”数据链路层“中一个经典的协议是 以太网
上述数据此时已经进入到网卡驱动中了,接下来就要真正的发送出去了
- 物理层
以太网数据帧,本质上还是“二进制序列”
硬件设备要将 二进制数据转换成 光信号\电信号\电磁波、才会真正发送
上述层层的增加数据报头的操作就是封装
上述这些数据,并非是由A直接到B,而是先到达和A连接的交换机\路由器。
数据经过交换机\路由器一系列的转换后,最终才会到达B
在数据经过转换机\路由器后,数据又会经由一系列的转换(所谓的去报头)最终到达B
这个过程就是所谓的分用
分用
-
物理层
物理层收到一系列光信号,把这些信号转换成0101的二进制数据,将这些二进制数据交给数据链路层
-
数据链路层
数据链路层通过以太网协议,对数据进行解析(这个过程就是针对报头的内容进行解析,例如拿到发送方和接收方的信息,),解析后拿到载荷,将载荷交给网络层
-
网络层
IP协议拿到了IP数据包,按照协议的格式,对数据包再进一步的解析,拿到载荷再传给下一层
-
传输层
UDP拿到UDP数据包,再对数据包中的内容进一步解析,解析出一些信息(要交给哪个端口号)
-
应用层
qq拿到应用层数据包
按照qq内部的协议,来进行解析,拿到结构化数据(也就是反序化)
最后将这些结构化数据显示到界面上
这时B就收到了来自A的”你好,可以加个微信吗?“
自此爱情的齿轮就开转动!
以上就是本文所有内容,如果对你有帮助的话,点赞收藏支持一下吧!💞💞💞