作者:困了电视剧
专栏:《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的不断改变,每一次到路由器就会规划一下接下来的路径,而交换机只负责相邻两个节点之间的传输。
当然,这些只是理论上的东西,实际世界上的具体做法也会有所不同。