【剧前爆米花--爪哇岛寻宝】TCP/IP协议以及在网络传输过程中的封装与分用

news/2024/11/22 12:02:12/

作者:困了电视剧

专栏:《JavaEE初阶》

文章分布:这是一篇关于网络初识的文章,在这篇文章中讲解了TCP/IP协议的主要内容和砸在网络传输过程中的封装和分用,希望对你有所帮助!

 

目录

TCP/IP五层模型 

应用层

传输层

网络层

数据链路层

物理层

封装和分用

简易的封装过程

应用层

传输层

​编辑传输层到网络层

网络层到数据链路层

数据链路层到物理层

数据的传输过程


TCP/IP五层模型 

TCP/IP 是一组协议的代名词,它还包括许多协议,组成了 TCP/IP 协议簇。
TCP/IP 通讯协议采用了 5 层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。

接下来我将以我在淘宝商家买一件东西来进行举例说明。 

应用层

应用层 :负责应用程序间沟通,如简单电子邮件传输( SMTP )、文件传输协议( FTP )、网络远程访问协议(Telnet )等。我们的网络编程主要就是针对应用层。

关注的是传输过来的数据,具体是用来干什么的。 

传输层

传输层 :负责两台主机之间的数据传输。如传输控制协议 (TCP) ,能够确保数据可靠的从源主机发送到目标主机。

这一层负责的内容是,我和淘宝商家并不关心物品从我的位置和商家位置之间是如何传输的,我们只关心起点和终点,中间的过程并不关心,只要在规定时间送到就行。

网络层

网络层 :负责地址管理和路由选择。例如在 IP 协议中,通过 IP 地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router )工作在网路层。

主要负责的是两个遥远节点之间的路径规划。

举个栗子:比如我的快递是上海到西安,那我可以按照上海-->西安的路线走,也可以上海-->南京-->西安,也可以上海-->苏州-->徐州-->西安等等,这就是这一层负责的内容。 

数据链路层

数据链路层 :负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步 ( 就是说从网线上检测到什么信号算作新帧的开始) 、冲突检测 ( 如果检测到冲突就自动重发 ) 、数据差错校验等工作。有以太网、令牌环网,无线LAN等标准。交换机( Switch )工作在数据链路层。

主要关注的是两个相邻节点之间的传输。

就以上海-->南京-->西安这条路线为例,我可以从上海到南京乘火车,南京到西安乘高铁,这一层主要负责的就是这一问题。 

物理层

物理层 :负责光 / 电信号的传递方式。比如现在以太网通用的网线 ( 双绞 线 ) 、早期以太网采用的的同轴电缆( 现在主要用于有线电视 ) 、光纤,现在的 wifi 无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub )工作在物理层。

物理层就是网络通信的基础设施,比如网线,光纤,网络接口等,即网络上的高速公路。

封装和分用

在协议分层的背景下,数据是如何通过网络进行传输的?

发送方发送数据,要把数据从上到下依次交给对应的层次的协议,进行封装。

接收方接收数据,要把发来的数据包从下到上依次交给对应的层次的协议,进行解析。

简易的封装过程

比如我现在给我的一个同学用QQ发一个消息,我在2023年4月27日12:00通过聊天框发了一句“哥几个今晚出不出去干饭”这条信息。

应用层

首先,应用层(qq应用程序)拿到用户数据后,进行封装,封装成应用层数据包,这里的应用层数据包是由研发qq这一软件的程序员决定的,在这里我们先假定需要的是我和同学的QQ号,发消息的时间和发的消息,那么此时封装成的数据包就是:

当然,为了区分这些字段,可能会引入分隔符或者长度信息等来进行界定。

应用层完成封装后就把这个数据包发送给传输层。

传输层

传输层会拿到这个数据包,同时如果作为接收端,应用层要调用传输层提供的api来处理这个数据。

传输层有很多协议,最典型的是TCP和UDP,此处以UDP来进行举例,UDP会对上述数据包再进行封装,此时这个协议会在这个载荷的基础上再加一个存储源端口和目的端口的报头(在这里,载荷就是上一层传来的数据包,而我要新添加的端口信息就是报头),所以这一步这个数据包就会变成:

传输层到网络层

UDP数据报已经有了,接下来会将其交给网络层,由网络层的协议对其进行进一步的封装,网络层最常见的协议就是IP协议,上述UDP数据报到达网络层后会添加IP协议的报头。

网络层到数据链路层

