OSI 指的是 Open System Interconnection Reference Model,开放式系统互联模型。
应用层:
- 处理业务问题,处于最上方,只关心业务逻辑,不关心数据传输。
表现层:
- 负责协商用于传输的数据格式,并转换数据格式,转换成对方能够用的数据。
会话层:负责管理两个网络实体间的连接,目标是提供稳定事实且连续的连接。
- 主要是管理连接的建立和释放,维持通信。
传输层:负责将数据从一个实体传输到另一个实体,但不负责解决数据如何传输。主要负责
- 数据拆分重组;
- 数据传输纠错;
- 处理数据频繁交换;
- 控制传输数据速率;
- 标明参与传输的应用服务器的端口号,用于端口寻址。
网络层:
- 负责把一个封包从一个 IP 地址传输到另一个 IP 地址。
在传输层数据会变成一个封包。
核心是路由,路由算法帮助封包选择下一个目的地,路径最短?延迟最低?还是默认写死?
数据链路层:
- 确保两个临近设备间数据的传输,隐藏底层实现;
- 帧同步:两个设备之间传输时的协商速率问题;
- 数据纠错。
物理层
封装和隐藏具体的传输手段,并且提供稳定的传输接口。
OSI 的意义是统一了所有人对互联网的认知,但是分层设计相对臃肿,并非每一层都是必要的。
例如:ping 的服务不需要会话层,也不用表现层。
一般应用层会被设计成应用层、表示层和会话层三层结合,然后就总共五层了。
二、TCP/IP 互联网协议群TCP/IP 主要解决5个问题:报文拆分、增加协议头、数据在相邻设备间数据传递、路由和寻址、数据重组。
报文拆分:用户数据量大,不支持一次性传输,需要拆分成多个数据块,另一方面还可以报文拆分可以复用传输路径。
增加协议头:数据分块后在接收端需要重组,所以需要使用头部来添加字段描述。
数据在相邻设备间传递,数据从设备1发送到网关1,再由网关1发送到网关2,网关2发送到网关3,在从网关3发送到设备2。
路由算法: 数据从一个节点到另一个节点之后,接下来该去往哪里,就涉及到路由算法的问题,通过算法寻找到下一个要到达的节点。
数据重组:和报文拆分相反,拆分后的报文通过传递后,根据消息头进行重组,再给接收方处理。
TCP/IP协议群的5层模型应用层:
数据从一个应用发往另一个应用的过程。
传输层:增加协议头
主机到主机之间的传输。
TCP 协议、UDP 协议、TLS/SSL、SCTP 等。
网络层:增加 IP 头。
提供路由和寻址,网络层需要增加自己的封包头,增加的封包头也会影响传输次数,可能添加一次报文拆。
IP 协议(ipv4 和 ipv6)、ICMP 协议、IPSec 协议。
数据链路层:
两个节点之间的物理连接。
物理层:
负责0-1信号的传输。
删除了会话层,是因为会话是虚拟概念,不是必需的。
删除了表示层,数据压缩、数据格式转换不是应用必需的。
如果应用需要这俩层,可以在应用层实现或者在传输层实现。
三、TCP 协议TCP 就是 Transport Control Protocol,传输层控制协议是一个可以提供可靠的、支持全双工、连接导向的协议,因此在客户端和服务端之间传输数据的时候,是必须先建立一个连接的。
1.什么是连接?
连接也被成为会话(Session),能让两个通信的程序确保彼此都在线,可以加快响应请求速度,使得通信更稳定、更安全,但是会消耗更多资源。
2.什么是全双工?
单工:任何时刻数据只能单向发送。
半双工:允许数据在两个方向上传输,在某一时刻,只允许数据在一个方向上传输。
全双工:任何时刻都能双向发送数据。
3.什么是可靠性?
可靠性是指数据保证无损传输,使无序的数据恢复有序,多播时每个接收方都能获得无损副本。多播可能要求具有强可靠性,也就是他一个接收方收到数据了,也同时要求所有的接收方都能获取到数据,反之,要求所有的接收方都获取不到数据。
TCP 协议的工作过程因为要保持连接和数据可靠性,这里建立连接过程是有一个约束的,TCP 得保证每条发出去的数据必须得返回来,如果数据发出去了没有返回,就不叫连接,连接就是发出数据能尽快给返回,如果发出了数据,返回的时候慢了,那就认为超时了,那就重新连接或者断开连接。
建立连接的过程(三次握手):
发出数据通常叫做 “数据同步” ,所以叫做 syn;
返回通常叫做 “响应” ,叫做 ack 。
TCP 协议总共要做的事情就是:报文拆分、增加协议头(TCP 头)、数据重组。
TCP 报文拆分应用层数据通过报文拆分,会变成一个个数据块 chunk ,也叫做 TCP 段 Segment,为什么要进行报文拆分呢,一方面因为应用层很多时候无法一次性传输完,另一方面拆分后的数据可以实现并行传输。
拆分是比较消耗数据资源的,需要 CPU 频繁的进行内存 *** 作,另一方面 TCP 也只是对数据做一个初步的拆分,网卡会进行更细粒度的拆分。
传输数据如何保证数据?
TCP 分的段其实是非常多的,可能不能一次性把所有的段进行排序,只能部分排序,有一个时间窗口的方案,每次只排序固定一个时间段内的数据,接收方等于每次给发送方一个时间窗口,在这个时间窗口内,把所有数据拿到,然后进行排序,接收方接收到这个时间窗口的数据以后,会对这些数据进行排序,如果发现不连续,他就会抛弃掉完整的时间窗口数据,让发送方重发。
因为 TCP 协议是一个双工协议,意味着 A 可以不断的给 B 传送,B 可以不断的给 A 传送,所以 TCP 给发送方和接收方设计了两个序号:
发送序号(seq)和 接收序号(ack)。
各端的发送序号其实就是对方的接收序号。
TCP 协议头源端口:描述发送方机器上的应用。
目标端口:描述接收方服务器上的应用。
发送序号(Seq)和接收序号(Acq),每个序号是32个字节,32位最大到 40e,可以支持很长时间传输。
TCP 头-标志位在 TCP 协议里面有9个标志位:
NS、CWR、ECN: TCP 扩展协议。
ECN:显示拥塞控制协议,有助于帮助解决延迟和丢包问题。
URG:紧急标志位,如果有一个数据的标志位被置为1了,代表这是一个紧急数据,这种紧急数据是需要优先处理的。
SYN:Synchronize Sequence Numbers 同步序号,也就是建立连接
FIN:终止连接
ACK:Achnowledgment 响应
PSH:push 传送数据
RST:Reset Connection 重置连接
TCP 协议周边配置TCP 可以通过流控协调两边速率保证数据可靠性;通过拥塞控制能力帮助确定网络中用户情况来决定传输速度。
TCP 纠错能力:TCP 拥有一个 16 bit 的 Checksum 字段,Checksum 是一个函数,把原文映射到一个不可逆的 16 bit 的编码中这样就可以知道原文在传输过程中有没有发生变化。
TCP 流控能力:让发送方和接收方协商一个合理的收发速率,让两边都可以稳定的工作,流控能力利用的是滑动窗口,就是 TCP 报文拆分里面的时间窗口。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)