网络编程1—— IP地址 + 端口号 +TCP/IP协议 + 协议分层的封装与应用

news2024/12/25 0:40:55

文章目录

  • 前言
  • 一、网络发展各阶段
  • 二、网络通信的三大要素
    • 1.IP地址
    • 2.端口号
    • 3.网络协议
  • 三、TCP/IP五层网络模型
    • 各层级的用处
    • 网络设备所在分层
  • 四、封装和分用
    • 封装
    • 分用
    • 网络传输的实际情况
  • 总结


前言

本人是一个刚刚上路的IT新兵,菜鸟!分享一点自己的见解,如果有错误的地方欢迎各位大佬莅临指导,如果这篇文章可以帮助到你,劳请大家点赞转发支持一下!

从本篇文章开始就要分享网络编程的内容了,越发的感受到了编程的魅力,鸡汤来喽!!


一、网络发展各阶段

1️⃣单机阶段:计算机跟计算机之间是不互通的。即电脑A中的资源,电脑B是无法直接获取。只能通过外部设备进行拷贝。

2️⃣局域网阶段:局域网Local Area Network,简称LAN,(Local 即标识了局域网是本地,局部组建的一种私有网络)局域网内的主机等设备之间能方便的进行网络通信,又称为内网;两个局域网之间在没有连接的情况下,是无法进行通信的。

3️⃣广域网阶段:广域网,即 Wide Area Network,简称WAN。通过路由器,将多个局域网连接起来,在物理上组成很大范围的网络,就形成了广域网。广域网内部的局域网都属于其子网。

4️⃣移动互联网阶段:移动互联网,就是将移动通信和互联网二者结合起来,指互联网的技术、平台、商业模式和应用与移动通信技术结合并实践的活动的总称。


二、网络通信的三大要素

1.IP地址

IP地址就类似于🪪身份证上的家庭地址,

IP地址描述了该设备在互联网上的位置 。😭

简单来讲IP地址就是用来定位设备在网络上的位置,从而完成通信。

另一台设备将信息送到了这个位置上,那么这个位置上的设备就可以获得该信息📞。


2.端口号

在一个地址上,可能同时住了几个人。因此当信息送达后,需要通过姓名或电话来识别接收的人是谁。

端口号可以标识主机中发送数据、接收数据的进程。端口号是用来定位主机中的进程的 。(主机上的每一个进程都有一个端口号,同一主机上的不同进程的端口号必须不同)

一台主机上可能运行多个进程,因此当信息送达时,就是通过端口号来识别是哪个进程要接收信息,而后将信息送达。


3.网络协议

网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则。
最终体现为在网络上传输的数据包的格式

网络协议的作用:
网络设备之间的传输媒介是光信号和电信号。通过 “频率” 和 “强弱” 来表示 0 和 1 这样的信息。网络传输的各种信息,其实本质都是传输的一串二进制数字,要想将这一串数字变成想要传递的信息,就需要双方约定好数据格式。
网络协议就是用来规定传输数据的格式

现如今的网络设备越来越多,网络环境非常复杂,因此网络协议也非常复杂。

分层的原因
因此就将复杂的网络协议拆分成 多个协议
其中一些小协议的 作用 / 定位类似
因此就针对这些小协议进行 “分类” ,同时再针对这些不同的类进行 “分层”


分层的作用
分层最大的好处,类似于面向接口编程: 定义好两层间的接口规范,让双方遵循这个规范来对接

下层为上层提供使用接口,下层即为接口的实现类(提供方),
上层使用下层提供的接口,上层即为接口使用类(使用方),

上下层互不关心对方的细节,从而更有利于维护与扩展。
(上层不关心下层如何实现的接口,下层不关心上层怎么使用接口)

上层只能够调用相邻的下层,严禁跨层调用

而实际应用当中, TCP/IP五层网络模型 使用的最为广泛。


三、TCP/IP五层网络模型


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

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

在这里插入图片描述


各层级的用处

应用层对应咱们程序员写的应用程序,而下面四层系统内核已经封装好了,因此我们应更加关注应用层,而传输层被应用层调用,所以也应了解传输层

1️⃣ 应用层:负责应用程序间的沟通。 该层的工作内容为:得到数据以后,如何处理数据。

2️⃣传输层:负责两台主机之间的数据传输。 主要为TCP协议 / UDP协议 该层的工作内容为:保证数据可靠的从源主机传输到目标主机。

