OSI七层参考模型
OSI模型,开放式通信系统互联参考模型(Open System Interconnection Reference Model),是国际标准化组织(ISO)提出的一个试图使各种计算机在世界范围内互连为网络的标准框架,简称OSI(OSI/RM)。
思想:分层
- 更利于标准化。
- 降低各层次之间的关联性:某一层协议的增加或者减少,尽量不要影响其他层次。
相同层次之间的设备协议具有相同或者相似的作用,不同层次之间具有明显的差异,每一层都在下一层的基础之上提供某种增值服务。
OSI七层模型的七个层次
-
应用层
包括各种协议,具体的面向用户的应用。
-
表示层
提供数据格式、变换和编码转换,从应用层接收消息,转换格式,并传送到会话层。
-
会话层
发现,建立,维护和断开一次会话连接。
负责执行会话规则(如连接是否允许半双工或全双工通信)、同步数据流以及当故障发生时重新建立连接。
-
传输层
优化传输,端对端的传输。
接收来自会话层的数据,向网络层传送分组并确保分组完整和正确到达它们的目的地。
区分进程和服务:端口号(16位二进制 0-65535)
端口号的主要作用是表示一台计算机中的特定进程所提供的服务。
知名端口号:是一些众人皆知著名的端口号,这些端口号固定分配给一些服务,范围是:0-1023
例如:80端口是HTTP协议服务,443端口是HTTPS协议服务等。
-
网络层
负责端到端的数据的路由或交换。
路由器 — IP地址(逻辑地址)
-
数据链路层
电信号与二进制之间的转换。介质访问控制层MAC,逻辑链路控制层LLC。
交换机 — MAC地址(物理地址)
-
物理层
处理电信号。
从数据链路层接收,将比特流转换成底层物理介质上的信号。
TCP/IP模型
TCP/IP协议簇
TCP/IP协议簇是一个四层协议系统,自顶向下分别是:应用层 传输层 网络层 数据链路层。每一层完成不同的功能,且通过若干协议来实现,上层协议使用下层协议提供的服务。
协议
为了完成计算机之间有序的信息交换,提出了通信协议的概念,其定义是相互通信的双方(或多方)对如何进行信息交换所必须遵守的一整套规则。
OSI 模型和 TCP/IP 模型的差异
OSI的上三层合并为一层,数据链路层与物理层合二为一,OSI分层太细并不实用。
TCP/IP标准模型与TCP/IP对等模型都被广泛的使用,只是侧重点稍有不同。
协议数据单元
协议数据单元PDU(Protocol Data Unit)是指对等层次之间传递的数据单位。
应用层 — 数据报文(message)
传输层 — 数据段(segment)
网络层 — 数据包(packet)
数据链路层 — 数据帧(frame)
物理层 — 比特流(bit)
封装与解封装
封装 — 每一层都把上一层的协议包当成数据部分,加上自己的协议头部,组成自己的协议包。
解封装 — 封装的逆过程,可以理解为还原数据的过程。
TCP/IP协议
应用层
最上层的,用户可以直接接触到的就是应用层(Application Layer),电脑或手机使用的应用软件都是在应用层实现。
应用层只需要专注于为用户提供应用功能。
比如常见的服务与对应端口 HTTP — 80、HTTPS(HTTP+SSL/TLS) — 443、FTP — 20/21、Telnet — 23、DNS — 53、DHCP—67/68 等。
传输层
应用层的数据报会传给传输层,传输层(Transport Layer)是为应用层提供网络支持的。
在传输层会有两个传输协议,分别是 TCP 和 UDP。
TCP 的全称叫传输控制协议(Transmission Control Protocol),大部分应用使用的正是 TCP 传输层协议,比如 HTTP 应用层协议。TCP 相比 UDP 多了很多特性,比如流量控制、超时重传、拥塞控制等,这些都是为了保证数据包能可靠地传输给对方。
UDP 相对来说就很简单,简单到只负责发送数据包,不保证数据包是否能抵达对方,它实时性相对更好,传输效率也高。
TCP和UDP的区别
-
TCP是面向连接(TCP三次握手)的协议,而UDP是无连接的协议。
-
TCP的传输是可靠的 —— 排序、确认、重传、流控,而UDP的传输是不可靠的。
-
TCP可以进行流控(滑动窗口机制),而UDP不行。
-
TCP可以进行分段,而UDP不能。
-
TCP转发数据包的速率慢,并且占用资源比较多。UDP的转发效率高于TCP,并且占用资源也会少一些。
应用场景:TCP更加适用于对数据包可靠性要求较高的情况,比如说传输文件,邮件等,而UDP适用于对可靠性要求较低,但是对转发效率要求较高的场景,比如说,即时通讯类。
TCP报头
TCP的报头组成:源端口、目的端口、 序号、确认号、 首部长度、保留位、标志位、窗口、 检验和、紧急指针。
-
源目端口号:各占2个字节,分别写入源端口和目的端口,即表示来源和目标的进程。
-
序号:占4个字节,TCP连接中传送的字节流中的每个字节都按顺序编号。
-
确认号:占4个字节,是期望收到对方下一个报文的第一个数据字节的序号。
-
首部长度:占4位,它指出TCP报文的数据距离TCP报文段的起始处有多远。
-
保留位:占6位,保留今后使用,但目前应都位0。
-
标志位:重要的三个,确认ACK,仅当ACK=1时,确认号字段才有效;同步SYN,在连接建立时用来同步序号;终止FIN,用来释放一个连接。
-
窗口大小:占2字节,指的是通知接收方,发送本报文你需要有多大的空间来接收。
-
检验和:占2字节,校验首部和数据这两部分。
-
紧急指针:占2字节,当URG=1时才有意义,指出本报文段中的紧急数据的字节数。
TCP报头最小20字节,没有选项字段(只有前5行)
TCP三次握手
TCP 是面向连接的协议,所以使用 TCP 前必须先建立连接,而建立连接是通过三次握手来完成的。三次握手可以确保双方同时具备完整的发送和接收数据的能力。
-
一开始,客户端和服务端都处于
CLOSE
状态。先是服务端主动监听某个端口,处于LISTEN
状态。 -
第一次握手,客户端会随机初始化序号(c_seq_num = x),将此序号置于 TCP 首部的序号字段中,同时把 SYN 标志位置为 1,表示 SYN 报文。接着把第一个 SYN 报文发送给服务端,表示向服务端发起连接,该报文不包含应用层数据,之后客户端处于
SYN-SENT
状态。 -
第二次握手,服务端收到客户端的 SYN 报文后,首先也随机初始化自己的序号(s_seq_num = y),将此序号填入 TCP 首部的序号字段中,其次把 TCP 首部的确认号字段填入
x+1
,接着把 SYN 和 ACK 标志位都置为 1。最后把该报文发给客户端,该报文也不包含应用层数据,之后服务端处于SYN-RCVD
状态。 -
第三次握手,客户端收到服务端报文后,还要向服务端回复一个应答报文,首先该应答报文 TCP 首部 ACK 标志位置为 1 ,其次确认号字段填入
y+1
,最后把该报文发送给服务端,这次报文可以携带客户到服务端的数据,之后客户端处于ESTABLISHED
状态。 -
最后,服务端收到客户端的应答报文后,也进入
ESTABLISHED
状态。
一旦完成三次握手,双方都处于 ESTABLISHED
状态,此时连接就已建立完成,客户端和服务端就可以相互发送数据了。
TCP四次挥手
TCP 断开连接是通过四次挥手方式的方式完成,双方都可以主动断开连接,断开连接后主机中的资源将被释放。
- 第一次挥手,客户端发送一个 FIN 标志位被置为 1 的报文,即 FIN 报文,告诉服务器需要关闭连接。之后客户端进入
FIN_WAIT_1
状态。 - 第二次挥手,服务端收到该报文后,会发送一个 ACK 的确认包,告诉客户端接收到关闭的请求。发送完成后,服务端进入
CLOSE_WAIT
状态,客户端收到这个包后,进入FIN_WAIT_2
状态,等待服务器关闭连接。 - 第三次挥手,等待服务端处理完数据后,服务端准备好关闭连接时,也向客户端发送 FIN 报文,告诉客户端准备关闭。之后服务端进入
LAST_ACK
状态,等待客户端确认。 - 第四次挥手,客户端接收到服务端的关闭请求,再发送一个 ACK 的确认包,进入
TIME_WAIT
状态,服务端收到了 ACK 应答报文后,就进入了CLOSE
状态,服务端已经完成连接的关闭。客户端在经过 2MSL 一段时间后,自动进入CLOSE
状态,此时客户端也完成了连接的关闭。
每个方向都需要一个 FIN 和一个 ACK,因此通常被称为四次挥手。
TCP流量控制 — 滑动窗口机制
滑动窗口,是TCP使用的一种流量控制方法。该机制允许发送方在停止并等待确认前可以连续发送多个分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输。
假定发送方设备以每一次三个数据包的方式发送数据,也就是说,窗口大小为3。发送方发送序列号为1、2、3的三个数据包,接收方设备成功接收数据包,用序列号4确认。发送方设备收到确认,继续以窗口大小3发送数据。当接收方设备要求降低或者增大网络流量时,可以对窗口大小(WIN值)进行减小或者增加。
TCP分段大小
MTU—最大传输单元,MTU规定了数据到数据链路层的大小不能超过1500字节。
MSS—最大段长度(MTU - 网络层报头(最短20字节) - 传输层报头(最短20字节)
)= 1460字节
网络层
IP协议在 TCP/IP 参考模型中处于第三层,也就是网络层。
IP报头
- 版本:占4个位,标识目前采用的IP协议的版本号(0100-IPv4,0110-IPv6)。
- 首部长度:占4个位,这个字段的作用是为了描述IP包头的长度,因为在IP包头中有变长的可选部分。
- 区分服务:占1个字节,定义包的优先级,时延,吞吐量,可靠性,传输成本。
- 总长度:占2个字节, 以字节为单位计算的IP包的长度(包括头部和数据),所以IP包最大长度65535字节。
- 标识:占2个字节,该字段和标志和片偏移字段联合使用,对大的上层数据包进行分段(fragment)操作。
- 标志:占3位,该字段第一位不使用。第二位是DF(Don't Fragment)位,DF位置为1时表明路由器不能对该上层数据包分段。如果一个上层数据包无法在不分段的情况下进行转发,则路由器会丢弃该上层数据包并返回一个错误信息。第三位是MF(More Fragments)位,当路由器对一个上层数据包分片,则路由器会在除了最后一个分片的IP包的包头中将MF位设为1。
- 片偏移:占13位,较长的数据包在分片后,某片在原分组中的相对位置,接收端靠此来组装还原IP包。
- 生存时间:占1个字节,TTL,当IP经过沿途的每一个路由器的时候,路由器会将IP包的TTL值减1。直到减到0时,该IP包会被丢弃。
- 协议:占1个字节,标识了上层所使用的协议。
- 首部校验和:占2个字节,只用来做IP首部的正确性检测,但不包含数据部分。
- 源和目的地址:各占4个字节,标识了这个IP包源和目的主机的IP地址。
IP分片
链路层的数据部分就是IP分组,该分组的MTU是1500字节,当网络层的IP分组超过了1500字节,此时就要进行分片。
-
标识
同一个IP数据报的分片,使用相同的标识。
-
标志
最高位是保留位 , 没有意义 。
中间位DF=1时,不能分片;DF=0时,允许分片。
最低位MF=1时,表示后面还有分片;MF=0时,本分片就是该分组的最后一个分片,后面没有分片。
只有DF=0时,MF才有意义。
-
片偏移
较长的分组在分片后,中间的某个分片在原来的 IP 分组中的相对位置。片偏移以8个字节为偏移单位。
数据链路层
生成了 IP 数据包之后,接下来要交给数据链路层(Link Layer)封装成MAC帧。
MAC头部是以太网使用的头部,它包含了接收方和发送方的MAC地址等信息,可以通过ARP协议获取对方的MAC地址。
为网络层提供链路级别传输的服务,负责在底层网络上发送原始数据包,工作在网卡这个层次,使用MAC地址来标识设备。
综上所述,TCP/IP 网络通常是由上到下分成4层,分别是应用层,传输层,网络层和数据链路层。
标签:字节,IP,模型,网络,TCP,数据包,服务端,客户端 From: https://www.cnblogs.com/smileleooo/p/17757929.html