1. 网络之网络通信基础

网络通信基础

文章目录

  • 网络通信基础
    • [1. IP地址](#1. IP地址)
    • [2. 端口号](#2. 端口号)
    • [3. 协议](#3. 协议)
      • [3.1 三要素](#3.1 三要素)
      • [3.2 作用](#3.2 作用)
    • [4. 五元组](#4. 五元组)
    • [5. 协议分层](#5. 协议分层)
      • [5.1 OSI七层模型](#5.1 OSI七层模型)
      • [5.2 TCP/IP 五层模型](#5.2 TCP/IP 五层模型)
        • [5.2.1 应用层](#5.2.1 应用层)
        • [5.2.2 传输层](#5.2.2 传输层)
        • [5.2.3 网络层](#5.2.3 网络层)
        • [5.2.3 数据链路层](#5.2.3 数据链路层)
        • [5.2.5 物理层](#5.2.5 物理层)
    • [6. 封装和分用](#6. 封装和分用)
      • [6.1 发送方 - 封装](#6.1 发送方 - 封装)
      • [6.2 中间转发](#6.2 中间转发)
      • [6.3 接收方 - 分用](#6.3 接收方 - 分用)

一般认为计算机网络就是利用通信线路和通信设备将地理上分散的、具有独立功能的多个计算机系统按不同的形式连接起来,以功能完善的网络软件及通信协议实现资源共享和信息传递的系统。

  • 通讯设备(具有自治功能的)
  • 介质互联(双绞线、光纤...)
  • 资源共享(目的)

1. IP地址

网络通信的目的是资源共享,数据之间基于介质传输数据,那么这些传输数据的节点之间是如何判断信息的来源,和目的呢?

  • 用于标识网络设备的网络地址
  • 用4个字节32位二进制表示(一般写作点分十进制如127.0.0.1)
  • 环回IP 127.0.0.1

本机环回主要用于本机到本机的网络通信(系统内部为了性能,不会走网络的方式传输),对于开发网络通信的程序(即网络编程)而言,常见的开发方式都是本机到本机的网络通信。是使用一个特殊的ip地址127.0.0.1来实现的

2. 端口号

端口号可以标识主机中发送数据、接收数据的进程。例如mysql服务器默认绑定3306端口。

  • 标识一个具体的应用程序(进程)
  • 使用2个字节16位表示(0 ~ 65535)
  • 0 号端口不使用,1 ~ 1023为知名端口号,不应占用

3. 协议

网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。

3.1 三要素

  1. 语义。语义是解释控制信息每个部分的意义 。它规定了需要发出何种控制信息,以及完成的动作 与做出什么样的响应
  2. 语法。语法是用户数据与控制信息的结构与格式,以及数据出现的顺序。
  3. 时序。时序是对事件发生顺序 的详细说明。(也可称为"同步")。
    人们形象地把这三个要素描述为:语义表示要做什么,语法表示要怎么做,时序表示做的顺序。

3.2 作用

由于网络环境的复杂性,在进行网络通信时的状况比较复杂,所以在传输时就需要提前确定好如何传输,数据如何组织,如何发送数据,网络线路如何选择...

在协议中提前约定好这些,就可以让网络通信比较顺利的进行。

4. 五元组

在TCP/IP协议中,用五元组来标识一个网络通信:

  1. 源IP:标识源主机
  2. 源端口号:标识源主机中该次通信发送数据的进程
  3. 目的IP:标识目的主机
  4. 目的端口号:标识目的主机中该次通信接收数据的进程
  5. 协议号:标识发送进程和接收进程双方约定的数据格式

5. 协议分层

网络通信是一个比较复杂的工作,如果靠一个协议来解决所有的问题,会导致这个协议非常庞大、复杂。

网络分层就可以让网络的体系结构更加清晰的呈现。上层协议调用下层协议,下层协议给上层协议提高支持。每个层次之间不需要明确层次结构,每个层次对外隐藏实现细节 ,对每个层次之间的协议也可以根据需要灵活调整 。这样就降低了耦合

由于理论和实践之间的差异,理论上网络有七层OSI七层模型 - 参考模型,而各大产商支持的普遍是TCP/IP五层协议。

5.1 OSI七层模型

5.2 TCP/IP 五层模型

在具体实践中,将OSI中的应用层、表示层、会话层合并为TCP/IP中的应用层。

5.2.1 应用层

通信双方通信数据的规范

5.2.2 传输层

只关注通信的起点和终点

5.2.3 网络层

网络传输路线如何规划

5.2.3 数据链路层

描相邻节点之间的如何

5.2.5 物理层

描述了网络基础设施的规范和标准

6. 封装和分用

我们通过一个例子来看网络中的封装和分用。比如我给对方发送一句"hello",这句"hello",对方是如何收到的。

6.1 发送方 - 封装

(我 微信号:111111):

  1. 应用层:微信客户端按照应用层的协议将"hello"封装成应用层的数据报,然后交给传输层。假设微信的应用层的协议这样组织(发送方微信号,接收方微信号,时间,正文):

应用层就可以根据协议构造上述的应用层数据报,构造好后调用传输层API将这个数据报交给传输层。

  1. 传输层:传输层有很多协议,其中最主要的是TCP和UDP协议此处假设传输层协议为UDP,传输层收到应用层的数据报后,根据UDP协议构造UDP数据报。

UDP不会关心应用层的数据是什么,将其当做本层载荷进行封装。传输层封装完成后,进一步将UDP数据报交给网络层。

  1. 网络层:网络层最主要的协议是IP协议,此处网络层拿到UDP数据报后会将其封装成IP数据报:

    同样的,IP层也不会关心UDP的内容,只会将其当做本层的载荷,进行封装。

  2. 数据链路层:使用以太网对上层协议(IP数据报)进行封装,加上以太网帧头和帧尾。

  3. 物理层:物理层根据物理层协议规范(网卡)将以太网数据报转换成01序列进一步转换成光/电信号进行发送

6.2 中间转发

中间情况:中间可能会经过路由器交换机的转发,先拆包,在封装,具体拆到那一层取决于是交换机还是路由器。

  • 交换机将电信号转换成二进制数据送往交换机的数据链路层,因为交换机属于数据链路层的设备,所以它将可以查看数据帧头部的内容,但不会进行封装和解封装的过程。
  • 当路由器收到数据后会拆掉数据链路层的 MAC 头部信息,将数据送达网络层,这样 IP 头部信息就"暴露"在最外面了。 路由器将检测数据包头部的目标 IP 地址信息,并根据该信息进行路由过程,智能地将数据报文转发到下一跳路由器上(重复过程)

6.3 接收方 - 分用

(对方 微信号:222222):

  1. 物理层:物理层(硬件设备网卡),收到光电信号,需要将信号转换成01序列,得到以太网数据报,进一步将以太网数据报交给数据链路层。
  2. 数据链路层:数据链路层得到以太网数据报后就会根据以太网协议进行解析,拿到以太网数据报的载荷,再将以太网数据报的载荷交给网络层IP协议处理。
  3. 网络层:网络层得到IP数据报,根据IP协议进行解析,去掉IP报头得到IP载荷,交给传输层处理:
  4. 传输层:传输层得到UDP数据报后,根据UDP协议进行解析,去掉UDP报头,得到UDP载荷,交给应用层。
  5. 应用层:应用层拿到后就可以根据应用层的协议进行解析,解析完毕后就可以拿到数据"hello",进一步就收到了"hello"这条消息了。

发送方从应用层到物理层逐层封装,接收方从物理层到应用层逐层解析,每个层次之间相互独立,完成自己的功能,相互配合,完成了数据的传输。

如果本篇文章对你有帮助,请点赞、评论、转发,你的支持是我创作的动力。

相关推荐
Swift社区1 小时前
在 Swift 中实现字符串分割问题:以字典中的单词构造句子
开发语言·ios·swift
没头脑的ht1 小时前
Swift内存访问冲突
开发语言·ios·swift
没头脑的ht1 小时前
Swift闭包的本质
开发语言·ios·swift
JunLan~1 小时前
Rocky Linux 系统安装/部署 Docker
linux·docker·容器
wjs20241 小时前
Swift 数组
开发语言
吾日三省吾码2 小时前
JVM 性能调优
java
麻瓜也要学魔法2 小时前
链路状态路由协议-OSPF
网络
方竞2 小时前
Linux空口抓包方法
linux·空口抓包
stm 学习ing2 小时前
FPGA 第十讲 避免latch的产生
c语言·开发语言·单片机·嵌入式硬件·fpga开发·fpga
Estar.Lee2 小时前
查手机号归属地免费API接口教程
android·网络·后端·网络协议·tcp/ip·oneapi