【网络编程】网络通信基础——简述TCP/IP协议

个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【网络编程】【Java系列】
本专栏旨在分享学习网络编程的一点学习心得,欢迎大家在评论区交流讨论💌

目录

  • 一、ip地址
  • 二、端口号
  • 三、协议分层
  • 四、封装和分用
  • 五、总结

一、ip地址

ip地址简单来说就是用来描述网络上一个设备的所在位置。

二、端口号

端口号用于区分一个主机上不同的应用程序。

一个网络程序在启动的时候都需要绑定一个或多个端口号,后续的通信过程都需依赖端口来进行展开的。

网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则(协议就只是表示一种约定,然而这种约定可以是任意的),之所以有统一的协议标准以便大家可以相互通信。

三、协议分层

网络通信是一个非常庞大的工作,其中会涉及到一系列非常繁琐,非常细节的工作,靠一个协议解决所有问题说明这个协议非常庞大。因此我们就需要对协议进行分类(把功能差不多的协议放到一起)、分层(上层协议调用下层协议,下次协议为上层协议提供支持,以避免跨层级所引起的混乱);另外上层协议不需要了解下层协议的细节(封装),我们可以灵活的调整替换某层协议。

协议分层就是为这些协议明确层级关系,避免跨层之间的交互,降低耦合,提高整个系统的稳定性。

协议分层有两种主要的方式:一种方式是OSI七层网络模型(目前只是在教科书中提到,在真实世界并没有对其进行应用),另一种是TCP/IP五层网络模型。
在这里插入图片描述

  • 物理层:描述网络通信中的一些基础设施需要遵守的规范。(比如网口、网线是什么样的)
  • 数据链库层:负责相邻两个节点的数据如何传输。
  • 网络层:负责地址管理和路由选择。
  • 传输层:管理两个节点之间的数据传输,只关注起点和终点。
  • 应用层:简单来说就是这个数据被用来干什么。
    在这里插入图片描述
  • 对于应用程序来说:不同的应用程序使用不同的协议(当然也能是使用相同的协议)。
  • 传输层协议和网络层协议都是操作系统已经内置好的。
  • 驱动程序都是硬件厂商提供的,驱动程序会和系统内核进行适配,系统就可以进一步的通过驱动来操作硬件了。数据链路层和物理层一般就是由硬件和驱动程序搭配来进行提供的。

四、封装和分用

网络数据传输的基本流程总结起来就是:封装和分用

我们现在通过QQ发送消息为例来描述网络数据传输的基本流程。即主机A通过QQ把消息发送给主机B:

  • 应用层方面:首先QQ这个应用程序先从输入框中获取到输入的信息,并将其构成应用层数据报(当然这里是根据应用层协议去进行数据报构造的,构建的应用层数据报的过程是按照一定的格式进行字符串拼接的)。这里我们要知道不同的应用程序使用的应用层协议是不同的,而其中很多一部分的应用程序会自定义应用层协议。当应用层数据报准备好之后,应用程序就会调用传输层提供的接口,然后把上述的数据报交给传输层去进行处理。

  • 传输层方面:传输层的协议有很多,最主要的协议就是TCP和UDP。此处我们这里假设使用的协议是UDP。当应用层把应用层的数据传到了传输层之后,并交给UDP,UDP会把应用层数据当作一个字符串,并构造出UDP数据报,然后把UDP数据报进一步的交给网络层。
    在这里插入图片描述

  • 网络层方面:网络层最主要的协议就是IP协议。IP协议会根据自己的格式来构造出IP数据报。IP协议并不关心IP数据报的载荷是啥,只是单纯的把IP数据报载荷当作一个字符串,在这个基础上拼接一个IP报头以获取更大的字符串。

在这里插入图片描述

注意,源ip和目的ip都是在ip报头中,而源端口和目的端口都是在UDP报头中
一次通信往往包括这5个信息:源IP、目的IP、源端口、目的端口、协议类型。此五点称为网络通信的五元组

