网络协议入门:TCP/IP五层模型如何实现全球数据传输?
🔍 开发者资源导航 🔍 |
---|
🏷️ 博客主页: 个人主页 |
📚 专栏订阅: JavaEE全栈专栏 |
内容:
- 网络初识
- 什么是网络?
- 关键概念
- 认识协议
- 五元组
- 协议分层
- OSI七层模型
- TCP/IP五层(四层)协议模型
- 各个设备涉及的层次
- 通信基本流程
- 传出数据
- 知识补充
- 传入数据
网络初识
什么是网络?
你有没有想过,我们每天依赖的互联网,最初是如何诞生的?
从两个设备间最简单的电流信号,到办公室里的局域网,再到如今覆盖全球的互联网——这条连接之路,远比我们想象的更精彩。
最初,工程师们只是想让两台计算机"对话",用简单的协议和物理线路传输数据;后来,随着设备增多,局域网(LAN)诞生了,让一个房间、一栋楼里的机器能彼此通信;而今天,TCP/IP协议族像一种"世界语",让地球任意角落的设备都能瞬间连接。
关键概念
路由器:连接各个网络节点的中转器。
交换机:一般的路由器只有两三个插口,交换机是路由器的扩展器,可以增加路由器的接口数量,相当于“插排”的作用。
ip地址:在网络中一台设备的所在位置,这个地址并不固定。
端口号:一个设备中可能有多个程序同时使用网络,端口号的作用就是用来区分谁是谁。
认识协议
网络协议是通信双方对于发送/接受数据格式的约定,我的数据怎么发,你就怎么来解析,只有双方同时遵守同一个协议,通信才是有意义的。
通信就好像是两个人在沟通,我只会汉语,你只会阿拉伯语,我们双方通过自己的语言解析收到的是一团乱码,彼此之间谁也听不懂谁在说什么,而如果我们约定使用同一个语言,我们直接的交流才是有意义的。
五元组
进行一次网络通信,涉及到五个非常关键的信息:源IP、 源端口、目的IP、目的端口、协议类型。
网络通过信息知道此次通信中:信息从哪里来,要到哪里去,用的什么格式进行传输。
协议分层
一个大的协议往往需要包含很多的内容,为了管理起来方便,通常会将一个大的协议拆成功能单一的小协议来进行管理。而再将这些协议按照功能划分,就可以得到分层的效果。
分层之后,只有两个相邻的层次之间可以进行交互,上次协议可以调用下层协议,下层协议为上层协议提供服务,协议之间不能夸层交互。
优点:
封装:上层协议不需要了解下层协议的内容,用到下一层时只需要调用接口即可。
解耦合:如果某一层需要替换或者修改,对其他层影响较小
OSI七层模型
OSI:即Open System Interconnection,开放系统互连。
OSI将网络协议从逻辑上分为了七层,但是因为这套分层体系太复杂了,因此只存在于教科书上。
TCP/IP五层(四层)协议模型
TCP/IP五层(四层)协议模型是上一个模型的简化版,实际中使用的的也较多。
在协议模型中越接近硬件部分、系统内核部分就越底层,越软件越高层。
按照从低到高该模型分为:
物理层:
物理层规定了网络通信中的一些硬件设备符合的要求,例如:网线、wifi、光纤等。
数据链路层:
完成两个相邻的设备之间如何进行通信,通过网线把设备连到路由器/交换机上。
先考虑一小步,把两个设备连起来,数据链路层是基于物理层实现的。
网络层:
两个任意的设备如何进行通信,这两个设备可能隔着很多个交换机和路由器。
网络层基于数据链路层实现。
传输层:
任意两个设备之间的通信,不考虑中间过程,只看起点和终点。
应用层:
拿到包裹也就是传输信号后该怎么使用。
在应用时物理层我们考虑的⽐较少。因此很多时候会把数据链路层和物理层合在一起,也可以称为 TCP/IP四层模型。
各个设备涉及的层次
主机:物理层->应用层 通过应用程序满足通信要求。
路由器:物理层->网络层 组建局域网进行网络数据包的转发。
交换机:物理层->数据链路层 对路由器接口的扩展,不需要考虑组网的问题。
通信基本流程
传出数据
1.应用层
在获取用户的数据后,首先根据应用层的协议构造出一个应用层的数据包,应用层的协议往往是由程序员自己定义的,而这个数据也往往是结构化的数据,例如json格式的数据。
在发送和接受数据是要经过两个过程:
序列化: 把结构化的数据转换成二进制的比特流。
反序列化: 把二进制的比特流转换成结构化数据。
这么做的目的是为了数据可以进行传输,毕竟现在的数据传输都是二进制的嘛~
2.传输层
应用层将数据传递给传输层,传输层拿到数据之后,构造出“传输层数据包”,传输层的协议主要是TCP以及UDP。
这里假设我们使用的是TCP协议~
TCP数据包 = TCP报头 + TCP载荷。
tcp报头包含源端口/目的端口以及其他很多信息,并且记录应用层使用的协议,而TCP载荷则是应用层传给它的数据包。
3.网络层
传输层传给网络层后,网络层接着对数据包进行处理,网络层使用的最主要的协议是IP协议,处理方式与上述类似,继续增添标签。
IP数据包 = IP报头 + IP载荷。
ip报头包含源ip/目的ip以及其他很多信息,并且记录传输层用的什么协议,IP载荷则是整个传输层的数据包。
4.数据链路层
数据链路层在网络层的基础上继续加工,该层主要的协议是“以太网”协议,和之前不同的是它不仅加了一个头还加了一个尾巴。
以太网数据帧 = 帧头 + 载荷 + 帧尾。
每个协议并不会关心他们的载荷,只需要添加标签即可,这也是协议分层的好处之一。
5.物理层
网卡将上述的二进制数据以各种信号的形式传播出去。
上述过程虽然复杂,但是对于计算机来说是一个极快的过程。
知识补充
上述的关键性名词并不严谨。
TCP数据使用的是段,UDP使用的是报,IP使用的是包,而以太网使用的是帧。
工作中并不会明确区分这些概念,混用即可。
传入数据
如果说传出数据是从上到下的一个封装过程,那么传入数据就是一个封装的逆向过程。
1.物理层
数据被传入到网卡,解析为二进制数据,并将其传入到数据链路层。
2.数据链路层
根据以太网协议进行解析,将帧头和帧尾取出,将剩下的载荷往上传递给网络层。
3.网络层
按照IP协议进行解析,取出IP报头,剩下的继续传递给传输层。
4.传输层
按照TCP协议进行解析,取出TCP报头,剩下的继续传递给应用层。
5.应用层
解析应用层数据拿到关键信息,将其展示到界面上。
上述提到过每一层的报头会记录其上一层使用的协议类型,因此拿到数据时可以知道用什么协议进行解析。
感谢各位的观看Thanks♪(・ω・)ノ,如果觉得满意的话留个关注再走吧。