应用层
我们电脑或者手机使用的应用软件都在应用层实现,应用层只需要为用户提供应用功能,不需要关心数据是如何传输的。应用层是工作在操作系统的用户态,传输层及以下则工作在内核态。
传输层
应用层的数据包会传给传输层,传输层是为应用层提供网络支持的。
在传输层存在两个传输协议
- TCP:TCP的全称为传输层控制协议,大部分应用使用的正是TCP传输层协议,比如HTTP应用层协议。TCP有很多特性(流量控制、超时重传、拥塞控制等)都是为了保证数据包可靠地传输给对方。
- UDP:UDP相对简单,只负责发送数据包,不保证数据包是否能抵达对方,但它实时性相对更好,传输效率也高。UDP也可以实现可靠传输,把TCP的特性在应用层上实现就可以。
应用层需要传输的数据可能非常大,当传输层的数据包大小超过MSS(TCP最大报文段长度),就要将数据分块,每一个分块称为TCP段。
当设备作为接收方时,传输层则负责把数据传给应用,但一台设备上可能有很多应用在接受或者传输数据,因此需要一个编号将应用区分开来,这个编号就是端口。传输层的报文中会携带端口号,因此接受方可以识别出该报文是发送给哪一个应用。
网络层
传输层并不负责将数据从一个设备传输到另一个设备,实际的传输功能是网路层。网络层最常使用的是IP协议,IP协议会将传输层的报文作为数据,再加上IP包头组装成IP报文。如果IP报文超过MTU(以太网中一般为1500字节)就会进行分片。为了寻址,需要将IP地址分层两种意义
- 网络号:负责标识该IP地址是属于哪个子网的
- 主机号:负责标识同一子网下的不同主机
IP 协议的寻址作⽤是告诉我们去往下⼀个⽬的地该朝哪个⽅向⾛,路由则是根据下⼀个⽬的地选择路径。寻址更像在导航,路由更像在操作⽅向盘。
数据链路层
一旦数据需要跨网络传输,就需要有一个设备同时在两个网络当中,这个设备一般是路由器,路由器可以通过路由器表计算下一个要去的IP地址。正是由于数据链路层的存在,路由器可以知道这个IP地址是哪个设备的。数据链路层用来表示网络中的设备,让数据在一个链路中传输,主要为网络层提供链路级别传输的服务。每⼀台设备的⽹卡都会有⼀个 MAC 地址,它就是⽤来唯⼀标识设备的。路由器计算出了下⼀个⽬的地 IP 地址,再通过ARP协议找到该⽬的地的 MAC 地址,这样就知道这个 IP 地址是哪个设备的了。
物理层
当数据准备要从设备发送到⽹络时,需要把数据包转换成电信号,让其可以在物理介质中传输,主要是为数据链路层提供⼆进制传输的服务。