在网络模型中有分为7层模型(OSI模型)和5层模型和TCP/IP模型
OSI模型将应用层和表示层作为独立的两层,而TCP/IP模型将它们合并为一个应用层。
两种对比来说,TCP/IP模型更符合实际开发应用
应用层
应用层是最上层的一层,也是在开发中接触到最多的,因为在开发中一般需要提供HTTP接口来返回信息
应用层支持HTTP、FTP、DNS、Telnet等传输数据
等协议,应用层是不用去关心数据是如何传输的,只需要把要传输的数据交给下边的层
而且应用层是工作在操作系统中的用户态,传输层及以下则工作在内核态,
从应用层到传输层的操作是在操作系统中去完成的,通过网络协议栈的Api(Socket)来完成
应用程序通过 Socket 将数据发送出去时,操作系统内核会将数据从用户空间传输到内核空间,
然后将数据封装成 TCP、UDP 或其他协议的数据包,准备进行传输
总结应用层的大致作用:
- 提供HTTP、FTP等网络服务
- 实现应用程序间的数据交换
- 建立和维护应用程序之间的通信
传输层
运输层的任务就是负责向两个主机中进程之间的通信提供通用的数据传输服务。应用进程利用该服务传送应用层报文。
传输层中的最重要的任务是数据传输的可靠性和完整性的保障。为此,它使用了一些技术,如流量控制、拥塞控制、纠错和校验等等,以确保数据传输的正确性。
另外,它还提供了多路复用和即时连接等技术,以帮助应用程序高效地使用网络资源
在传输层会有两个传输协议,分别是 TCP(传输控制协议) 和 UDP(用户数据报协议)
在TCP使用了包括数据分段、确认应答、超时重传、流量控制等机制来保证数据传输的正确性和可靠性
UDP 相对来说就很简单,简单到只负责发送数据包,不保证数据包是否能抵达对方,但它实时性相对更好,传输效率也高
TCP和UDP的区别分别是:
-
可靠性:TCP 是一种面向连接的协议,可以提供可靠的数据传输,保证数据不会丢失和损坏。UDP 是一种无连接的协议,不提供任何可靠性保障,数据发送后可能会丢失或损坏。
-
连接方式:TCP 是面向连接的协议,通过三次握手建立连接,传输数据完成后还需要四次握手释放连接。UDP 是无连接的协议,直接发送数据,无需建立和释放连接。
-
延迟性:由于 TCP 需要在建立连接后再传输数据,会造成一定的延迟,所以 TCP 在实时性要求不高的场景下表现并不出色。UDP 直接发送数据,几乎没有延迟,适合实时性要求高的场景。
-
数据量:TCP 在数据传输时需要分段并封装成 TCP 报文段,还需要创建和维护数据传输控制块,所以相对来说占用的网络资源较多,适合数据量较大、要求完整传输的场景。UDP 直接将数据封装成 UDP 数据报,相对来说占用的网络资源较少,适合短数据量、快速传输的场景。
总之,TCP 适合要求数据传输可靠、数据量较大、不要求实时性的场景;UDP 适合对实时性要求高、数据量较小、可丢失的场景
网络层
网络层负责将数据从一个设备传输到另一个设备,网络层通过 IP (Internet Protocol)协议实现
可以理解为通过IP协议的寻址操作,在寻址的过程中,先匹配到相同的网络号(表示要找到同一个子网),才会去找对应的主机
除了寻址能力, IP 协议还有另一个重要的能力就是路由。实际场景中,两台设备并不是用一条网线连接起来的,
而是通过很多网关、路由器、交换机等众多网络设备连接起来的,那么就会形成很多条网络的路径,因此当数据包到达一个网络节点,就需要通过路由算法决定下一步走哪条路径
IP 协议的寻址作用是告诉我们去往下一个目的地该朝哪个方向走,路由则是根据「下一个目的地」选择路径
IP协议的寻址过程可以分为三个步骤,分别是主机向路由器的寻址、路由器向路由器的寻址、路由器向主机的寻址
-
主机向路由器的寻址:主机会根据自己的IP地址和子网掩码,判断目标地址是否在本地子网中。
如果在本地子网中,则会直接发送ARP请求,获取目标主机的MAC地址。如果目标地址不在本地子网中,则会将数据包发送到本地网关(即本地路由器)的MAC地址。 -
路由器向路由器的寻址:路由器会根据路由表中的信息,选择下一跳路由器,并将数据包发送给下一站路由器。如果下一跳路由器不在本地子网中,则会通过ARP协议获取下一跳路由器的MAC地址。
-
路由器向主机的寻址:当数据包到达目标子网时,路由器会使用ARP协议获取目标主机的MAC地址,然后将数据包发送到目标主机。如果路由器无法获取目标主机的MAC地址,则会将数据包发送到本地网关进行转发。
网络层和传输层的基本区别在于,网络层处理的是分组(packet),而传输层处理的是数据流(stream)
传输层通过协议(如TCP或UDP协议)从上层应用程序接收数据,并将数据分割成较小的报文段(segment),从而能够被网络层传输
网络接口层
每经过一层,都会在数据包上加上请求头
在通过网络层获取到目标IP后,会将目标IP加到数据包上,生成了 IP 头部,接下来要交给网络接口层(Link Layer)在 IP 头部的前面加上 MAC 头部,并封装成数据帧(Data frame)发送到网络上。
IP 头部中的接收方 IP 地址表示网络包的目的地,通过这个地址我们就可以判断要将包发到哪里,但在以太网的世界中,这个思路是行不通的
以太网在判断网络包目的地时和 IP 的方式不同,因此必须采用相匹配的方式才能在以太网中将包发往目的地,
而 MAC 头部就是干这个用的,所以,在以太网进行通讯要用到 MAC 地址,MAC 头部是以太网使用的头部,它包含了接收方和发送方的 MAC 地址等信息,
我们可以通过 ARP 协议获取对方的 MAC 地址
所以说,网络接口层主要为网络层提供「链路级别」传输的服务,负责在以太网、WiFi 这样的底层网络上发送原始数据包,工作在网卡这个层次,使用 MAC 地址来标识网络上的设备
总结
这就是TCP/IP分层的大致