文章目录
- 前言
- 一、网络发展各阶段
- 二、网络通信的三大要素
- 1.IP地址
- 2.端口号
- 3.网络协议
- 三、TCP/IP五层网络模型
- 各层级的用处
- 网络设备所在分层
- 四、封装和分用
- 封装
- 分用
- 网络传输的实际情况
- 总结
前言
本人是一个刚刚上路的IT新兵,菜鸟!分享一点自己的见解,如果有错误的地方欢迎各位大佬莅临指导,如果这篇文章可以帮助到你,劳请大家点赞转发支持一下!
从本篇文章开始就要分享网络编程的内容了,越发的感受到了编程的魅力,鸡汤来喽!!
一、网络发展各阶段
1️⃣单机阶段:计算机跟计算机之间是不互通的。即电脑A中的资源,电脑B是无法直接获取。只能通过外部设备进行拷贝。
2️⃣局域网阶段:局域网Local Area Network,简称LAN,(Local 即标识了局域网是本地,局部组建的一种私有网络)局域网内的主机等设备之间能方便的进行网络通信,又称为内网;两个局域网之间在没有连接的情况下,是无法进行通信的。
3️⃣广域网阶段:广域网,即 Wide Area Network,简称WAN。通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部的局域网都属于其子网。
4️⃣移动互联网阶段:移动互联网,就是将移动通信和互联网二者结合起来,指互联网的技术、平台、商业模式和应用与移动通信技术结合并实践的活动的总称。
二、网络通信的三大要素
1.IP地址
IP地址就类似于🪪身份证上的家庭地址,
IP地址描述了该设备在互联网上的位置 。😭
简单来讲IP地址就是用来定位设备在网络上的位置,从而完成通信。
另一台设备将信息送到了这个位置上,那么这个位置上的设备就可以获得该信息📞。
2.端口号
在一个地址上,可能同时住了几个人。因此当信息送达后,需要通过姓名或电话来识别接收的人是谁。
端口号可以标识主机中发送数据、接收数据的进程。端口号是用来定位主机中的进程的 。(主机上的每一个进程都有一个端口号,同一主机上的不同进程的端口号必须不同)
一台主机上可能运行多个进程,因此当信息送达时,就是通过端口号来识别是哪个进程要接收信息,而后将信息送达。
3.网络协议
网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则。
最终体现为在网络上传输的数据包的格式
网络协议的作用:
网络设备之间的传输媒介是光信号和电信号。通过 “频率” 和 “强弱” 来表示 0 和 1 这样的信息。网络传输的各种信息,其实本质都是传输的一串二进制数字,要想将这一串数字变成想要传递的信息,就需要双方约定好数据格式。
网络协议就是用来规定传输数据的格式 。
现如今的网络设备越来越多,网络环境非常复杂,因此网络协议也非常复杂。
分层的原因
因此就将复杂的网络协议拆分成 多个协议 。
其中一些小协议的 作用 / 定位类似 。
因此就针对这些小协议进行 “分类” ,同时再针对这些不同的类进行 “分层” 。
分层的作用
分层最大的好处,类似于面向接口编程: 定义好两层间的接口规范,让双方遵循这个规范来对接 。
下层为上层提供使用接口,下层即为接口的实现类(提供方),
上层使用下层提供的接口,上层即为接口使用类(使用方),
上下层互不关心对方的细节,从而更有利于维护与扩展。
(上层不关心下层如何实现的接口,下层不关心上层怎么使用接口)
上层只能够调用相邻的下层,严禁跨层调用 。
而实际应用当中, TCP/IP五层网络模型 使用的最为广泛。
三、TCP/IP五层网络模型
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
各层级的用处
应用层对应咱们程序员写的应用程序,而下面四层系统内核已经封装好了,因此我们应更加关注应用层,而传输层被应用层调用,所以也应了解传输层
1️⃣ 应用层:负责应用程序间的沟通。 该层的工作内容为:得到数据以后,如何处理数据。
2️⃣传输层:负责两台主机之间的数据传输。
主要为TCP协议 / UDP协议
该层的工作内容为:保证数据可靠的从源主机传输到目标主机。
3️⃣网络层:决定数据在网络中的传输路径,数据路由(决定数据在网络的路径)。
主要为IP协议
该层的工作内容为:负责地址管理和路由选择。如在IP协议中,通过IP地址来标识一台主机,并通过路由表 的方式规划出两台主机之间的数据传输的线路。
4️⃣数据链路层:负责设备之间的数据帧的传送和识别。
主要为Ethernet以太网协议
该层的工作内容为:负责网络上两个相邻节点(通过网线/无线/光纤直接连接的设备)之间的传输。
5️⃣物理层:负责光/电信号的传递方式。
该层的工作内容为:网络通信的基础设施 网线/光纤/网络接口等硬件设备被设计时所遵守的规范协议。
网络设备所在分层
对于 一台主机 , 它的操作系统内核实现了从传输层到物理层的内容 ,也即是TCP/IP五层模型的下四层;
对于 一般的路由器 , 它实现了从网络层到物理层 ,也即是TCP/IP五层模型的下三层;
对于 一般的交换机 , 它实现了从数据链路层到物理层 ,也即是TCP/IP五层模型的下两层;
对于 集线器 , 它只实现了物理层 ;
四、封装和分用
在协议分层的背景下,数据通过 封装 , 分用 来进行网络传输。
如何封装
发送方发送数据,会把数据从应用层依次向下,交给对应的层次的协议,进行封装。
如何分用
接收方接收数据,会把数据从物理层依次向上,交给对应的层次的协议,进行解析。
概念先知
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame),因此 数据包 == 数据报 == 数据段 == 数据帧。
经典数据报都是通过 报头 + 载荷的结构构成。
封装(Encapsulation):应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header)。
首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。
分用:数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理。
下面以QQ发送消息为案例讲解一下 封装 与 分用 。
忽略中间网络设备的转发过程,只将发送方发送时的封装过程与接收方接收时的分用过程
封装
发送方,层层封装,类似包装快递
1️⃣应用层
应用层(QQ这个程序)拿到你要发送的消息,并将消息封装成 应用层数据包 ,应用层调用传输层提供的api来处理这个数据包。
其中数据包的字段是由程序员手动规定的
2️⃣传输层
以TCP协议举例
此时传输层拿到应用层传输过来的 整个应用层数据包作为载荷再添加一个TCP报头 。然后调用 网络层提供的api 来处理这个数据报。
TCP报头中最重要的属性就是, 源端口号 (发送程序)和 目的端口号 (接收程序)
3️⃣网络层
此时网络层拿到传输层传输过来的 整个传输层数据报作为载荷再添加一个IP协议报头 。然后调用 数据链路层提供的api 来处理这个数据报。
IP协议报头中的最重要属性是 源IP (发送方主机的网络地址)与 目的IP (接收方主机的网络地址)
4️⃣数据链路层
此时数据链路层拿到网络层传输过来的 整个网络层数据报作为载荷再添加一个以太网数据帧头 / 帧尾 。然后调用 物理层提供的api 来处理这个数据帧。
以太网数据帧分为两种:封装以太网帧头 / 封装以太网帧尾
以太网帧头/尾中的最重要属性为与目的。 源mac地址 和 目的mac地址
mac地址也叫做物理地址,是描述一个主机在网络世界上的地址。
它的功能与IP地址很相似,但用途不同。
IP地址用来进行网络层的路径规划。
mac地址用来描述 数据链路层即将进行传输的两个相邻节点。
5️⃣物理层
物理层把上述的 一串0,1的二进制数据 转换成 光 /电 /电磁波信号 进行传输。
- 注意:
上述的所有数据报,以及下面将要讲到的,数据包,数据帧本质上都是字符串,而加上各种报头也都是进行字符串的拼接。
分用
接收方,层层分用,类似拆快递
1️⃣物理层
网卡收到 二进制的光 /电 /电磁波信号等二进制数据 ,然后进行解析,还原成 0101 这样的二进制序列 交给数据链路层。
2️⃣数据链路层
根据传输过来的方式来交给对应的协议处理
数据链路层拿到数据报,交给以太网协议来进行解析,(如果数据是从以太网线传输过来的那么就会交给以太网协议来处理)。
数据帧头 /尾中会有一个消息类型,根据消息类型就可以知道用网络层的哪个协议了
然后数据链路层去掉数据帧头 /数据帧尾,取出载荷再交给网络层。
3️⃣网络层
IP数据报头中有一个字段,标识传输层用的哪个协议
网络层拿到数据报,根据相应的协议来分析数据,然后去掉报头,同时在做一些其他工作。
然后取出载荷交给传输层
4️⃣传输层
每个要接收网络数据的程序都要关联上一个端口号
借助TCP报头中的重要属性,端口号来区分具体的应用程序。
此处是由TCP协议解析,仍是去掉TCP报头,取出载荷交给应用层
5️⃣应用层
交给对应的程序来解析应用层数据包,取出并使用相关数据。
此处是交给QQ这个程序来解析应用层数据包。
网络传输的实际情况
真是的网络环境十分复杂,数据的传输中间可能要经历很多节点 (交换机,路由器等设备) 进行转发,才能发送到目的地。
数据从发送方主机出发,一路可能会遇到交换机路由器等设备,最后传输到目的主机。
发送方主机:将"数据" 从应用层封装到物理层,得到光或其他信号 ,然后这个信号可能会 顺着网线到达交换机或者路由器 。
信号如果到达交换机:交换机会进行分用, 从物理层分用到数据链路层,判断目的mac是否正确,然后进行重新封装到物理层 , 重新封装时封装到数据链路层时,会调整源mac与目的mac 。然后继续进行转发。
信号如果到达路由器:路由器也会进行分用, 从物理层分用到网络层,根据目的IP进行下一阶段的寻路操作,然后重新封装到物理层 ,继续进行转发。 重新封装时封装到数据链路层时,也会调整源mac与目的mac
接收方主机: 一路从物理层分用到应用层 ,然后相应进程使用数据。
总结
以上就是今天要讲的内容,本文像大家介绍了网络通信的三大要素,以及常用的TCP/IP协议,以及传输过程中各层间的封装与分用。
开始网络编程的学习了,以后的内容只会越来越复杂了,大家加油啊!!!
路漫漫不止修身,也养性。