3️⃣网络层:决定数据在网络中的传输路径,数据路由(决定数据在网络的路径)。 主要为IP协议 该层的工作内容为:负责地址管理和路由选择。

如在IP协议中,通过IP地址来标识一台主机,并通过路由表 的方式规划出两台主机之间的数据传输的线路。

4️⃣数据链路层:负责设备之间的数据帧的传送和识别。 主要为Ethernet以太网协议
该层的工作内容为:负责网络上两个相邻节点(通过网线/无线/光纤直接连接的设备)之间的传输。

5️⃣物理层:负责光/电信号的传递方式。
该层的工作内容为:网络通信的基础设施 网线/光纤/网络接口等硬件设备被设计时所遵守的规范协议。


网络设备所在分层


对于 一台主机 它的操作系统内核实现了从传输层到物理层的内容 ,也即是TCP/IP五层模型的下四层;

对于 一般的路由器 它实现了从网络层到物理层 ,也即是TCP/IP五层模型的下三层;

对于 一般的交换机 它实现了从数据链路层到物理层 ,也即是TCP/IP五层模型的下两层;

对于 集线器 它只实现了物理层


四、封装和分用

在协议分层的背景下,数据通过 封装 分用 来进行网络传输。

如何封装
发送方发送数据,会把数据从应用层依次向下,交给对应的层次的协议,进行封装。

如何分用
接收方接收数据,会把数据从物理层依次向上,交给对应的层次的协议,进行解析。


概念先知

不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame),因此 数据包 == 数据报 == 数据段 == 数据帧。
经典数据报都是通过 报头 + 载荷的结构构成。

封装(Encapsulation):应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header)。
首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。

分用:数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理。


下面以QQ发送消息为案例讲解一下 封装 分用

忽略中间网络设备的转发过程,只将发送方发送时的封装过程与接收方接收时的分用过程

封装

发送方,层层封装,类似包装快递

1️⃣应用层

应用层(QQ这个程序)拿到你要发送的消息,并将消息封装成 应用层数据包 ,应用层调用传输层提供的api来处理这个数据包。
其中数据包的字段是由程序员手动规定的

在这里插入图片描述


2️⃣传输层

以TCP协议举例

此时传输层拿到应用层传输过来的 整个应用层数据包作为载荷再添加一个TCP报头 。然后调用 网络层提供的api 来处理这个数据报。

在这里插入图片描述

TCP报头中最重要的属性就是, 源端口号 (发送程序)和 目的端口号 (接收程序)


3️⃣网络层

此时网络层拿到传输层传输过来的 整个传输层数据报作为载荷再添加一个IP协议报头 。然后调用 数据链路层提供的api 来处理这个数据报。
在这里插入图片描述

IP协议报头中的最重要属性是 源IP (发送方主机的网络地址)与 目的IP (接收方主机的网络地址)

4️⃣数据链路层
此时数据链路层拿到网络层传输过来的 整个网络层数据报作为载荷再添加一个以太网数据帧头 / 帧尾 。然后调用 物理层提供的api 来处理这个数据帧。
以太网数据帧分为两种:封装以太网帧头 / 封装以太网帧尾

在这里插入图片描述
以太网帧头/尾中的最重要属性为与目的。 源mac地址 目的mac地址

mac地址也叫做物理地址,是描述一个主机在网络世界上的地址。
它的功能与IP地址很相似,但用途不同。
IP地址用来进行网络层的路径规划。
mac地址用来描述 数据链路层即将进行传输的两个相邻节点。

5️⃣物理层

物理层把上述的 一串0,1的二进制数据 转换成 光 /电 /电磁波信号 进行传输。


  • 注意:
    上述的所有数据报,以及下面将要讲到的,数据包,数据帧本质上都是字符串,而加上各种报头也都是进行字符串的拼接。

分用

接收方,层层分用,类似拆快递

1️⃣物理层

网卡收到 二进制的光 /电 /电磁波信号等二进制数据 ,然后进行解析,还原成 0101 这样的二进制序列 交给数据链路层
在这里插入图片描述


2️⃣数据链路层

根据传输过来的方式来交给对应的协议处理
数据链路层拿到数据报,交给以太网协议来进行解析,(如果数据是从以太网线传输过来的那么就会交给以太网协议来处理)。

