网络通信中的基本概念

本文涉及的产品
数据传输服务 DTS,数据迁移 small 3个月
推荐场景:
MySQL数据库上云
数据传输服务 DTS,数据同步 1个月
简介: 网络通信中的基本概念

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:


127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1

本机环回主要用于本机到本机的网络通信 (系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。


IP地址解决了网络通信时,定位网络主机的问题,但是还存在一个问题,传输到目的主机后,由哪个进程(应用程序)来接收这个数据呢?这就需要端口号来标识。


端口号


概念


在网络通信中,IP地址用于标识主机网络地址,端口号可以标识主机中发送数据、接收数据的进程。

简单说:端口号用于定位主机中的进程。类似发送快递时,不光需要指定收货地址(IP地址),还需要指定收货人(端口号)


格式


端口号是0~65535范围的数字,在网络通信中,进程可以通过绑定一个端口号,来发送及接收网络数据。

注意:


两个不同的进程,不能绑定同一个端口号,但一个进程可以绑定多个端口号

(就好比快递一般填写一个收件人, 不填两个)


一个进程启动后,系统会随机分配一个端口.(启动端口)

在程序代码中,进行网络编程时,需要绑定端口号(收发数据的端口)来发送、接收数据。


协议


为什么要有协议


有了IP地址和端口号,就可以定位到网络中唯一的一个进程,但还存在一个问题,网络通信是基于二进制 0/1 数据来传输,如何告诉对方发送的数据是什么样的呢?

网络通信传输的数据类型可能有多种:图片,视频,文本等。

同一个类型的数据,格式可能也不同,如 :

发送一个文本字符串“你好!”, 如何标识发送的数据是文本类型,及文本的编码格式呢?

基于网络数据传输,需要使用协议来规定双方的数据格式。


简单来说, 协议就是规则, 就像我们聊天用到的语法什么的, 正是有了这些规则, 我们才能更清楚的表达自己的意思, 别人也能更明白.


概念


协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。通常由三要素组成:


1.语法:即数据与控制信息的结构或格式;

类似打电话时,双方要使用同样的语言:普通话


2.语义:即需要发出何种控制信息,完成何种动作以及做出何种响应;

语义主要用来说明通信双方应当怎么做。用于协调与差错处理的控制信息。

类似打电话时,说话的内容, 双方基于内容来进行响应.


3.时序,即事件实现顺序的详细说明。

时序定义了何时进行通信,先讲什么,后讲什么,讲话的速度等。比如是采用同步传输还是异步传输。


协议最终体现为在网络上传输的数据包的格式.


协议分层


为什么要进行分层


在网络通信中, 需要约定的协议是非常复杂的, 面对复杂环境, 就需要复杂协议, 但是协议复杂了也不好, 那如何将复杂协议便简单呢, 可以将一个复杂协议拆分为多个小协议.

我们可以对这些小协议进行 “分类”, 同时对这些不同类别进行分层.

我们约定 : 上层协议调用下层协议, 下层协议给上层协议提供支持, 不能跨层调用.


分层的好处


像下面就是将协议分为了两层 :


f1e8b150526d4d49a52c83e0291c9041.png

分层后就可以比较容易的针对某一层协议进行替换.

总结 :


  1. 分层之后就可以做到层次之间, 耦合度较低.

上层协议不必了解下层的细节, 下层也不必要了解上层的细节.

  1. 方便对某一层协议进行替换.


具体如何分层


有两大分层模型 :


  1. OSI 七层网络模型, 该模型复杂且不实用, 只存在于教科书中, 就不了解了.
  2. TCP / IP 五层网络模型, 这是当下最广泛使用的网络模型.


TCP / IP 五层网络模型


TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。

TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。


哪五层呢? 它们分别是 应用层, 传输层, 网络层, 数据链路层, 物理层.

下面详细介绍下这五层的主要作用都有哪些.


1.应用层 :

负责应用程序间沟通,如简单电子邮件传输、文件传输协议、网络远程访问协议等.

网络编程主要就是针对应用层.

简单理解 : 应用层主要关注传输的数据怎么用.


2.传输层 :

负责两台主机之间的数据传输。如传输控制协议,能够确保数据可靠的从源主机发送到目标主机。

简单理解 : 传输层不关注中间路径, 只关注起点和终点.


3.网络层 :

负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路。路由器工作在网路层。

简单理解 : 网络层主要负责两个较远节点间的路径规划.


4.数据链路层 :

负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步、冲突检测、数据差错校验等工作。

简单理解 : 数据链路层主要关注两个相邻节点间的传输.(就是将数据通过什么形式传输, 比如通过网线/光纤/无线传输. )


5.物理层 :

负责光/电信号的传递方式。比如现在以太网通用的网线、早期以太网采用的的同轴电缆、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。

简单理解 : 物理层就是网络通信的基础设施, 比如 : 网线, 光纤, 网络接口等, 它们相当于网络上的高速公路.

这样分层之后, 可以让程序员在同一时刻只关注一个子问题, 大大提升了效率.


数据的封装和分用


有了协议分层后, 数据是如何通过网络传输的呢?

这里就要提到封装和分用了.


封装 : 发送方发送数据时, 要把数据从上到下, 依次交给对应层次的协议进行封装.

分用 : 接收方接收到数据时, 要把数据从下到上, 依次交给对应层次的协议进行解析.


就以QQ发送消息为例吧, 比如, 我给张三发个消息 : 兄弟, 帮我拿个快递.


首先这里的数据要进行封装, 是从上到下进行的, 分这几步 :


1.应用层(qq应用程序)拿到上述基本数据, 进行封装, 封装成应用层数据包.(本质上就是字符串的拼接)

1961737633bf406686db9009c8c1848d.png

2.传输层要调用传输层提供的 api 来处理这个数据. 传输层有很多协议, 最典型的是 TCP 和 UCP, 这里就以 UDP 为例, UDP 针对上述数据包在进行封装(加个数据报头).

加个报头是为了再贴一层标签, 从而在标签上填写必要的属性, 在传输层最重要的属性就是源端口和目的端口了.

bad60e5ec1d5427e95d745731e316814.png

UDP 数据报已经有了, 接下来就要将这个数据报交给网络层的协议了.


3.网络层, 网络层最常见的协议就是 IP 协议了. 上述 UDP 数据报到达网络层还需要进一步进行封装, 添加上 IP 协议报头.

cf94fa5aacd94d9ebc3fe07e1220d687.png

源 IP 和目的 IP 就描述了这次传输中, 最初的起点, 和最终的终点.


4.数据链路层, 最典型的协议叫做以太网, 在这里需要加上以太网帧头和帧尾.

c16d878e022c4083bd51f6b48b3645d1.png


mac 地址也叫做物理地址, 也是描述一个主机在网络中的位置, 它的功能和 IP 很相似, 但有所不同.

IP 是用来进行网络层的路径规划, mac 是用来描述数据链路层的两个即将进行传输的相邻节点.


5.物理层要把上述 0101 的二进制转换为信号(光信号/电信号/电磁波信号)进行传输.


当接收方收到数据时, 就会对数据进行分用, 如果将上述操作比喻为包装快递, 那分用就是拆快递了.

封装快递是从里面一层一层的往外面封装, 那拆快递就是从外面一层一层往里面拆.


1.物理层, 网卡收到高低电平二进制数据, 就对信号进行解析, 还原成 0101 这样的二进制序列.


2.数据链路层, 将上述还原出的数据当成一个以太网数据帧(根据传输的方式不同, 使用不同的协议. 这里使用以太网线接收数据, 就交给以太网协议来处理).

将会帧头帧尾去掉, 再将载荷交给上一层(网络层).

af6a0a75b0e146fcb83203fa313d9948.png

3.网络层, 此时就由网络层的 IP 协议进行解析数据报, 也就是去掉 IP 报头, 同时做一些其他工作.

最重要的还是取出载荷, 交给更上层的传输层协议.

4ccf25ca0a9447a99897216608860ceb.png

4.传输层, 由 UDP 来解析处理, 去掉报头, 取出载荷, 把数据传给应用层.

962b6f5febe0402da4e53e6eab459d83.png

5.应用层, 由QQ这个程序解析得到的数据报, 取出相应字段放到程序对应的界面中, 也就是张三收到了我发送的消息.


客户端和服务器


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

客户端:获取服务的一方进程,称为客户端。


针对客户端提出的请求, 服务端作出相应响应.


常见的客户端服务端模型


  1. 客户端先发送请求到服务端
  2. 服务端根据请求数据,执行相应的业务处理
  3. 服务端返回响应:发送业务处理结果
  4. 客户端根据响应数据,展示处理结果(展示获取的资源,或提示保存资源的处理结果)

相关实践学习
RocketMQ一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
相关文章
|
6天前
|
机器学习/深度学习 计算机视觉
卷积神经网络中池化层的概念介绍
卷积神经网络中池化层的概念介绍
28 0
|
6天前
|
存储 分布式计算 监控
Hadoop【基础知识 01+02】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
【4月更文挑战第3天】【分布式文件系统HDFS设计原理+特点+存储原理】(部分图片来源于网络)【分布式计算框架MapReduce核心概念+编程模型+combiner&partitioner+词频统计案例解析与进阶+作业的生命周期】(图片来源于网络)
142 2
|
5天前
|
机器学习/深度学习 PyTorch 算法框架/工具
神经网络基本概念以及Pytorch实现,多线程编程面试题
神经网络基本概念以及Pytorch实现,多线程编程面试题
|
6天前
|
机器学习/深度学习 人工智能 开发者
什么是网络游戏里的人机概念
什么是网络游戏里的人机概念
9 0
|
6天前
|
存储 算法 网络协议
【探索Linux】P.26(网络编程套接字基本概念—— socket编程接口 | socket编程接口相关函数详细介绍 )
【探索Linux】P.26(网络编程套接字基本概念—— socket编程接口 | socket编程接口相关函数详细介绍 )
14 0
|
6天前
|
存储 网络协议 Unix
【探索Linux】P.25(网络编程套接字基本概念 —— 预备知识)
【探索Linux】P.25(网络编程套接字基本概念 —— 预备知识)
9 0
|
6天前
|
运维 网络协议 安全
第一节-网络的基本概念
第一节-网络的基本概念
14 0
|
6天前
|
机器学习/深度学习 人工智能 编解码
【AI 生成式】生成对抗网络 (GAN) 的概念
【5月更文挑战第4天】【AI 生成式】生成对抗网络 (GAN) 的概念
【AI 生成式】生成对抗网络 (GAN) 的概念
|
6天前
|
机器学习/深度学习 人工智能 自然语言处理
【AI 初识】递归神经网络 (RNN) 概念
【5月更文挑战第2天】【AI 初识】递归神经网络 (RNN) 概念

热门文章

最新文章