TCP/IP网络模型有哪几层

根据OSI(Open System Interconnection Reference Model)定义的网络模型,网络一共分为七层,分别是应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。OSI的七层体系结构概念非常清楚,理论也很完整,但是它比较复杂而且不使用。所以现实中,我们经常用的是四层层网络模型,分别是应用层、传输层、网络层、网络接口层。

应用层(Application Layer)

应用层属于最上层,也是我们经常接触到的。我使用的一些软件都是在应用层实现的。比如,常用的HTTP、FTP、Telnet、DNS、SMTP等,

传输层(Transport Layer)

应用层会将包转给传输层,传输层是为应用层提供网络支持服务的。传输层有两个协议,分别是:TCP、UDP。

TCP的全称叫做传输控制协议(Transmission Control Protocal),大部分应用使用的都是TCP协议,TCP比UDP多了传输控制、拥塞控制、超时重传等。这些都是为了保证包尽最大的可能交付给对方。

UDP的全称叫做用户数据报协议(User Datagram Protocol),UDP是不可靠协议,它并不能保证包一定交付对方,但它实时性较好,传输效率较高。

应用需要传输的数据可能非常大,如果直接传输就不好控制,因此,当传输层的数据包大于MSS(Maximum Segment Size,以太网中一般为 1500 字节)的时候就会将数据分段,这样即使中途有一个数据块丢失,只要重发这个数据块就可以了,不用重发整个数据,在TCP协议中,我们把每一个段称为TCP段(TCP Segment)。

网络层(Internet Layer)

网络层最常使用的是IP协议(Internet Protocol),IP协议将传输层的报文作为数据部分,再加上IP包头组成IP报文,如果IP报文大小超过MTU(Maximum Transmission Unit)就会再次分割,得到一个即将发送的报文。

网络层负责将数据从一个设备传输到另一个设备,网络层通过IP地址进行网络寻址,IP地址分成两种意义:

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

使用子网掩码和IP地址可以算出IP地址的网络号和主机号。

举个例子,比如 10.100.122.0/24,后面的/24表示就是 255.255.255.0 子网掩码,255.255.255.0 二进制是「11111111-11111111-11111111-00000000」,大家数数一共多少个1?不用数了,是 24 个1,为了简化子网掩码的表示,用/24代替255.255.255.0。

知道了子网掩码,该怎么计算出网络地址和主机地址呢?

将 10.100.122.2 和 255.255.255.0 进行按位与运算,就可以得到网络号,如下图: 将 255.255.255.0 取反后与IP地址进行进行按位与运算,就可以得到主机号

一个子网中,一般第一个地址和最后一个地址是有特殊用处的,第一个一般默认是网关地址,最后一个经常用作广播地址。

网络层生成了IP头部之后,接下来就是把包交给数据链路层,数据链路层会在IP包的头部加上MAC头部,并封装成数据帧(Data frame)发送到网络上。

有了IP地址,为什么还需要MAC地址?

IP地址和MAC地址的关系如下:

  • 各个设备在传输数据的时候,需要使用MAC地址来确定对方的身份(场景:两个路由器之间跳转,局域网内主机通信)。
  • 各个网路之间通行需要使用到IP地址,主要是为了定位目的地址所在的位置,通过IP的分段机制推演出从源IP到目的IP的一条路径,而后数据包通过这条路径将数据送达。

每一层的封装格式

网络接口层的传输单位是帧(frame),IP 层的传输单位是包(packet),TCP 层的传输单位是段(segment),HTTP 的传输单位则是消息或报文(message)。但这些名词并没有什么本质的区分,可以统称为数据包。

参考

https://xiaolincoding.com/network/1_base/tcp_ip_model.html#应用层