这一层用的最典型的协议叫做以太网(数据链路层 + 物理层),这个协议会在由网络层传来的载荷上封装一个以太网帧头和一个以太网帧尾,以太网帧头会放入源mac地址和目的mac地址

mac地址也叫作物理地址,是描述一个主机在网络上的位置,他的功能和ip很相似,但是他们具有不同的作用,ip是用来进行网络层的路径规划,而mac则是用来进行描述数据链路层,即两个即将进行传输的相邻节点。

这个mac地址是和网卡绑定的,全世界的网卡,理论上都会有一个自己唯一的mac地址,但是ip不一样。

数据链路层到物理层

这些封装操作本质上就是字符串的拼接。

数据链路层会把上述以太网数据帧交给物理层,物理层把这些0101的二进制数据转换成光信号,电信号等在进行传输。

分用过程就是将上述操作反着来一次,取每次所需要的内容。

数据的传输过程

从我的电脑将信息传入到目的电脑不是一下子直达的,中间要经过许多交换机和路由器,每次消息的传输都会涉及封装分用,中间的交换机,只需要封装分用到数据链路层,即只需要改变源mac和目的mac,中间的路由器,则需要封装分用到网络层,也需要改变mac,但他的目的ip和源ip不会发生改变,对于这一个过程我们可以这样进行思考:

整个Internet是一个巨大的地图,标记了所有IP地址的地图,网络传输的过程中源ip和目的ip不会发生改变,就像所在地和目的地不会发生改变一样,然后你会有一个路由表的东西,这个东西可以看成记录了任意两个地方之间的所有到达方法,这个到达方法不一定是直达,需要不断地辗转,此时就是mac的不断改变,每一次到路由器就会规划一下接下来的路径,而交换机只负责相邻两个节点之间的传输。

当然,这些只是理论上的东西,实际世界上的具体做法也会有所不同。


http://www.ppmy.cn/news/59487.html

相关文章

五子棋游戏程序创作过程(C语言)

五子棋游戏程序创作过程(C语言 ) 我是编程爱好者,对游戏程序编制很感兴趣。学习VB6语言时就编制过一些游戏程序,如独立钻石棋、伤脑筋十二块、连连看、扑克牌游戏等,都是windows标准图形界面的。感到很好玩&#xff0…

java获取文件名乱码

Java读linux系统文件文件名乱码的解决办法 1,问题描述 web应用想通过Java读取linux系统文件显示到web页面上,结果中文文件名出现乱码? 问题场景描述:当用户通过浏览器访问tomcat服务器,请求查看某一路径下文件列表信…

VSCode正确使用方式,你知道多少?

VSCode正确使用方式,你知道多少? 目录 VSCode正确使用方式,你知道多少?VSCode 是一款非常流行的代码编辑器,它支持丰富的插件扩展,可以帮助开发者提高开发效率。以下是一些常用的 VSCode 插件及其安装方法&…

day10 TCP是如何实现可靠传输的

TCP最主要的特点 1、TCP是面向连接的运输层协议。( 每一条TCP连接只能有两个端点(endpoint),每一条TCP连接只能是点对点的(一对一)) 2、TCP提供可靠交付的服务。 3、TCP提供全双工通信。 4…

idea中maven的几个操作按钮:clean、validate、compile...

idea中Maven生命周期指令 clean命令 清除由项目编译创建的target validate命令 验证项目是否正确,并且所有必要的信息均可用 compile命令 编译项目的源代码 test命令 使用合适的单元测试框架来测试编译的源代码。 这些测试不应要求将代码打包或部署 verify命令 …

Java 中的线程是什么,如何创建和管理线程-中(十二)

书接上文 三、Java 线程的同步 Java 中的线程同步是通过 synchronized 关键字实现的。在多线程环境下,当多个线程同时访问共享资源时,如果不进行同步控制,就会出现数据不一致、死锁等问题。为了保证多个线程之间的安全访问,需要…

【Git 入门教程】第六节、Git高级操作

Git是一种非常强大的分布式版本控制系统,可以帮助开发者轻松地管理和协调代码库。在本文中,我们将介绍一些Git高级操作,包括如何管理Git仓库、标签、子模块和忽略文件。 一、管理Git仓库 Git提供了许多命令来管理本地Git仓库。以下是一些常用…

利用文本描述替换万物(Inpaint-Anything-Description)

文章目录 引言安装Demo github: https://github.com/Atlas-wuu/Inpaint-Anything-Description 引言 前段时间看了万物分割SAM、文生图Stable Diffusion、开集检测Grounding DINO,它们之间可以互相补充,AIGC变得更加可控。Inpaint Anything将…