网络中的一些基本概念

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 发的消息。

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

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

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

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

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

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

相关推荐
Jtti30 分钟前
Jtti:如何知晓服务器的压力上限?具体的步骤和方法
运维·服务器
命里有定数30 分钟前
Ubuntu问题 - 显示ubuntu服务器上可用磁盘空间 一条命令df -h
服务器·ubuntu·数据集
《源码好优多》31 分钟前
基于Java Springboot出租车管理网站
java·开发语言·spring boot
TPBoreas38 分钟前
当你项目服务器磁盘报警
运维·服务器
Labiod3 小时前
PlantUML 安装
linux·运维·服务器
小流年 °4 小时前
抓包工具Wireshark
网络·测试工具·wireshark
是理不是里_4 小时前
常见的网络协议汇总(涵盖了不同的网络层次)
网络·网络协议
·云扬·5 小时前
Java IO 与 BIO、NIO、AIO 详解
java·开发语言·笔记·学习·nio·1024程序员节
求积分不加C5 小时前
Spring Boot中使用AOP和反射机制设计一个的幂等注解(两种持久化模式),简单易懂教程
java·spring boot·后端
枫叶_v5 小时前
【SpringBoot】26 实体映射工具(MapStruct)
java·spring boot·后端