TCP/IP四层模型

TCP/IP网络模型适用于不同设备上进程间的通信,共分为四层分,从上到下分别是应用层、传输层、网络层、网络接口层

应用层(Application Layer)

应用层是最上层的,我们能直接接触到的层,我们日常所使用的软件都是在应用层上实现的。

应用层不关心数据是如何传输的,就和我们寄快递的时候只需要把包裹交给快递员,我们不关心包裹是如何运输的。

协议

应用层的协议包括HTTP、FTP、Telnet、DNS、SMTP等。

传输层(Transport Layer)

传输层是为应用层提供网络支持的,在传输层有两个传输协议,分别是TCP和UDP。

TCP(Transmission Control Protocol)

TCP的全称是传输控制协议,大部分应用传输层协议使用的都是TCP,TCP为了保证数据能够可靠的传输到目的地,有流量控制、超时重传、拥塞控制等特性。

UDP(User Datagram Protocol)

UDP全称是用户报文协议,UDP相对TCP来说就很简单,只负责发送数据包,至于数据包能否正常抵达目的地,UDP不能保证;但是换一个角度来说,UDP少干了这么多,那他的实时性相对TCP来说更好,传输效率也更高。

通常来说一台设备上会运行多个应用进程,为了区分数据要发送的具体进程,传输层中需要指定端口号来区分不同的进程和应用。

网络层(Internet Layer)

负责将数据从一个设备发送到另一个设备的并不是传输层,传输层设计的理念是,简单、高效、专注,实际场景中的网络环节错综复杂,网络层就来是负责数据实际传输。

网络层最常用的是IP协议(Internet Protocol),IP协议会将传输层的报文作为数据部分,再加上IP数据包组装成IP报文。

img

网络层负责将数据从一个设备传输到另一个设备,而为了确定目标设备,网络层需要有区分设备单的编号,这个编号就是IP地址。

对于IPv4协议,IP地址共32位(32个bit),共分成四段(例如:192.168.1.1),每段8位。如果只有单纯的IP地址,虽然做到了设备区分,但是殉职起来就特别麻烦,世界上那么多设备,一个个去匹配显然是非常不科学的。

因此需要借助子网掩码来将IP地址分为两种意义:

  • 一个是网络号,负责标识IP地址是属于哪一个[子网]的;
  • 一个是主机号,负责标识同一子网下的不同主机;

举个栗子,比如192.168.1.1/24,后面的/24表示的就是子网掩码255.255.255.0,255.255.255.0 二进制是「11111111-11111111-11111111-00000000」,其中共有24个1,为了简化子网掩码的表示,就用/24来代替。

网络号=IP地址按位与子网掩码

主机号=IP地址按位与子网掩码取反

网络接口层(Link Layer)

网络层生成完IP头部之后,接下来要交给网络接口层在IP头前面加上MAC头,并封装成数据帧(Data Frame)发送到网络上。

IP头中的接收方IP表示网络包的目的地,通过这个地址我们就可以判断要将包发送到那里,但是在以太网的世界中,这个思路行不通!

以太网是一种在局域网内,把附近的设备连接起来,使其可以互相通讯的技术。我们电脑上的以太网口、WiFi接口,以太网交换机、路由器上的千兆、万兆网口,还有网线,都是以太网的组成部分。

以太网判断网络包目的地的方式和IP不同,不需要采用互相匹配的方式才能在以太网中将包发往目的地,而MAC头就是干这个用的,所以在以太网进行通讯需要用到MAC地址。

MAC头是以太网使用的头,包含了发送方和接收方的MAC地址等信息,我们可以通过ARP协议获取对方的MAC地址。

所以网络接口层主要为网络提供链路级别的传输服务,负责在以太网、WiFi这样的底层网络上发送原始数据包,工作在网卡这个层次,使用MAC地址来别试网络中的设备。

总结

TCP/IP网络的四层结构总结如下图:

img

每一层的封装结构如下图:

img

网络接口层的传输单位是帧(frame),IP层的传输单位是包(package),TCP层的传输单位是段(segment),HTTP的传输单位则是消息或报文(message),这些单位其实并没有本质上的区别,可以统称为数据包。

参考

小林coding TCP/IP 网络模型有哪几层?