OSI七层协议之物理层:从游戏心得传输看物理层的应用与原理
OSI七层协议1.物理层
很久很久以前,彼时还不存在如今的外星人超级电脑,也没有华为的 P30。较为调皮的小明,想要把自己机器上写好的一些个人游戏心得(关于如何玩好王者农药的)发送给小红(校花),期望能博得她的芳心。小明个人较为勤勉,对游戏的总结心得总结得很详细(大概有 100M)。但是要从自己的机器上传给小红的机器到底该怎么做呢?经过一番打听后,他得知远在太平洋另一端的科学家已经发明了一种名为物理层的技术。这种技术专门用来解决像小明这样的单身狗所面临的问题。该层主要对物理设备的标准进行定义,比如网线的接口类型、光纤的接口类型以及各种传输介质的传输速率等。它的主要作用是进行比特流的传输。比特流是通过将 1、0 转化为电流强弱来实现传输的,到达目的地后再将其转化为 1、0,也就是我们常说的数模转换与模数转换。这一层的数据被称作比特。
他很兴奋,通过一个月的努力终于搭建起了这个物理层。
2.数据链路层:
然而上天似乎与小明开了个玩笑,楼下的小润发超市的网线以及光纤最近都售罄了,而这个物理层传输数据仅能依靠网线来进行传输,到底该怎么办呢!!
他体内的雄性激素促使大脑快速运转。他终于感觉到饿了,无奈地走向学校饭堂三楼去吃麻辣烫。这时听到隔壁坐着的王叔叔(老王)说,科学家已经发明了一种能够通过无线电传输的技术。什么?这难道不是正好解决了自己的困扰吗?小明赶忙对隔壁老王表示感谢,老王流下了幸福的泪水。
小明经过一番努力查找资料后发现:这种技术既能通过电线发送数据流,又能通过其他介质进行传输。并且它还保证了传输过去的比特流是正确的,具备纠错功能。它定义了如何使格式化数据进行传输,以及如何控制对物理介质的访问。这一层通常会提供错误检测和纠正,以保障数据的可靠传输。
小明把层技术称为:数据链路层
3.网络层:
小明家离小红家较远,无线电信号无法传输到小红家。然而,这难不倒小明。他在离小红家的路上搭建了多个节点,包括路由器和交换机,用于信号传输。但有时他被雄性激素影响,搭建的信号节点有些杂乱且数量较多。那么,他若想以最短路径传输信号该怎么办呢?小明沮丧地走回家时已到深夜。他看到今天见过的那位王叔叔匆匆从自己家走出来,便连忙拉住王叔叔,向他诉说自己的烦恼,希望王叔叔能给自己一些帮助。小明说完后,王叔叔的神情从紧张变得和蔼,对小明说:其实已经有人发明了网络层,也就是路由器、交换机那些具有寻址功能的设备所实现的功能。这一层的定义是关于 IP 地址的,并且通过 IP 地址来进行寻址。正因如此,就产生了 IP 协议。该层具备选择最佳路径的能力,而这正是路由所需要做的事情。
4.传输层
小明为了抓紧时间,通宵去查找资料以学习相关信息,同时简单搭建起了网络层并开始传输数据,在传输过程中他好好睡了一觉。等他醒来时,噩梦才刚刚开始,原因是他传输的数据量很大(100M),只传输了一部分,并且传输过程断断续续的,有一部分数据根本无法传出去。那接下来该怎么办呢?
王叔叔在楼下大声喊道:“加一层传输层!”接着他又说:“资料在你妈妈的床头柜。”小明随即连忙找到资料,资料上写着:
向另一台计算机发送了正确的比特流数据。然而,当发送大量数据时,可能会花费很长时间,比如一个视频格式的数据。在这种情况下,网络会中断很多次。事实上,即便存在物理层和数据链路层,网络仍然经常中断,只是中断的时间通常为毫秒级别。
我需要保证在传输大量文件时的准确性。所以,我要对发出去的数据进行封装,就如同发快递那样,一个个地发送出去。
TCP 是用于发送大量数据的。我发送了 1 万个包出去,另一台电脑需要告诉我是否接收到了 1 万个包。如果缺少 3 个包,就告诉我是第 1001 个、第 234 个和第 8888 个包丢了。然后我再重新发送一次。这样就能保证对方完整接收这个视频。
UDP 是用来发送少量数据的。我发出 20 个包,通常不会丢包。所以,我不在意你收到多少个。在多人互动游戏中,也经常使用 UDP 协议,因为通常都是简单的信息,并且有广播的需求。如果使用 TCP,效率会很低,因为它会不断地告知主机收到了 20 个包,或者收到了 18 个包,然后再发送 2 个。如果有 1 万台计算机同时这样做,那么使用 TCP 会降低效率。相比之下,使用 UDP 更好,主机发送出去后就不管了,即使丢了几个包导致卡顿,也没关系,下次再发包时再进行更新。
TCP协议是会绑定IP和端口的协议,下面会介绍IP协议。”
他进行了如此这般的操作,最终把自己 100M 的游戏心得发送给了小红,这位同学是小明。
5.会话层(解除与建立与别的接口的联系)
然而,小红根本没有玩游戏这一情况。得知此消息后,小明愣住了。可是他并未放弃,而是将自己猜测小红可能喜欢的信息都发送给她。但是每次小明发送一次,都需要调用 TCP 去进行打包,接着调用 IP 协议去寻找路由,这样一来一回往往需要一天的时间,那该怎么办呢?
他再次翻看王叔叔的笔记本资料,上面写着:会话层能够协助我们构建并管理应用程序间的通信。它封装了调用 TCP 来进行打包的操作,接着又调用 IP 协议去寻找路由等。正因如此,他只需十几二十分钟,就能够成功搭建起传输数据的机器。
6.表示层(数据格式化,代码转换,数据加密)
有一次,小明传送了一份数据,这份数据是关于怎样选购化妆品的文章。小红对这份文章很感兴趣,然而当小红想要打开这个文件时,却发现根本无法打开。后来,在下课的时候,小红告诉小明自己无法打开这个文件。小明心想,自己明明用 Linux 系统完整地发送给了小红啊,这可真奇怪。但出于耍帅,小明只是淡淡地说:“我放学后再给你发一份!”
他坚信老王叔叔的资料笔记会有答案。
清楚地写着:现在能保证应用程序自动收发包和寻址。不过要用 Linux 来发包,因为两个系统语法不一致,就如同安装包,exe 在 Linux 下不能用,shell 在其他系统下也不能直接运行。所以需要表示层()来帮我们解决不同系统之间通信语法的问题。
小明马上用了一整个通宵,通过手动搭建的方式完成了表示层。接着,他传输了一份极为完美的文件给小红。
7.应用层(文件传输,电子邮件,文件服务,虚拟终端)
官方OSI说明图
TCP/IP协议
TCP/IP 协议是从七层模型简化形成的。它实际上涵盖了四层模型中的所有协议,要将其与 TCP 协议、IP 协议区分开来。
每一层对上一层而言是透明的。上层只需运用下层所提供的接口,而不会在意下层是怎样实现的。
与OSI七层协议的对比:
传输层:
https://img1.baidu.com/it/u=3726226693,2689862547&fm=253&fmt=JPEG&app=138&f=JPEG?w=608&h=500
网络层是主机与主机之间的通讯,而传输层则是进程之间的通讯。
为何要有传输层?
进程是资源分配的基本单位,计算机之间的信息传输其实就是一台计算机的进程传输到另一台计算机的进程当中。
一台计算机如何找到另外一台计算机呢?
通过 IP 协议来完成这一过程。多个进程能够将信息经由传输层传递至 IP 层,接着再传输到另一台计算机中,从而实现了相关操作。
那如何找到另外一台计算机的进程(pid)?
那就是通过端口来实现。到达另外一台计算机后,还需要通过端口号找到对应的进程,这就是端口的分用作用。
传输层主要有两种协议:UDP和TCP
一、UDP协议
特点:
UDP的首部格式(UDP头):
二、TCP协议
A、特点:
B、为何TCP是可靠的呢?
TCP 依赖停止等待协议,同时也依赖连续 ARQ 协议以及滑动窗口协议,以此来达到可靠的目的。
a、等待协议
b、连续ARQ协议
要清楚 TCP 协议的发送细节,就必须知道 TCP 报文首部。因为以上只是对 TCP 协议发送流程的简单了解。
TCP报文段的首部格式
TCP 是面向字节流的。然而,TCP 传输的数据单元是报文段,报文段由首部和数据这两部分构成,如下所示:
1.源端口和目标端口(各占两字节)
TCP 连接传输的数据中,每一个字节都有其对应的序号。一个报文段可能包含多个字节的数据,这里所说的序号指的是 TCP 报文段中起始的那个序号。下一个报文段的序号是该序号再加上报文数据的长度。在三次握手和四次挥手过程中,所说的 SYN 或 ACK 会消耗一个序号,指的就是这个序号。
确认号(占 4 字节):一次数据传输会被分成多个报文段。接收方接收完一次报文段后,若要发送确认(有时无需确认,因为是接收完发送窗口的报文段才确认),就会携带一个确认号,此确认号表示接收方想要接收的下一个报文的序号。
数据偏移指的是数据部分的起始位置与报文段起始位置的距离,而报文首部的长度就是这个距离。其单位是 4 字节,因为 4 位能表示的最大值是十进制的 15,所以 15 乘以 4 字节等于 60 字节,即 TCP 报文首部的最大长度为 60 字节。
5.保留(占6位):未被使用,全置为0
紧急 URG 意味着,只有当 URG 等于 1 时,紧急数据才是有效的。需要注意的是,此处的 URG 并非是紧急数据,它仅仅是一个标志,用于表明紧急数据是否有效。
确认 ACK 需满足特定条件,即当 ACK = 1 时确认号才有效。并且在建立连接后,全部传输的报文都要将 ACK 设置为 1。
推送 PSH 时,接收方机器会进行接收操作。只有当接收缓存变慢时,才会将接收到的数据交付到接收应用进程中。如果发送端把报文的 PSH 设置为 1,那么接收方接收到该报文后会立即将其交付到应用进程中。
复位 RST 有两个作用。其一,当 RST 等于 1 时,意味着 TCP 连接中出现了严重差错,此时必须释放连接,接着再重新建立运输连接。其二,当 RST 等于 1 时,会拒绝一个非法的报文段,或者拒绝打开一个连接。
同步 SYN 用于同步序号,它会告诉另一方,双方之间将从该序号开始传输报文段。当 SYN = 1 且 ACK = 0 时,表示这是一个连接请求报文。
终止 FIN 用于释放连接。当出现 FIN = 1 的情况时,意味着此报文的发送方已将其数据发送完毕,并且要求释放运输连接。
窗口是一个接收窗口,它占 2 字节,接收方允许发送方发送一定的数据量。
检验:检验接收过来的报文段,包括报文首部和用户数据,看其是否有误。
紧急指针占 2 字节。只有当 URG 等于 1 时,它才有效。它能指出紧急数据的末尾位置,而紧急数据的开始位置是整个报文段中用户数据的开头。
15.选项,长度可变,最长40字节
那到底TCP是如何实现可靠传输的呢?
TCP可靠传输的实现
一、通过滑动窗口来发送数据
二、超时重传时间的选择
https://img0.baidu.com/it/u=3453746839,376617580&fm=253&fmt=JPEG&app=120&f=JPEG?w=800&h=1067
采用的时间是根据 RTT 动态计算得出的,而不是直接采用固定的时间。
RTT:发送一个报文段到收到对应的ACK所花费的时间
RTO:超时重传时间
RTTs是一个加权平均RTT时间
RTTd是RTTs偏差的加权平均
RTO = RTTs + 4 * RTTd
如果出现了重传,这次的 RTT 会使 RTTs 增大。在这种情况下,不会用该 RTT 来计算 RTTs。
三、确认SACK
是一个TCP报文首部的选项。
在数据传输期间,接收方有可能未按顺序接收到部分报文段。在这种情况下,序号的作用是告知发送方重新传输这些报文段。而 SACK 选项则是用来告知发送方需要传输哪些报文段的。
TCP传输连接管理
连接的三个阶段:建立连接、数据传输、连接释放
在建立连接的过程中要解决三个问题:
1、使每一方都知道对方的存在
2、协商一些参数
3、能够运输实体资源
主动建立连接的一端叫客户端,被动等待连接建立的一方叫服务器
连接建立(三次握手)
如图:
每次发送一个 seq 的时候,就会消耗一个序号。因此,在确认的时候,会发现 ack 总是等于另一端所请求的 seq 加 1。
为何需要第三次握手?
假设没有第三次握手(即A再次确认)
很久很久以前,A向 B 发送了一个连接请求。然而,由于网络滞留,这个请求未能到达 B 处,因此 B 也没有确认并返回给 A。接着,A 又发送了一个连接请求给 B,这次 B 收到了连接请求并返回了一个确认给 A。随后,两端开始了愉快的数据传输之旅。当传输结束后,它们分别断开了连接,各自去做各自的事情。但是过了一段时间后,滞留在网络中的 A 发出的连接请求抵达了 B。B 以为 A 要传输数据,于是给 A 回了一个确认。然而,A 并不需要输出传输,也未理会这个确认。而 B 却在傻傻地等待 A 传输数据,这会浪费 B 的资源。
但是存在第三次 A 的确认情况时,A 这个处于滞留状态的连接会传给 B,B 会返回一个确认。然而,若 A 不想传输数据,就不会给 B 回一个确认(即第三次握手),在此情况下,B 没有收到该确认,也就不会等待 A 传输数据。
连接释放(四次挥手)
如图:
客户端发送连接。FIN=1 标志着 A 已经完成了数据的发送。这是第一次挥手的动作。
第二次挥手:B回了一个确认,此时A与B的发送连接就断开了。
第三次挥手:TCP 连接是全双工通信的。B 保留着一个对 A 的发送连接。如果等到 B 也不需要发送数据给 A 时,B 会发送一个连接给 A 。这个连接的 seq 等于一个大于或等于 v 的值。因为在 A 与 B 断开发送连接到 B 与 A 断开发送连接期间,有可能 B 向 A 发送了数据,也就是消耗了序号。
A 收到 B 的连接后,会回一个响应给 B。在这个过程中,会有一个 2MSL 长的等待时间。时间一过,就会真正地断开与 B 的全部连接。
为什么需要2MSL的等待时间?
MSL:最长报文寿命
A 发送确认给 A 之后,倘若出现某些状况,比如连接被丢弃等,导致确认无法抵达 B 处。那么 B 会重新向 A 发送一个连接,然而此时 A 却停止了动作,B 则一直处于等待状态,实际上存在一个保活时间。
如果存在这个等待时间,即便 A 的 ACK 确认丢失了,B 也会再次向 A 发送一个连接。A 接收到这个连接之后,会重新计算等待时间。并且 A 会再次进行确认。
应用层
页:
[1]