网络通信原理

news2024/11/24 8:43:54

网络通信原理目录

  • 1.网络通信基础
    • 1.1 IP地址
    • 1.2 端口号
  • 2. 通信协议
    • 2.1 协议简介
    • 2.1 协议分层
  • 3. 封装和分用

1.网络通信基础

😄网络通信的目的是网络数据传输,是主机的不同进程间,基于网络实现的数据传输。那么,首先我们应该先弄清楚的是,网络中有这么多的主机,究竟是那两台主机之间在进行通信呢?这就需要能够表示网络中每一台身份的信息;同时,每台主机上又有很多个进程,这些进程都需要和外界主机通信,这就需要能够有表示主机具体进程信息的标记。这就有了下边的IP地址和端口号port。

1.1 IP地址

   😄像我们上面所说的,进行通信的主机之间该如何确定各自的具体网络地址信息呢?这就体现出了IP地址的作用。IP地址用于标识网络主机和网络设备(像路由器、交换机)在网络中具体的位置,简单来说,主机的网络IP信息就像每个人的身份证信息,通过这个IP能够在网络中具体定位某台主机的位置。
   😄IP地址在内存中是以一个32位的二进制数进行存储的,我们通常把这个二进制数分割成4个8位2进制数,同时,通常采用”点分十进制“的方法来表示,例如:

  • 4个8位二进制表示的ip地址: 01101001.10100101.00101011.00000110
  • 转换点分十进制表示:105.165.43.6
    在这里插入图片描述

1.2 端口号

   😄上面的ip地址可以帮助我们在网络中找到通信的主机信息,那么通信的主机上可能有多个进程与外界进行着通信,我们怎样具体确定该主机具体与目标主机的那个进程进行通信呢?这个时候就体现出端口号的作用了。
   😄在网络通信中,端口号可以主机中进行通信的具体进程。它是一个0~65535范围内的一个数字,每个进行通信的进程都绑定了一个用于通信的端口号,通信的发起者可以通过主机ip信息在网络中具体定位到这台主机,接着就可以通过端口号找到进行通信的线程,这样就打通了不同主机不同线程之间的通信桥梁啦!

   ps:我们之前在学习MySQL以及Tomcat已经用到了这个端口号了,例如MySQL的3306,Tomcat的8080端口号等等…在这里插入图片描述

2. 通信协议

2.1 协议简介

😄有了上面的ip地址和端口号,我们能够在网络中找到具体的主机信息并与选定的进行之间进行通信,那么现在问题又来了,网络通信是基于0/1二进制数据来进行的,计算机之间的通信内容是一堆二进制数据,那么就存在不同的通信数据格式,计算机在通信时怎样告知对方发送数据的具体格式呢?这就体现出了通信协议的作用,即网络数据传输,需要有事先的协议来规定双方的通信格式。

2.1 协议分层

😄网络通信协议被分成了好几个层次,这大大提高了通信过程之间的适配性。这些分层的作用类似于面向接口如JSBC编程等,为接口的使用者和开发者提供了不可言喻的妙处,例如:

  • 对于使用方来说,不必关心每一层协议的内容具体是怎么实现的,只需要调用具体的接口信息来完成通信工作即可
  • 同样,对于开发方来说,能够隐藏实现的细节信息,只对外提供接口信息即可

😄下面我们主要来了解一下TCP/IP协议模型。

TCP/IP五层协议模型
😄先来看一张TCP/IP通信协议模型的镇楼图
TCP/IP通信协议五层模型图

  • TCP将上面这张图片中的应用层、表示层和会话层统称为应用层协议

😄这么多层的协议,那么每一层的具体作用是什么呢?下面我们一层一层来看:

在这里插入图片描述

物理层
   物理层主要指的是对网络通信中的硬件设备的协议约定,像网卡/网线等等,能够确保主机和网络设备之间都是相互匹配的。主要负责光电信号的传递。

  • 这一层和我们程序猿的关系不是很密切,因此,有时候我们也说TCP/IP四层通信协议模型,这也是正确的。我们主要看接下来的四层通信协议模型。

