全网最全的计算机网络协议总结,入门看这篇就够了!
OSI七层协议
1.物理层
很久很久以前,还没有超级计算机,也没有华为P30。比较调皮的小明想把自己在机器上写的一些个人游戏经验(如何玩好农药王)发给校花肖红,希望能赢得她的芳心。小明是个勤奋的人,总结的比较详细(100M左右)。但他怎么能从自己的机器上上传到小红的机器上呢?经过一番询问,他发现太平洋彼岸的科学家专门发明了一种技术物理层,专门解决像小明这样的单身人士的问题。 。该层主要定义物理设备标准,如网线接口类型、光纤接口类型、各种传输介质的传输速率等,其主要功能是传输比特流(即将1和0转换成电流强度进行传输) ,到达目的地后再转换为1和0,也就是我们常说的数模转换、模数转换)。该级别的数据称为位。
他非常兴奋。经过一个月的努力,他终于搭建了这个物理层。
2、数据链路层:
然而,老天爷似乎跟小明开了个玩笑。楼下小润发超市的网线和光纤最近都卖完了,但是这个物理层传输的数据只能通过网线来传输。该怎么办! ! 。
此时,他体内的男性荷尔蒙促使他的大脑以光速运转。最后肚子饿了,没办法,只好去学校食堂三楼吃麻辣烫。这时,我听到坐在隔壁的王叔叔(老王)说,科学家发明了一种可以通过无线电传输的技术。什么?这不是完美解决我的问题吗?小明连忙对隔壁老王说谢谢,老王流下了幸福的泪水! !
经过一番努力查找资料,小明发现:这项技术可以通过电线发送数据流,也可以通过其他介质传输。那么就必须保证传输的比特流是正确的并且具有纠错功能。定义如何格式化数据以进行传输以及如何控制对物理介质的访问。该层通常还提供错误检测和纠正,以确保数据的可靠传输。
小明将该层技术称为:数据链路层
3、网络层:
由于小明的家离肖红的家很远,无线电信号无法传输到任何地方,但这对小明来说一点也不困难。他在远离小红家的路上搭建了多个节点(路由器、交换机)用于信号传输。但因为他有时会被男性荷尔蒙冲昏头脑,所以他构建的信号节点有点乱,而且数量很多。如果他想用最短路径进行传输怎么办?夜已深了,小明沮丧地走回家。他看到今天见到的王叔叔,匆匆地从家里走出来。他连忙拉住王叔,将自己的烦恼告诉了他,希望王叔能给他一些建议。帮助。小明说完,王叔叔从紧张变成了和蔼,对小明说:其实网络层已经有人发明了。即具有寻址功能的路由器和交换机所实现的功能。这一层定义的是IP地址,通过IP地址来寻址。于是IP协议诞生了。该层选择最佳路径,这就是路由的作用。
4、传输层
为了趁热打铁,小明熬夜查资料了解相关信息,简单架设了网络层,开始传输数据,趁着传输过程美美地睡了一觉。当他起身的时候,噩梦才刚刚开始,因为他传输的数据太大(100M)只传输了一部分,而且是断断续续的,有一部分数据根本无法传输。该怎么办?
“加传输层!!!”:王叔叔在楼下大声喊道,“资料在你妈妈的床头柜上。”王叔叔继续说道。小明很快查到了资料,上面写着:“
我可以正确地将比特流数据发送到另一台计算机,但是当我发送大量数据时,可能需要很长时间,例如视频格式,并且网络会中断很多次(实际上,即使使用物理层而数据链路层,网络仍然频繁中断,但中断时间在毫秒级别)。
嗯,我还需要在传输大量文件时确保准确性。因此,我需要对发送出去的数据进行封装。就像寄快递一样,一件一件的。
例如,TCP用于发送大量数据。如果我发送 10,000 个数据包,另一台计算机会告诉我它是否收到了 10,000 个数据包。如果丢失了3个数据包,它会告诉我数字1001。丢失了234,8888个数据包,然后我会再次发送它们。这样就可以保证对方完整地收到视频。
例如,UDP 用于发送少量数据。如果我发送20个数据包,我通常不会丢失任何数据包,所以我不在乎你收到多少个数据包。在多人互动游戏中,经常使用UDP协议,因为它通常是简单的信息,并且有广播的需求。如果使用TCP,效率很低,因为它会一直告诉主机我收到了20个数据包,或者我收到了18个数据包,再给我发两个!如果一万台计算机同时这样做,那么使用TCP实际上会降低效率。最好使用UDP。楼主发了,忘记了。如果你丢失了几个数据包,你就会陷入困境。算了,下次更新包吧。
TCP协议是绑定IP和端口的协议。下面介绍IP协议。 ”
通过这样的操作,他!小明终于把自己的100M游戏经验发给了小红。
5、会话层(与其他接口断开和建立连接)
不过,小红根本不玩游戏。得知这个消息后,小明愣住了。但他并没有放弃,而是将自己猜测小红喜欢的信息全部发给了他。但是小明每次发过来,是不是都要调用TCP来打包,然后再调用IP协议来寻找路由呢?回去也就一天的时间,那我该怎么办呢?
他又翻了翻王大爷的笔记本资料,写道:会话层可以帮助我们建立和管理应用程序之间的通信。它封装了调用TCP进行封装,然后调用IP协议查找路由等操作。就这样,他只用了十、二十分钟,就成功的设置了机器来传输数据。
6.表示层(数据格式化、代码转换、数据加密)
有一次,小明传了一条资料,是一篇关于如何购买化妆品的文章。小红对此很感兴趣,但是当小红想用自己的手机打开该文件时,却发现根本打不开。当小明告诉小明无法打开该文件时,小明认为完全使用Linux系统发送给小红会很奇怪。不过为了冷静,小明只是轻声说道:“放学后我给你发。”一份!”
虽然小明此时不知道问题出在哪里,但他坚信王叔叔的资料笔记上一定有答案。
真的吗!上面明确写着:“现在我可以保证应用程序能够自动收发数据包和地址。但是我想使用Linux来发送数据包。两个系统的语法不一致。就像安装包一样,exe无法使用是的,shell不能直接运行,所以我们需要一个表示层()来帮助我们解决不同系统之间的通信语法问题。
小明立即花了一整晚手动设置了表现层,并将一个完美的文件传输给了小红。
7.应用层(文件传输、电子邮件、文件服务、虚拟终端)
OSI 官方插图
TCP/IP协议
TCP/IP协议从七层模型简化为四层。 (TPC/IP协议实际上是指四层模型中的所有协议,区分TCP协议和IP协议)
每层对于上层都是透明的。上层只需要使用下层提供的接口,并不关心下层是如何实现的。
与OSI七层协议的比较:
传输层:
网络层是主机之间的通信,而传输层是进程之间的通信。
为什么要有传输层?
因为进程是资源分配的基本单位,所以计算机之间的信息传输只是一台计算机的进程转移到另一台计算机的进程。
一台计算机如何找到另一台计算机?
那是通过IP协议来完成的(复用,多个进程可以将信息通过传输层传输到IP层,然后传输到另一台计算机)。
如何找到另一台计算机的进程(pid)?
也就是使用端口(单独使用,到达另一台电脑后,要通过端口号找到对应的进程)。
传输层主要有两种协议:UDP和TCP
1.UDP协议
特征:
UDP头格式(UDP ):
2.TCP协议
一、特点:
B. 为什么 TCP 可靠?
事实上,TCP依靠停止等待协议和连续ARQ协议+滑动窗口协议来达到可靠的目的。
一个。等待协议
b.连续ARQ协议
以上只是对TCP协议的发送过程的简单了解。如果想知道发送细节,就必须知道TCP消息头。
TCP 段头格式
虽然TCP是面向字节流的,但TCP传输的数据单元是报文段。报文段由报头和数据组成,如图:
1.源端口和目的端口(各两个字节)
2、序列号(占用4个字节):TCP连接传输的每个字节的数据都有一个序列号,一个报文段可能有多个字节的数据。该序列号指的是 TCP 消息段中的起始点。下一个报文段开头的序号是序号加上报文数据的长度(三次握手、四次挥手时会消耗序号的SYN或ACK就是指这个序号)
3、确认号(占用4个字节):因为一次数据传输会被分成多个报文段,如果接收方在收到一个报文段后想发送确认(可能不需要确认,因为是接收后的报文)发送窗口)段),它会携带一个确认号,表示接收方要接收的下一条消息的序列号。
4、数据偏移(占4位):数据部分的起始位置与报文段的起始位置之间的距离就是报文头的长度。单位是4字节,所以4位可以表示十进制的最大值。 15,即15 x 4字节=60字节,TCP报文头最大长度为60字节
5、保留(占用6位):未使用,全部设置为0
6.紧急URG:紧急数据仅在URG=1时有效。注意,这里的URG不是紧急数据,它只是一个表示紧急数据是否有效的标志。
7. 确认ACK:确认号仅在ACK=1时有效。当连接建立时,所有传输的消息必须将 ACK 设置为 1。
8. 按PSH:接收机有接收。当接收缓存速度较慢时,接收到的数据将被传递到接收应用程序进程。如果发送端将消息的PSH设置为1,接收端收到消息后立即投递给应用进程
9、重置RST:两个作用: 1、当RST=1时,表示TCP连接发生严重错误,必须释放连接,然后重新建立传输连接。 2、当RST=1时,拒绝非法报文段或拒绝打开连接。
10、同步SYN:用于同步序号(告诉对方将从这个序号开始传输报文段)。当SYN=1时,ACK=0表示连接请求消息。
11.终止FIN:用于释放连接。当FIN=1时,表示该报文的发送方数据已经发送完毕,需要释放传输连接。
12. (占用2字节),是接收窗口,接收方允许发送方发送的数据量
13、校验和(占用2个字节):检查接收到的报文段(报文头和用户数据)是否错误
14、紧急指针(占用2字节):仅当URG=1时有效,表示紧急数据的结束位置(起始位置为整个报文段中用户数据的开头)
15.选项,可变长度,最多40字节
那么TCP是如何实现可靠传输的呢?
TCP可靠传输的实现
1.通过滑动窗口发送数据
2、超时重传时间的选择
使用基于RTT动态计算的时间,而不是直接使用固定时间。
RTT:发送一个报文段并收到相应的ACK所花费的时间
RTO:超时重传时间
RTTs 是加权平均 RTT 时间
RTTd 是 RTT 偏差的加权平均值
RTO = RTTs + 4 * RTTd
如果发生重传,则本次的RTT会使RTTs变大,此时的RTT将不会用于计算RTTs。
3.确认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会再次确认
应用层