数据帧头 /尾中会有一个消息类型,根据消息类型就可以知道用网络层的哪个协议了
然后数据链路层去掉数据帧头 /数据帧尾取出载荷再交给网络层

在这里插入图片描述

3️⃣网络层

IP数据报头中有一个字段,标识传输层用的哪个协议
网络层拿到数据报,根据相应的协议来分析数据,然后去掉报头,同时在做一些其他工作

然后取出载荷交给传输层
在这里插入图片描述

4️⃣传输层

每个要接收网络数据的程序都要关联上一个端口号

借助TCP报头中的重要属性,端口号来区分具体的应用程序
此处是由TCP协议解析,仍是去掉TCP报头取出载荷交给应用层

在这里插入图片描述

5️⃣应用层

交给对应的程序来解析应用层数据包,取出并使用相关数据。

此处是交给QQ这个程序来解析应用层数据包。


网络传输的实际情况

真是的网络环境十分复杂,数据的传输中间可能要经历很多节点 (交换机,路由器等设备) 进行转发,才能发送到目的地。

数据从发送方主机出发,一路可能会遇到交换机路由器等设备,最后传输到目的主机

发送方主机:将"数据" 从应用层封装到物理层,得到光或其他信号 ,然后这个信号可能会 顺着网线到达交换机或者路由器

信号如果到达交换机:交换机会进行分用, 从物理层分用到数据链路层,判断目的mac是否正确,然后进行重新封装到物理层 重新封装时封装到数据链路层时,会调整源mac与目的mac 。然后继续进行转发。

信号如果到达路由器:路由器也会进行分用, 从物理层分用到网络层,根据目的IP进行下一阶段的寻路操作,然后重新封装到物理层 ,继续进行转发。 重新封装时封装到数据链路层时,也会调整源mac与目的mac

接收方主机 一路从物理层分用到应用层 ,然后相应进程使用数据。


总结

以上就是今天要讲的内容,本文像大家介绍了网络通信的三大要素,以及常用的TCP/IP协议,以及传输过程中各层间的封装与分用。
开始网络编程的学习了,以后的内容只会越来越复杂了,大家加油啊!!!

路漫漫不止修身,也养性。

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

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

相关文章

搞懂推荐系统中的评价指标NDCG(CG、DCG、IDCG)

这些指标都是衡量搜索引擎算法的指标。搜索引擎一般采用PI(peritem)的方式进行评测,简单地说就是逐条对搜索结果进行分等级的打分。假设我们现在在Google上搜索一个词,然后得到5个结果。我们对这些结果进行3个等级的区分&#xff…

cmd可以用node但是vscode报错--node : 无法将“node”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。

原因:环境变量配置错误 解决: a.如果不想配置环境变量,可用管理员方式运行vscode后,重启编译器: 若以上方法不行,需要老老实实配置环境变量: b.配置 系统环境变量(S) 即…

机器学习20:嵌入-Embeddings

嵌入(Embeddings)是一个相对低维的空间,我们可以将高维向量转换到其中。嵌入使得对大型输入(例如表示单词的稀疏向量)进行机器学习变得更加容易。理想情况下,嵌入通过将语义相似的输入紧密地放置在嵌入空间…

高中生用台灯哪种好?盘点好用的高中生护眼台灯

随着科技的进步,台灯的外观和造型都开始不断的变化,而且台灯的功能也越来越多元化,各式各样的台灯都有。论哪种台灯最适合高中生使用,我的回答是护眼台灯!因为台灯的主要作用就是照明,便于学习、阅读、工作…

基于Springboot+Vue的手机商城(源代码+数据库)081

基于SpringbootVue的手机商城(源代码数据库)081 一、系统介绍 本项目前后端分离(该项目还有ssmvue版本) 本系统分为管理员、用户两种角色 用户角色包含以下功能: 登录、注册、商品搜索、收藏、购物车、订单提交、评论、退款、收货地址管…

2023年5月 少儿编程 中国电子学会图形化编程等级考试Scratch编程一级真题解析(选择题)

2023年5月scratch编程等级考试一级真题 选择题(共25题,每题2分,共50分) 1、看图找规律,请问下图红框中是 A、 B、 C、 D、 答案:D 考点分析:

DS-font

paper:https://arxiv.org/pdf/2301.10008.pdf title: Few-shot Font Generation by Learning Style Difference and Similarity accepted: arXiv 2023 abstract 少镜头字体生成(FFG)旨在保留原始字符的底层全局结构,同时通过参考一些样本生成目标字体。它已应用于字体库创…