数据链路层
   负责相邻设备间数据帧(下面会提到)的传送和识别,简单来说就是完成网络中相邻的两个设备之间的通信,是具有相对局部特性的协议。可以看下下面这张图:
在这里插入图片描述

网络层
   负责地址的管理和路由的选择。简单来说就是负责点和点之间的通信,规划处两台通信主机线路上这两个点之间的的一条通信线路,主要关注数据的传输过程


传输层
   负责两台主机间的数据传输,简单来说就是负责端和端之间的通信,并且它主要两台通信主机的通信结果,而不具体的去关注通信的过程


应用层
   主要负责和程序间的沟通,简单说就是传输的这个数据具体是干啥用的。这个层次与我们程序猿的关系十分密切,包含着通过网络传输的数据的具体内容。

3. 封装和分用

😄这是我们这篇文章要总结的最重要的内容。值得注意的是,这里的封装和Java中我们所说的封装并没有太大的关系。再不同的协议层,对数据包有不同的称谓,在传输层叫做“段”,在网络层叫做“报”,在链路层叫做“桢”。当应用层协议通过协议栈发送到网络上时,每一层协议都要加上一个数据首部,这个过程就叫做对传输数据的”封装“。当数据被封装成“桢”最后传输到目的主机后,主机中的每层协议再对传输的封装后的数据进行“割头“解析,这个过程就称为”分用“。下面我们举个栗子来梳理下封装传输和分用解析的数据传输过程:

我们以两台主机之间通过微信发送消息内容为例,先来看一下数据封装的过程:

  • 首先,程序根据用户输入的消息内容将数据构造成一个应用层的协议报文。将这个报文信息交给操作系统内核中的传输层。
    在这里插入图片描述 * 传输层拿到应用层协议构造的报文后,基于当前使用的传输层协议(此处我们以TCP传输协议为例),构造出一个传输层的协议报文,然后将报文交给网络层。
    在这里插入图片描述 * 网络层拿到传输层封装后的协议报文后,会继续根据当前使用的网络层协议(此处我们以IP协议为例)再次对该协议报文进行封装,把TCP协议数据报构造成IP协议数据报,然后将这个数据报传递给数据链路层。
    在这里插入图片描述 * 数据链路层拿到网络层的数据报后,继续根据当前数据链路层的协议对IP数据报进行封装,然后将这个数据报传递给对应的物理层。
    在这里插入图片描述

到这里,发送数据的主机发送的数据内容就已经被接收数据的主机拿到了。不过这个数据内容还需要经过解析即分用后才能够真正拿到,接下来我们来看接收数据的主机中数据分用的过程:

  • 物理层感知到了一组高低的电平,它将这些点评信息翻译成0/1的二进制数据组成的以太网数据帧,然后将这个数据帧(数据链路层数据报)交给数据链路层。
    在这里插入图片描述
  • 数据链路层根据对应的链路层协议对数据帧进行解析,去掉帧头和桢尾,拿到IP数据报,然后将IP(网络层)数据报交给网络层。
    在这里插入图片描述
  • 网络层拿到IP数据报后,依据网络层协议(别忘了这里我们使用IP协议举例)对该数据报进行解析,拿到TCP(传输层)协议报交给传输层。
    在这里插入图片描述
  • 传输层拿到协议包报后再根据传输层协议对数据进行解析,拿到应用层协议报,将该协议报传递给应用层。
    在这里插入图片描述
  • 应用层拿到应用层协议报后进行最后一次解析,将数据报中包含的真正的消息内容向窗口上进行展示.在这里插入图片描述

到这里,就完成了发送数据的主机对数据的封装和接收数据的主机对数据分用过程,完整地完成了两台主机间的通信过程。如果上边过程的图片看起来凌乱的话,可以看下面这张完成的通信过程图:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/479377.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java实现调用外部程序