之后对数据进一步传输,即把数据传输到数据链路层。

  • 数据链路层:数据链路层比较重要的协议就是以太网协议。以太网(平时上网插入的一个网线,这根网线就遵守以太网协议)又会针对IP数据报进行进一步的封装,即在IP数据报的基础上加上数据头数据尾。以太网依然不关心载荷是什么,以太网只是把载荷当作字符串,进一步的拼接上枕帧头帧尾以构造成以太网数据帧。至此,上述的数据还需要交给物理层。

在这里插入图片描述

  • 物理层:物理层这里就涉及到硬件设备了(比如网卡)。之前的以太网数据帧本质上是二进制的数据,这个时候硬件设备就需要对上述的数据进行转换(由物理层的这些设备把上述的数据转换称光信号、电信号、电磁波等)

至此,主机A就完成了发送过程。即上述的过程是主机A,即发送消息方的情况。

现在来看接收方(即主机B)的情况:

  • 物理层:硬件设备(如网卡)接收到光信号、电信号、电磁波。需要把接收到的信号解调(调制:就是把我们要传输的信息放到光电信号中解调:就是把光电信号中的信息提取出来;还有一个叫做调制解调器【俗称猫🐱】,调制解调器就是负责调制和解调的硬件设备:光猫🐱就是针对光信号进行调制解调的),解调之后我们就可以得到0101这样的二进制数据序列,这个序列就是以太网数据帧。此时我们经过解调得到的信息就会交给上一层,即交给数据链路层。好了,下面来看数据链路层的方面。
  • 数据链路层:数据链路层得到来自硬件设备解调出来的信息之后,数据链路层的以太网协议就会按照以太网数据帧的格式对信息进行解析。解析之后,就来到了网络层。下面来看网络层。

在这里插入图片描述

  • 网络层:ip协议会对从数据链路层那里得到的数据报进行解析(去掉ip报头,取出载荷部分的信息并将其交给传输层),好了现在就来到了传输层。

在这里插入图片描述

  • 传输层:传输层会根据ip报头中的字段就知道当前这个载荷是一个UDP数据报,并将该数据报交给UDP处理。然后UDP也会针对这个数据报进行解析(即去掉报头,取出载荷),然后进一步交给应用程序。好了,现在来到了应用程序层。
  • 应用程序层:UDP报头中有一个字段是目的端口,然后根据目的端口找到关联的应用程序,然后把数据交给应用程序即可。此时QQ程序就会按照QQ的应用层协议对数据进行解析,进一步把这里的数据显示到界面上。更进一步的此时我们的QQ头像就一直进行闪烁。

至此,主机A从上到下依次添加报头的过程称为封装。主机B从下到上依次解析报头的过程称之为分用。每次网络数据的传输都会经过封装和分用这样的过程。我们可以简单理解:封装就是在打包快递,而分用就是在拆快递。封装和分用相互配合,就可以完成数据的传输。上面的描述是针对消息发送方和消息接收方的进行分析的。

然后主机A和主机B之间还会有很多交换机和路由器进行转发。消息转发到某个设备(即中间过程的交换机和路由器)时,每个设备的处理流程和上面封装分用是一样的如果是交换机的话,交换机封装和分用到数据链路层即可。交换机解析出以太网数据帧之后,就会进一步获取到帧头中的mac地址(交换机通过在以太网数据帧中查找目标MAC地址来实现数据的转发),然后根据mac地址查询到交换机内部的转发表,然后接下来决定数据从哪个网口发出,在发送之前又会把以太网数据帧封装好。(我们举个栗子来更好的理解交换机这里,比如我们拿到一个快递之后,打开快递盒子并查看其中的标签以便我们可以知道这个快递发往哪里,之后我们得知快递发往哪里之后我们把这个快递盒子重新封装起来即可)
路由器则是封装分用到网络层即可。即先从物理层中解析出以太网数据帧(以太网数据帧是计算机网络中物理层和数据链路层之间的数据传输单位;计算机设备之间的通信都是通过以太网数据帧进行的),然后再去交给网络层(即交给ip协议)解析出ip数据包,进一步获取到ip报头,然后根据ip报头来进一步规划接下来的路线(不要忘记网络层的任务就是规划路线,而数据链路层的任务就是当路线确定好了之后再来确定我们应该怎么走;由此可以看到数据链路层和网络层是相互配合的),确定好路线之后,接下来又会把数据进行重新封装然后转发。
注意:上述的交换机路由器只是经典的交换机路由器,而现在的交换机路由器可以做到更多的事情,比如有的现代的交换机路由器很有可能封装分用到应用层