怎么解决找不到msvcp120.dll,msvcp120.dll一键修复方法

小伙伴们知道msvcp120.dll是什么文件吗?那么今天小编就来讲解电脑出现msvcp120.dll丢失的解决方法介绍,希望能够帮助到大家呢。 msvcp120.dll 是windows系统中必备的动态链接库文件。msvcp120.dll可以解决某些大型游戏、程序由于vs2010编译系统中缺失此dll的问题。…

R 语言的安装(详细教程)

文章目录 前言一、R 语言是什么?二、R 下载1. 官网2. download base3. download Rtools 三、Rstudio 下载1. 官网2. download Rstudio 四、R 安装五、Rtools 安装六、Rstudio 安装七、java 的环境配置八、运行 RStudio十、R 包安装策略1. 配置镜像1. 修改配置文件1.…

Microsoft遭遇DDoS攻击,3000万客户数据遭窃

6月初,微软部分服务遭遇严重中断,包括Outlook电子邮件、OneDrive文件共享应用程序和云计算基础设施Azure。 一个名为”匿名苏丹”的(又名“风暴-1359”)的组织声称对此次DDoS攻击负责。 匿名苏丹组织自2023年1月以来一直活动频繁,声称其目标…

SpinalHDL的使用和开发经验研讨会

SpinalHDL始于2014年,最初是作为VHDL/Verilog的替代而做的创新尝试,伴随着数年来开源硬件设计的蓬勃发展,基于开源技术的硬件设计方法和范式逐渐受到业界的关注。 达坦科技(DatenLord)致力于打造高性能跨云存储&#…

oracle 基础2

目录 1.oracle字符函数 2.oracle数值函数 3.Oracle日期函数 4.oracle转换函数 5.oracle多表实战 1.oracle字符函数 拼接 concat或 || 拼接三个参数 首字母大写函数 initcap 字符串改为小写 lower 转大写 upper 删除两边空格 trim 截取字符串 substr 替换字符串 repl…

html,css笔记1

这里写目录标题 一、快捷键及基础常识基础框架2.lang语言种类3.字符集4.HTML常用标签4.1标题标签(重要)4.2段落和换行标签(重要)4.3文本格式化标签 一、快捷键及基础常识 1.快速复制一行 快捷键:shiftalt下箭头 光标定位到要复制的一行 2.…

Python_元类

目录 什么是元类 理解类也是对象 动态地创建类 使用type创建类 使用type创建带有属性的类 使用type创建带有方法的类 那么再来思考一下,到底什么是元类 __metaclass__属性 自定义元类 究竟为什么要使用元类? 什么是元类 我们知道,实…

性能测试该怎么做,终于找到方法了

目录 开头 分类 服务器与场景设计 计算TPS 设计场景 场景运用 单交易最大压力: 单交易稳定性: 混合场景稳定性: 业务指标: 数据库 中间件 负载均衡: 最后: 开头 性能测试的工具有很多&#xf…

Unity中的Bezier曲线与曲面上点的计算

上代码: //获取基于4个控制点的Bezier曲线上的点 Vector3 GetBezierPoint(Vector3 p0, Vector3 p1, Vector3 p2, Vector3 p3, float t) {t Mathf.Clamp01(t);float s 1f - t;return s * s * s * p0 3f * s * s * t * p1 3f * s * t * t * p2 t * t * t * p3; …

如何在 OpenCV 和 Python 中使用滑动窗口进行物体检测

文末附源代码的免费下载链接 目录 物体检测的滑动窗口技术讲解 使用 OpenCV 和 Python 实现滑动窗口技术 结论 代码下载链接

Python采集某漫画网站<灵剑尊>VIP漫画内容

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 环境使用: Python 3.8 Pycharm 模块使用: requests >>> pip install requests 数据请求模块 parsel >>> pip install parsel 数据解析模块 安装方法: win R 输入cmd 输入安装命令…

【Django】列表数据Paginatior分页,动态返回页码,显示当前页、总页数、跳转页

问题 1、当返回数据较多,如设置每页展示10条,数据接近200条,返回页码范围1~20,前端每个页码都显示的话,就会出现页码超出当前页面,被遮挡的页码无法操作和显示不美观; 2、列表的所在页码,总分页数,跳转不在动态页面的页数 解决 在使用paginator转化为Page对象后,获…