Java实现调用外部程序 Java库Runtime类与ProcessBuilder类参数传递执行结果Runtime类的使用ProcessBuilder类的使用无参数调用简单参数调用复杂参数调用 Apache Commons Exec库使用步骤介绍使用实例 Java库 在Java中,可以通过Runtime类或ProcessBuilder类来实现调用…

看看人家的MyBatis批量插入数据优化,从120s到2.5s,那叫一个优雅!

粗略的实验 最后 最近在压测一批接口的时候,我发现接口处理速度比我们预期的要慢。这让我感到有点奇怪,因为我们之前已经对这些接口进行了优化。但是,当我们进行排查时,发现问题出在数据库批量保存这块。 我们的项目使用了 myb…

开源小项目ChatGPT-website已获得100+star,我都干了什么

📋 个人简介 💖 作者简介:大家好,我是阿牛,全栈领域优质创作者。😜📝 个人主页:馆主阿牛🔥🎉 支持我:点赞👍收藏⭐️留言&#x1f4d…

微信小程序学习实录1(wxml文档、引入weui、双向数据绑定、提交表单到后端)

微信小程序学习实录 一、wxml文档二、新建页面快捷方式三、微信小程序引入weui四、双向数据绑定1.wxml渲染层2.js逻辑层 提交表单到后端五、微信小程序跳转到H5 一、wxml文档 <!-- index.wxml --> <view><!-- 数据绑定 --><view><text>{{name}}…

蛋白质界的 ChatGPT:AlphaFold2 论文必备知识,不会有人还不知道吧

你知道 AlphaFold2 吗&#xff1f;它真正解决了蛋白质三维结构预测的算法困境&#xff0c;堪称蛋白质界的 chat-GPT4&#xff0c;甚至它的意义不是 chat-GPT4 所能够匹敌的。它为世界疾病治疗药物开发以及探究生物生命之谜提供了通向天神的一条道路&#xff0c;未来是生物的世纪…

Java 基础入门篇(二)—— Java 基础语法

文章目录 一、注释二、字面量三、变量3.1 变量概述3.2 变量在计算机中的底层原理 四、数据类型五、关键字、标志符六、类型转换6.1 自动类型转换6.2 表达式的自动类型转换6.3 强制类型转换 七、运算符7.1 基本算数运算符7.2 符号做连接符7.3 自增自减运算符7.4 赋值运算符7.5 …

Java 基础入门篇(五)—— 面向对象编程

文章目录 一、面向对象的思想二、类的定义与对象的创建三、对象内存分配情况 ★ 3.1 两个对象的内存图3.2 两个变量指向同一个对象内存图 四、构造器4.1 构造器的格式与分类4.2 构造器的调用 五、 this 关键字六、封装七、标准JavaBean补充&#xff1a;局部变量和成员变量的区别…

Java 基础入门篇(六)—— String 类详解

文章目录 一、String 类概述二、String 创建对象的方式2.1 创建对象的两种方式2.2 面试&#xff1a;两种方式的区别 ★2.3 常见面试题 ★ 三、String 类常用方法3.1 字符串内容比较3.2 常用 API&#xff1a;遍历、截取、替换、分割 一、String 类概述 java.lang.String 类代表…

Java 基础入门篇(四)—— 方法的重载与参数传递机制

文章目录 一、方法的定义二、方法的参数传递机制 ★2.1 基本类型的参数传递2.2 引用类型的参数传递 三、方法重载 一、方法的定义 方法的作用&#xff1a;封装一段代码的语法结构&#xff0c;可以被重复调用&#xff0c;以此提高代码的复用性&#xff0c;提高开发效率&#xf…

【VsCode远程开发】Windows SSH远程连接Linux服务器 - 无公网IP内网穿透

文章目录 前言视频教程1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 转…

Java 基础进阶篇(一)—— static 静态关键字与单例模式

文章目录 一、static 静态关键字1.1 静态成员变量与实例成员变量1.2 静态成员方法与实例成员方法1.3 static 访问注意事项1.4 内存使用情况 二、工具类三、代码块四、单例模式4.1 饿汉单例4.2 懒汉单例 一、static 静态关键字 static&#xff1a;代表静态的意思&#xff0c;可…

