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

news2024/11/24 14:14:53

文章目录

  • 前言
  • 一、网络发展各阶段
  • 二、网络通信的三大要素
    • 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/716624.html

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

相关文章

如何提升你的小程序开发流程:实用的建议和技巧

随着微信小程序开发的兴起,越来越多的人想要开发自己的微信小程序,那么,如何提升你的微信小程序开发流程呢? 如果你还没有自己的小程序,那你现在就应该开始着手准备了。如果你已经有了自己的小程序,那么&a…

数字游牧民,连开会都如此“高科技”

你知道“数字游民”吗?是指无须到点上下班,旅居在悠闲惬意的海岛或乡村,通过互联网就能完成工作的群体,这样的工作模式便称作“数字游牧”。听起来很像社畜们的“梦中情job”,是近几年来全球流行的新型生活方式。 在疫…

学生体测的人体运动检测的mediapipe技术怎么实现?

Mediapipe是一个开源的跨平台框架,用于构建实时多媒体处理应用程序。它提供了一系列的预训练模型和工具,其中包括人体姿势估计模型,可以用于人体运动检测。 要使用Mediapipe进行人体运动检测,可以按照以下步骤进行: …

如何在多个 Linux 服务器上运行多个命令

动动发财的小手,点个赞吧! 如果你正在管理多台 Linux 服务器,并且你想在所有 Linux 服务器上运行多个命令,但你不知道该怎么做。不用担心,在这个简单的服务器管理指南[1]中,我们将向您展示如何在多个 Linux…

CSS样式表

CSS样式表 1、CSS介绍 CSS Cascading Style Sheet 层叠样式表,或,级联样式表 表现HTML文件样式的计算机语言 修饰静态页面 配置脚本语言动态对网页元素进行样式格式化 排序 对元素的位置进行像素级精确控制 支持所有字体字号样式 对网页对象和模型样式…

rsync 远程同步

目录 一、 rsync 概念1.2 rsync 同步方式 二、rsync 特性三、 rsync与cp、scp对比配置rsync源服务器发起端下行同步发起端上行同步五、 rsyncinotify5.1 修改rsync源服务器配置文件5.2 调整发起端inotify内核参数5.3 安装 inotify-tools5.4 在另外一个终端编写触发式同步脚本&a…

代码随想录day7

四数之和II 力扣 思路: 这道题我们可以拆分为两个部分来做,首先计算前两个数组元素的和并且统计这个组合出现的次数,然后用0减掉后两个数组。 如果发现0减去后两个数组已经出现在我们之前记录出现次数的map中了,那么就可以说他们…

聊一聊人工智能与视频技术的5大发展趋势与应用

随着互联网的快速发展,视频时代已经到来。据统计,目前互联网内容中,视频内容占据高达82%的流量,未来仍将持续增长。今天我们就来聊一聊关于视频技术的发展,以及现在的大热门–人工智能技术与视频技术的结合。 视频技术…

使用家庭宽带和摄像头,实现公网直播

那天去逛商场看到有个营业厅,本想进去问问有没有存话费送话费的活动,结果被忽悠办了一个19.9升千兆宽带加送一个路由器的业务。 网络环境验证 听他们说现在家庭宽带都是有公网IPV6地址的,立马用电脑试了下确实有IPV6地址。 赶紧随便写了几行…

pytorch学习指南

安装anaconda: https://blog.csdn.net/fan18317517352/article/details/123035625 教程:bilibili up主:一只小土堆 构建pytorch空间 pytorch安装 查看cpu 安装命令pytorch:conda install pytorch torchvision torchaudio cpu…

SOLIDWORKS CSWA/CSWP认证考试培训

通过专业的培训和考试认证,可以让您多掌握一门软件的使用,让课程设计、毕业设计或科研工作多一个助手,在当前就业压力大的情况下提升自己的求职竞争力。 SOLIDWORKS CSWA/CSWP认证考试培训内容: 1、了解考试规则 2、认识考试题型…

数据结构--KMP之求next数组

数据结构–KMP之求next数组 next数组的作用:当模式串的第j个字符失配时,从模式串的第 next[j]的继续往后匹配 任何模式串都一样,第一个字符不匹配时,只能匹配下一个子串,因此,往后余生 \color{balck}任何模式串都一样…

官宣 | 平行云正式升级为Paraverse平行云科技,开启全球业务新征程

6月30日, "Here is New-Gen Web"——Paraverse Global Strategy and Brand Launch Party 于香港科学园召开,会上平行云正式宣布升级为Paraverse平行云科技(以下简称Paraverse),并升级品牌标识“Paraverse”。这一全新命名与视觉焕新…

JUC--start线程

native:本地方法栈,c语言的函数,但凡调用的是这个接口,就是调用底层操作系统,第三方c语言的接口。 也就是说多线程和语言无关,是操作系统层面的东西。基本上每种语言都有自己的多线程实现方式。 java的前身就是c ja…

Mysql进阶(二)之事务篇

文章目录 面试题事务1.概念2.事务的四大特性ACID3.操作 并发事务问题1.脏读2.不可重复读3.幻读 事务隔离级别(解决并发问题)事务的原理1.redo log(重做日志)2.undo log(回滚日志)3.MVCC(多版本并…

最优化问题matlab求解-fminsearch()和fmincon()函数的使用

matlab可以求解无约束最优化问题、有约束最优化问题和线性规划、二次型规划问题等,同时实现了最小二乘法的曲线拟合方法。matlab求解优化问题的步骤为: 写标准型描述目标函数:M-函数或匿名函数用fminunc()或fmincon()等函数求解原问题。检验…

centos openssl升级

centos openssl升级 一、下载二、(升级)安装 一、下载 执行命令下载: wget https://www.openssl.org/source/openssl-1.1.1f.tar.gz浏览器下载,访问官网网址:https://www.openssl.org/source (1&#xff0…

汇编语言基础--nasm语法数据类型

dd //define 一个字节 例如:dd 100 dw //define 一个字 也就是两个字节 例如:dw 0xaa55 db //define 双字 也就是4个字节 例如:db 0x12345678 由于intel x86的架构采用小端存储因此二进制序列如下: 如果是16进制在后面输入h …

C++ 数据结构图(1)

1. 图的基本概念 图是由顶点集合及顶点间的关系组成的一种数据结构&#xff1a;G (V&#xff0c; E) &#xff0c;其中&#xff1a; 顶点集合 V {x|x 属于某个数据对象集 } 是有穷非空集合 &#xff1b; E {(x,y)|x,y 属于 V} 或者 E {<x, y>|x,y 属于 V &&…

【Spring Boot 事务】万字详解Spring Boot 事务,赶快跟随良辰一起去学习Spring Boot 事务吧! ! !

前言: 大家好,我是良辰丫,这篇文章我将带领大家一起去学习Spring Boot 事务文章,我们在学习数据库的时候已经接触过事务了,来跟随我的脚步一起来瞧一下Spring Boot 事务吧.&#x1f48c;&#x1f48c;&#x1f48c; &#x1f9d1;个人主页&#xff1a;良辰针不戳 &#x1f4d6;…