一.OSI七层模型
OSI模型指的是Open System Interconnection Reference Model,即开放式系统互联模型。它是世界上第一个试图在世界范围内规范网络标准的框架,但是因为实在太过复杂与繁琐,基本上没人执行它。
1.应用层
应用层位于OSI模型最上方
只关心业务逻辑,不关心数据的传输
2.表示层
负责协商用于传输的数据格式,并转换数据格式
3.会话层
负责管理两个连网实体间的连接
功能及特点:建立连接,维持通信,释放连接
4.传输层
负责将数据从一个实体(一个服务或应用)传输到另一个实体,但不负责数据传输的方式。
5.网络层
负责把一个封包从一个IP地址传输到另一个IP地址
6.链路层
确保两个临近设备间数据的传输,并隐藏底层实现
帧同步:两个设备之间传输时的协商速率问题
7.物理层
封装和隐藏具体的传输手段,并且提供稳定的传输接口
比如:电缆、光纤、蓝牙等
二.TCP/IP五层模型
1.应用层
数据从一个应用发往另一个应用的过程
2.传输层
主机到主机之间的传输
可选协议:TCP协议、UDP协议、TLS/SSL、SCTP等
3.网络层
提供路由和寻址
可选协议:IP协议(ipv4和ipv6)、ICMP协议、IPSec协议
4.数据链路层
两个节点之间的物理连接
5.物理层
负责0-1信号的传输
三.数据分段分片
在数据传输过程中,数据量大,网络底层设备不支持,需要将数据拆分成多个数据块,数据分块后在接收端需要重组,所以需要使用首部来添加一些描述字段。
包、帧、数据包、段、消息
以上五个术语都用来表述数据的单位,大致区分如下:
包可以说是全能性术语;
帧用于表示数据链路层中包的单位;
数据包是 IP 和 UDP 等网络层以上的分层中包的单位;
段则表示 TCP 数据流中的信息;
消息是指应用协议中数据的单位。
TCP分段与IP分片
MTU(最大传输单元)是链路层中的网络对数据帧的一个限制,以太网为例,MTU为1500个字节。
MSS(最大分段大小)是TCP数据包每次能够传输的最大数据分段,TCP报文段的长度大于MSS时,要进行分段传输。
在IP协议层数据长度如果大于MTU,就要进行分片传输,使得每片数据报的长度小于MTU。
MSS的值一般为MTU值减去两个首部大小(需要减去IP数据包包头的大小20Bytes和TCP数据段的包头20Bytes)所以如果用链路层以太网,MSS的值往往为1460。
TCP分段的原因是MSS,IP分片的原因是MTU,由于一直有MSS<=MTU,很明显,分段后的每一段TCP报文段再加上IP包头后的长度不可能超过MTU,TCP报文段很少会发生IP分片的情况。
每个分层中,都会对所发送的数据附加一个首部,在这个首部中包含了该层必要的信息,如发送的目标地址以及协议相关信息。通常,为协议提供的信息为包首部,所要发送的内容为数据。在下一层的角度看,从上一层收到的包全部都被认为是本层的数据。
下图以用户 a 向用户 b 发送邮件为例子:
三.TCP协议
TCP全名是(Transport Control Protocol),是一个可以提供可靠的、支持全双工(任何时刻都能双向发送数据)、连接导向的协议,因此在客户端和服务端之间传输数据的时候,是必须先建立一个连接的。
在TCP对数据块增加的头部信息中包含源端口号、目标端口号、标志位、序列号等。
TCP拥有一个16bit的Checksum字段,Checksum是一个函数,把原文映射到一个不可逆的16bit的编码中这样就可以知道原文传输过程中有没有发生变化
标志位包括:
NS、CWR、ECE:TCP扩展协议
ECN:显示拥塞控制协议,有助于帮助解决延迟和丢包问题
URG:紧急标志位
SYN(Synchronize Sequence Numbers):同步序号,也就是在建立连接
FIN:终止连接
ACK(Achnowledgment):响应
PSH(push):传送数据
RST(Reset Connection):重置连接
连接建立(三次握手)
数据传输
应用层数据很大时无法一次性传输完,拆分后可实现并行传输
数据包在传输过程中,会被标注序列号,通过序列号可以保证所有传输的数据按照正常的次序进行重组,而且通过确认保证数据传输的完整性。
TCP的序列号包括发送序号(Seq)、接收序号(Ack),一个端的发送序号是另一个端的接受序号。
断开连接(四次挥手)
四.UDP协议
UDP(User Datagram Protocol)协议称为用户数据报协议,为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。
由于UDP数据报不会自己进行分段,因此当长度超过了MTU时,会在网络层进行IP分片
UDP的封包格式:
UDP/TCP对比:
五.IP协议
IP协议(Internet Protocol)目前主要有两种架构,IPv4和IPv6,IPv4是目前应用最广泛的互联网协议。
分片:把数据切分成片,适配底层传输网络,IP数据报的分片与重组是在网络层完成的。
IPv4协议头
Type Of Service:服务的类型,是为了响应不同的用户诉求,用来选择延迟、吞吐量和丢包率之间的关系。
IHL(Internet Header Length):IP协议头的大小。
Total Length:报文(封包datagram)的长度
Identification:报文的ID,发送方分配,代表顺序
Fragment offset:描述是否要分包(拆分),和如何拆分。
Time To Live:封包存活的时间。
Protocol:描述上层的协议,比如TCP=6,UDP=17
Options:可选项
Checksum:检验封包的正确性
IP地址组成
IP地址由两部分组成,一部分为网络地址,另一部分为主机地址。IP地址分为A、B、C、D、E 5类,它们适用的类型分别为:大型网络;中型网络;小型网络;多目地址;备用。常用的是B和C两类。
由此可得出按此分类方式得到的IPv4地址空间划分:
路由与寻址
IPv4通过逐级寻址逐级找到网络,最后定义设备,IP地址和子网掩码位与的过程是由路由算法实现的。
在路由器中,维护了一张路由表,根据路由表找到下一跳的地址,在下一跳的过程中,只修改帧最外层的MAC地址,以自己的地址作为源 MAC 地址,下一跳的地址作为目标 MAC 地址。
最后一个路由收到该帧,发现目标 IP 就在自己的直连网段,于是查看 ARP 缓存(缓存路由器各直接网段的 IP 地址和 MAC 地址的对应关系,每个主机中也有ARP 缓存表),如果找到该 IP 的 MAC 地址,则以该 MAC 地址封装数据发送出去,如果在 ARP 缓存没找到,则发出 ARP 广播,请求该 IP 的 MAC 地址,得到对应的 MAC 地址后,经过交换机再发送给对应主机 ,在交换机中也维护着一张MAC地址表。
IPv4寻址逐级寻址过程
01. 103.16.3.17 最顶层的网络号和 255.0.0.0 (子网掩码)做位与运算得到
02. 用IP地址和下一级的子网掩码做位与
03. 使用 255.255.255.0 子网掩码找到下一级网络
04. 设备就在子网 103.16.3.0 中;最终找到的设备号是 17