KaliLinux安装burpsuite(超详细)

注意事项 1.注意linux位数 安装jdk之前先输出uname -a&#xff0c;看看kali linux是32位的还是64位&#xff0c;例如此处我的kali是32位的&#xff0c;因此需下载的是32位的jdk 2.jdk版本 jdk版本最好是oracle的&#xff0c;若使用的是openjdk很可能会出现burpsuite闪退现象…

远程访问本地jupyter notebook服务 - 无公网IP端口映射

文章目录 前言视频教程1. Python环境安装2. Jupyter 安装3. 启动Jupyter Notebook4. 远程访问4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5. 固定公网地址 转载自远控源码文章&#xff1a;公网远程访问jupyter notebook【cpolar内网穿透】 前言 Jupyter Notebook&am…

【Linux】信号的保存信号的捕捉信号集零碎知识点总结

【Linux】信号的保存&信号的捕捉&信号集&零碎知识点总结 一、信号的保存1.1 信号几种概念1.2 信号在内核中的表示 二、信号的捕捉了解用户态和内核态2.1 捕捉过程2.2 信号的捕捉方法2.3 信号捕捉规则2.4 多信号屏蔽问题 三、信号集3.1 概念3.2 信号集&#xff08;s…

【视频教程解读】Window上安装和使用autogluon V0.7

1.使用conda安装的python环境 教程使用的是极简版miniconda,由于我们的电脑中安装了anaconda&#xff0c;所以不需要进行进一步安装。python版本为3.9&#xff0c;博客里面有anaconda和python版本的对应关系。注意查看版本autogluon V0.4需要3.8或者3.9和3.10&#xff0c;pip版…

2023年第二十届五一数学建模B题:快递需求分析问题-思路详解

一、题目简析 今年的B题是一道较为综合的题目&#xff0c;包括了数据分析、综合评价、时间序列预测、最优化问题以及概率估计问题。考察范围广&#xff0c;但是整体看来题目背景简单&#xff0c;切入点多&#xff0c;难度适中。 二、逐问思路 1.问题1&#xff1a;附件1为该快…

私有GitLab仓库 - 本地搭建GitLab私有代码仓库并随时远程访问「内网穿透」

文章目录 前言1. 下载Gitlab2. 安装Gitlab3. 启动Gitlab4. 安装cpolar内网穿透5. 创建隧道配置访问地址6. 固定GitLab访问地址6.1 保留二级子域名6.2 配置二级子域名 7. 测试访问二级子域名 转载自远控源码文章&#xff1a;Linux搭建GitLab私有仓库&#xff0c;并内网穿透实现公…

迷你主机安装openwrt软路由系统(附启动盘制作教程+ISO、IMG镜像文件)

之前在迷你主机上刷了一个openwrt的软路由&#xff0c;安装过程分享给大家&#xff0c;镜像文件在文章末尾~ 一般需要做软路由系统的机器&#xff0c;是需要至少两个网口的&#xff0c;一个做wan口&#xff0c;一个做lan口 由于其他因素&#xff0c;不能直接将openwrt直接安装…

ChatGPT是什么?ChatGPT里的G、P、T分别指什么

文章目录 ChatGPT是什么GTP中的 生成式 是什么意思GTP中的 预训练 是什么意思GTP中的 变换模型 是什么意思 什么是Transformer什么是注意力机制 监督学Xi、无监督学Xi、强化学Xi ChatGPT是什么 GPT: Generative Pre-trained Transformer 生成式预训练变换模型 ChatGPT是由Ope…

学习RHCSA的day.02

目录 2.3常用简单命令 2.4使用Bash执行命令 2.5 命令帮助 2.3常用简单命令 常用系统工作命令 1、echo命令 echo命令用于在终端设备上输出字符串或变量提取后的值&#xff0c;语法格式为&#xff1a;“echo [字符串] [$变量]”。 这是在Linux系统中最常用的几个命令之一&am…