五、总结

  • TCP/IP五层协议:应用层(对应应用程序)、传输层(两点之间的传输)、网络层(规划路线)、数据链路层(负责两个相邻节点之间的传输),物理层(描述硬件设备),其中传输层会为应用层提供API,我们如果要编写一个具体的网络程序,此时就会经常使用到传输层的API。
  • 封装和分用:从上到下依次添加报头的过程称为封装。从下到上依次解析报头的过程称之为分用。

本文到这里就结束了,希望友友们可以支持一下一键三连哈。嗯,就到这里吧,再见啦!!!
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

26、湾湾国立阳明交通大学、湾湾长庚纪念医院提出:ALL Attention U-Net,独属头部CT分割的[玛格丽特]

本文由台湾国立阳明交通大学、台湾长庚纪念医院于2023年12月16日在arXiv<Image and Video Processing>发表。 论文地址&#xff1a; 2312.10483.pdf (arxiv.org) 0、Abstract 脑出血在 Head CT扫描中作为第一线工具&#xff0c;帮助专家诊断不同类型的出血。然而&…

AI技术图像编辑 Luminar Neo最新中文 for Mac

Luminar Neo是一款功能强大的AI智能图像处理工具&#xff0c;借助Luminar Neo领先的AI技术和灵活的工作流程&#xff0c;用户可以完成创意任务并获得专业品质的编辑结果。以下是该软件的主要特点和功能&#xff1a; 支持多种文件格式&#xff1a;Luminar Neo支持多种文件格式&…

Android模拟器的安装和adb连接

一、前置说明 APP 自动化可以使用真机进行测试&#xff0c;也可以使用模拟器来模拟安卓设备。我们可以根据个人喜好安装模拟器&#xff0c;个人推荐安装两款模拟器&#xff1a;网易 MuMu 模拟器、夜神模拟器。 MuMu模拟器可以支持 Android 12 版本&#xff0c;优点是&#xf…

docker-compaose部署openldap

前段时间在本地搭建了一套gitlab geo测试环境&#xff0c;因为需要集成ldap&#xff0c;所以特意搭建下&#xff0c;特此作为笔记记录下。 文章目录 1. 前置条件2. 编写docker-openldap.yml文件3. 登录4. 使用创建组创建用户登录测试 1. 前置条件 安装docker-compose 安装docke…

el-select绑定值的坑

碰到一个问题&#xff0c;选择框的数据是后端传过来的&#xff0c;下拉框的数据也是后端传过来的&#xff0c;但是打开下拉框时&#xff0c;发现数据没有高亮。 最后发现&#xff0c;只要选择框v-model给的值和option的value绑定的值一致&#xff0c;就可以高亮。 大多数情况下…

041_小驰私房菜_MTK平台添加支持通过原生Camera API接口调用UsbCamera

平台:MTK 问题:通过调用Android Camera API去调用UsbCamera,需要做哪些修改? Google官方文档,关于usbcamera的支持: 外接 USB 摄像头 | Android 开源项目 | Android Open Source Project 相关修改内容如下: 一、MTK平台支持通过标准接口打开USB Camera 1)device相…

springboot集成websocket全全全!!!

一、界面展示 二、前置了解 1.什么是websocket WebSocket是一种在单个TCP连接上进行全双工通信的持久化协议。 全双工协议就是客户端可以给我们服务器发数据 服务器也可以主动给客户端发数据。 2.为什么有了http协议 还要websocket 协议 http协议是一种无状态&#xff0c;非…

