【网络编程】网络通信基础——简述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。
  • 封装和分用:从上到下依次添加报头的过程称为封装。从下到上依次解析报头的过程称之为分用。

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

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

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

相关文章

sql_lab之sqli中的报错注入,less13

报错注入&#xff08;less-13&#xff09; 正常报错注入&#xff1a; 1.输入用户名和密码123 123显示登录错误 2.输入用户名和密码123’ 123显示登录错误 123后面有’)说明是’)注入 3.查询数据库名 1) and updatexml(<a><b></b></a>,concat(1111…

大数据知识图谱解码:从核心概念到技术实战

文章目录 大数据知识图谱解码&#xff1a;从核心概念到技术实战1. 概述什么是知识图谱知识图谱与自然语言处理的关系 2. 发展历程语义网络本体论大数据时代的知识图谱知识图谱与深度学习的融合 3. 研究内容知识图谱的建模与表示知识抽取知识图谱的融合与对齐知识图谱的推理知识…

KMP入门级别算法详解--终于解决了(next数组详解)

对于正常的字符串模式匹配&#xff0c;主串长度为m&#xff0c;子串为n&#xff0c;时间复杂度会到达O&#xff08;m*n&#xff09;&#xff0c;而如果用KMP算法&#xff0c;复杂度将会减少线型时间O&#xff08;mn&#xff09;。 设主串为ptr"ababaaababaa";&#…

Prometheus介绍和安装

Prometheus介绍和安装 1. Prometheus介绍 Prometheus&#xff08;普罗米修斯&#xff09;是一个最初在SoundCloud上构建的监控系统。自2012年成为社区开源项目&#xff0c;拥有非常活跃的开发人员和用户社区。为强调开源及独立维护&#xff0c;Prometheus于2016年加入云原生云…

P4 音频知识点——PCM音频原始数据

目录 前言 01 PCM音频原始数据 1.1 频率 1.2 振幅&#xff1a; 1.3 比特率 1.4 采样 1.5 量化 1.6 编码 02. PCM数据有以下重要的参数&#xff1a; 采样率&#xff1a; 采集深度 通道数 ​​​​​​​ PCM比特率 ​​​​​​​ PCM文件大小计算&#xff1a; ​…

[THUPC 2024 初赛] 二进制 (树状数组单点删除+单点查询)(双堆模拟set)

题解 题目本身不难想 首先注意到所有查询的序列长度都是小于logn级别的 我们可以枚举序列长度len&#xff0c;然后用类似滑动窗口的方法&#xff0c;一次性预处理出每种字串的所有出现位置&#xff0c;也就是开N个set去维护所有的位置。预处理会进行O(logn)轮&#xff0c;每…

KubeSphere金丝雀发布流量分布调节不生效(将所有流量按比例分配给灰度发布版本)

如题 金丝雀发布按照流量比例访问不能生效 1、自制应用生成的路由添加注释: nginx.ingress.kubernetes.io/service-upstream:"true" 2、项目网关开启 3、完成 以上&#xff0c;祝好。

Tomcat远程调试

windows环境 写一个 startup-debug.bat&#xff0c;指定tomcat的根目录&#xff0c;端口自己定义 rem *******设置Tomcat目录*******-- set CATALINE_HOMED:\asd\A8-2\tomcat d: rem 8787为可用端口,为远程调试监听端口-- cd %CATALINE_HOME%/bin set JPDA_ADDRESS8787 set J…

Leetcode—445.两数相加II【中等】

2023每日刷题&#xff08;六十七&#xff09; Leetcode—445.两数相加II 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/struct ListNode* addTwoNumbers(struct ListNode* l1, struct ListNode* l2…

一个简单的 HTTP 请求和响应服务——httpbin

拉取镜像 docker pull kennethreitz/httpbin:latest 查看本地是否存在存在镜像 docker images | grep kennethreitz/httpbin:latest 创建 deployment&#xff0c;指定镜像 apiVersion: apps/v1 kind: Deployment metadata:labels:app: httpbinname: mm-httpbinnamespace: mm-…

Latex生成的PDF中加入书签/Navigation/导航

本文参考&#xff1a;【Latex学习】在生成pdf中加入书签/目录/提纲_latex 书签-CSDN博客 &#xff08;这篇文章写的真的太棒了&#xff01;非常推荐&#xff09; 题外话&#xff0c;我的碎碎念&#xff0c;这也是我如何提高搜索能力的办法&#xff1a;想在Latex生成的PDF中加入…

2023的AI工具集合,google和claude被禁用解决和edge的copilot

一、前言 AI工具集合 首先&#xff0c;OpenAI的ChatGPT以其深度学习模型和强大的语言处理能力引领了AI聊天机器人的潮流。自2022年11月30日上线以来&#xff0c;它创下了100万用户的注册记录&#xff0c;并被广泛应用于全球财富500强公司。为了实现盈利&#xff0c;OpenAI发布…

iOS 开发设计 App 上架符合要求的截图

1. 真机运行截屏 2. 可以在 Apple developer 官网 Design 下找到 iPhone 边框 https://developer.apple.com/design/resources/ 不用这个边框也行&#xff0c;可以参考已上架 App 的图片框 3. 使用 Procreate&#xff08;PhotoShop&#xff09;创建符合要求的画布大小 4. 导入…

springboot集成websocket全全全!!!

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

铭飞CMS cms/content/list接口存在SQL注入 附POC

@[toc] 铭飞CMS cms/content/list接口存在SQL注入 附POC 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用…

内存函数的学习

额外知识点 第一个 假设c为int类型&#xff0c;&#xff08;char&#xff09;c之后&#xff0c;之后如果还用变量c的话&#xff0c;c依然为int类型。&#xff08;&#xff09;强制转换操作符并不会永久改变原本的变量类型。 第二个 \0在打印时不会显示出来 第三个 void …

增强客户获取能力:探索 B 端影片行销的影响

01 B端企业短视频营销的价值与难点 短视频营销在当今的市场中越来越受到重视。有数据显示&#xff0c;越来越多的市场人将尝试增加短视频营销的预算&#xff0c;并且在2023年&#xff0c;每5个市场人中就有1个人将尝试短视频营销。相较于内容深、信息量大的长视频&#xff0c;…

串口通信(7)-C#串口通信通信帮助类实例

本文讲解C#串口通信通信帮助类实例 首先创建winform项目添加界面和控件 UI界面 namespace SerialPortDemo {partial class MainForm{/// <summary>/// 必需的设计器变量。/// </summary>private System.ComponentModel.IContainer components = null;/// <sum…

c#委托学习笔记1

委托三步骤 第一步&#xff1a;定义委托 //第一步&#xff1a;1 声明委托(定义委托) //对于声明委托的解释如下&#xff1a; //解释a&#xff1a;函数指针 //解释b&#xff1a;委托就是定义函数的形状&#xff08;形态&#xff09; // 即&#xff1a;返回值类型&#x…

宝塔面板 -- 创建第一个自己的网站

文章目录 前言 一、安装宝塔面板 二、注册宝塔面板 三、安装nginx 四、第一个hello world运行 五、总结 文章目录 前言一、安装宝塔面板二、注册宝塔面板三、安装nginx四、第一个hello world运行五、总结 前言 阿里云最近对在校大学生免费每人赠送一台服务器&#xff0c…