网络中的一些基本概念

IP 地址与端口号

在互联网中,当主机 A 要与主机 B 进行通信的时候,主机 A 该如何在茫茫的互联网之中找到主机 B ?这就要通过 IP 地址来找到主机 B,IP 地址是用于标识网络上的主机或者其他的网络设备,简单来说 IP 地址就是一台主机或者其他网络设备在网络上的地址。有了 IP 地址,主机 A 就可以通过 主机 B 的 IP 地址来找到主机 B ,从而使得主机 A 与主机 B 的通信。

IP地址是通过一个 32 位的数字来表示的,由于 32 位的数字太长了不利于我们阅读,所以使用 '点分十进制' 的方式来表示 IP 地址。

端口号则是标识一台计算机中的进程,简单来说进程就是一台计算机上正在运行的程序,在一台主机上使用的程序有很多,当一台主机收到数据的时候就通过端口号交给对应的程序,例如:主机 A 使用 QQ 给 主机 B 发送消息,主机 A 要想完成这段通信需要知道主机 B 的IP地址,当知道了 主机 B 的 IP 地址后,主机 A 就能发送数据给主机 B ,当数据到达主机 B 的时候,主机 B 该如何知道这个数据要交给电脑中的哪个程序? 这时就需要端口号来找到对应的程序,假设 在主机 B 上 QQ 的端口号为 8888,这时有了 8888这个端口号 主机 B 就知道这个数据要交给 QQ。
端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定⼀个端口号,来发送及接收网络数据。

协议与协议分层

假设主机 A 和主机 B 要进行网络通信,主机 A 给主机 B 发送了一些数据,当主机 B 收到了这些数据之后如何读懂这些数据? 这时就需要通信双方来约定一套 "规则",主机 A 根据这套 " 规则" 来发送数据,主机 B 根据这套 "规则" 来解析数据,这样主机 B 就能理解这些数据了。这套 "规则" 就是协议,协议就是约定通信双方数据交互的 "规则"

网络通信是一件非常复杂的事情,要处理很多通信间的问题,如果只使用一个协议来约定网络中如何通信,则这个协议会非常复杂,所以把这一个大的协议拆分成多个小的协议,每个协议解决一类问题,再让这些协议之间互相协作。协议分层就是把功能类似的协议放在同一层,并规定协议之间不能随意交互,只有相邻层之间才能进行交互

在网络协议分层中,具体是怎么分的:

1.OSI七层模型:

  1. TCP/IP五层模型:

封装和分用

举一个简单的例子来解释封装和分用:
假设现在 A 通过 QQ 给 B 发送了一条消息 '在干嘛' 。

当 A 在 QQ 输入消息点击发送后, QQ 这个程序就会根据这里的应用层协议来构造一个 "应用层数据包" 。

构造好这个 "应用层数据包" 后 ,这时数据被传到传输层,这个 "应用层数据包" 就会在传输层被封装为 "传输层数据包" (在 "应用层数据包" 的基础上加上一个传输层的数据首部)。

同理,构造好这个 "传输层数据包" 后 ,这时数据被传到网络层,这个 "传输层数据包" 就会在网络层被封装为 "网络层数据包" (在 "传输层数据包" 的基础上加上一个网络层的数据首部)。

到了数据链路层后,这个 "数据包"会再次被封装上以太网帧头,和以太网帧尾 。

到了物理层后,网卡就会把上述 "数据包" 装换成 光信号/电信号/电磁波...来完成真正的数据传输。

在层与层之间传输的 "数据包" 在每层协议都要加上⼀个数据首部(header),称为封装。这些首部中就包含了⼀些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。

当这个 "数据包" 通过网络传输到达 B 这里的时候, B 的电脑的网卡就接收这个数据,然后将这个数据上传给数据链路层,数据链路层就会对这个 "数据包" 进行解析,取出报头和载荷分析这个数据是丢弃/上传/转发.... (取出报头和载荷的过程就叫 分用 ),同理数据上传到网络层也会进行分用(取下IP报头 和 载荷) 进行分析,一直到应用层将数据解析出来 ,这时 B 就能看到 A 发的消息。

封装 和 分用就类似于 打包快递 和 拆快递 ,在数据转发中涉及到的交换机/路由器也会涉及到封装和分用。

客户端/服务器****请求/响应

在常见的网络数据传输场景下,把提供服务 的一方进程,称为服务端 ,可以提供对外服务。把获取服务 的一方进程,称为客户端

请求客户端向服务器发送的信息 ,用于请求某种服务或资源。
响应服务器对客户端请求的反馈,包含请求处理的结果。

举个例子:假设我使用浏览器现在从百度上找图片。

我首先会在我电脑的浏览器上搜索要找图片的相关信息,例如我要找的图片是 "火影忍者" 相关的,当我在浏览器上输入 "火影忍者" 后,浏览器会向百度的服务器发送****请求,请求我搜索的照片资源,百度的服务器收请求后会处理请求,并把处理好的请求响应给浏览器,这时浏览器就会收到百度服务器的响应(这些图片资源),就可以把这些图片展示出来,这时我使用的这个浏览器就是一个客户端百度就是一个服务器。

相关推荐
野生风长13 小时前
从零开始的c语言:指针高级应用(下)(回调函数,qsort函数模拟实现, strlen和sizeof)
java·c语言·开发语言·c++·算法
g***B73813 小时前
Java 服务端架构的本质:从单体到云原生的演进与思维模式变革
java·云原生·架构
网硕互联的小客服13 小时前
cdnfly节点到源服务器配置内网IP不生效怎么办
运维·服务器
d111111111d13 小时前
嵌入式面试问题:STM32中指针和数组的本质区别是什么,常用数组存储什么数据?
java·笔记·stm32·单片机·嵌入式硬件·学习
yivifu13 小时前
Excel中Lookup函数实现临界点归入下一个等级的方法
java·前端·excel
倔强的石头10613 小时前
Linux 进程深度解析(三):调度算法、优先级调整与进程资源回收(wait与waitpid)
linux·服务器·算法
大佐不会说日语~13 小时前
Spring AI Alibaba 对话记忆丢失问题:Redis 缓存过期后如何恢复 AI 上下文
java·人工智能·spring boot·redis·spring·缓存
古城小栈13 小时前
Spring AI 1.1:快速接入主流 LLM,实现智能问答与文本生成
java·人工智能·spring boot·spring
计算机学姐13 小时前
基于SSM的宠物领养管理系统【2026最新】
java·vue.js·后端·java-ee·tomcat·mybatis·宠物
hh.h.13 小时前
无网络也能用!Flutter+开源鸿蒙构建轻量级应急通信系统
网络·flutter·开源