红帆iOffice iorepsavexml.aspx接口存在任意文件上传漏洞 附POC

@[toc] 红帆iOffice iorepsavexml.aspx接口存在任意文件上传漏洞 附POC 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅…

为什么react call api in cDidMount

为什么react call api in cDM 首先&#xff0c;放到constructor或者cWillMount不是语法错误 参考1 参考2 根据上2个参考&#xff0c;总结为&#xff1a; 1、官网就是这么建议的&#xff1a; 2、17版本后的react 由于fiber的出现导致 cWM 会调用多次&#xff01; cWM 方法已…

16-高并发-队列术

队列&#xff0c;在数据结构中是一种线性表&#xff0c;从一端插入数据&#xff0c;然后从另一端删除数据。 在我们的系统中&#xff0c;不是所有的处理都必须实时处理&#xff0c;不是所有的请求都必须实时反馈结果给用户&#xff0c;不是所有的请求都必须100%一次性处理成功…

如何查看内存卡使用记录-查看的设备有:U盘、移动硬盘、MP3、SD卡等-供大家学习研究参考

主要功能 USB Viewer&#xff08;USB移动存储设备使用记录查看器&#xff09;可用于查看本机的USB移动存储设备使用记录。可查看的设备有&#xff1a;U盘、移动硬盘、MP3、SD卡……等。   可用于兵器、航空、航天、政府、军队等对保密要求较高的单位&#xff0c;可在计算机保…

ubuntu22.04+ROS2推荐匹配的gazebo版本

放大以后看到&#xff1a; 可以看到ros2推荐使用版本是humble-----匹配的是Ubuntu22.04LTS -------匹配gazebo Harmonic

论文阅读——Flamingo

Flamingo: a Visual Language Model for Few-Shot Learning 模型建模了给定交织的图片或支视频的条件下文本y的最大似然&#xff1a; 1 Visual processing and the Perceiver Resampler Vision Encoder&#xff1a;from pixels to features。 预训练并且冻结的NFNet&#xff…

每次maven刷新jdk都要重新设置

pom.xml <java.version>17</java.version> 改为<java.version>1.8</java.version>

【LeetCode:1962. 移除石子使总数最小 | 堆 + 贪心】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

变限积分求导(带参,极限)

方法 一般形 带参数方程形 带极限型

Koordinator 支持 K8s 与 YARN 混部,小红书在离线混部实践分享

作者&#xff1a;索增增&#xff08;小红书&#xff09;、宋泽辉&#xff08;小红书&#xff09;、张佐玮&#xff08;阿里云&#xff09; 背景介绍 Koordinator 是一个开源项目&#xff0c;基于阿里巴巴在容器调度领域多年累积的经验孵化诞生&#xff0c;目前已经支持了 K8s…

Windows安装cnpm报错 The operation was rejected by your operating system.

Windows在安装cnpm时出现如下错误 npm ERR! The operation was rejected by your operating system. npm ERR! Its possible that the file was already in use (by a text editor or antivirus), npm ERR! or that you lack permissions to access it. npm ERR! npm ERR! If y…

Vue3中使用props和emits详解

前言 在Vue3中&#xff0c;父子组件之间的数据传递是一个常见的需求。本文将介绍如何在Vue3中传递对象&#xff0c;并且在子组件中访问和修改父组件对象中的属性值&#xff0c;以及子组件如何调用父组件中的方法。 在 Vue 3 中&#xff0c;父子组件之间传值有以下作用&#xf…

Chatgpt如何共享可以防止封号!

ChatGPT 是一个基于 GPT-3.5/GPT-4 模型的对话系统&#xff0c;它主要用于处理自然语言对话。通过训练模型来模拟人类的语言行为&#xff0c;ChatGPT 可以通过文本交流与用户互动。每个新版本的 GPT 通常都会在模型规模、性能和其他方面有一些改进。在目前免费版GPT-3.5 中&…