title: OSI七层网络模型和TCP/IP五层模型
date: 2019-03-26 17:46:47
categories: 基础知识
tags: 计算机网络

OSI参考模型

OSI七层模型的划分

OSI定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层

各层功能定义

应用层

应用层是网络应用程序及其应用层协议存留的地方。因特网的应用层包括很多协议,例如HTTP、SMTP和FTP。还有DNS(DNS)

表示层

会话层

传输层

传输层提供了在应用程序端点之间传送应用层报文的服务。在因特网中,有两个运输层协议,即TCP和UDP,利用其中的任何一个都能传输应用层报文。TCP向它的应用程序提供了面向链接的服务,这种服务包括了应用层报文向目的地的确保传递和流量控制机制。TCP也将长报文划分为短报文,并提供拥塞控制机制,当网路拥塞时,源抑制其传输速率。UDP协议向它的应用程序提供无连接服务。

网络层只把分组发送到目的主机,但是真正通信的并不是主机而是主机中的进程,传输层提供了进程间的逻辑通信,传输层向高层用户屏蔽了下面网络层的核心细节,使应用程序看起来像是在两个传输层实体之间有一条端到端的逻辑通信信道。

UDP和TCP的特点

  • 用户数据报协议UDP(User Datagram Protocol)是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一,一对多,多对一,多对多的交互通信。
  • 传输控制协议TCP(Transmission Control Protocol)是面向链接的,提供可靠交付,有流量控制,拥塞控制,提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块)

UDP首部格式

{% asset_img udp.jpg %}
udp.jpg
首部字段只有8个字节,包括源端口,目的端口,长度,校验和。12字节的伪首部是为了计算校验和临时添加的。

TCP首部格式

tcp.png

  • 序号:用于对字节流进行编号,例如序号301,表示第一个字节的编号为301,如果携带的数据长度问哦100字节,那么下一个报文段的序号应为401。
  • 确认号:期望收到的下一个报文段的序号。例如B正确收到A发送来的一个报文段,序号为501,携带的数据长度为200字节,因此期望下一个报文段的序号为701,B发送给A的确认报文段中确认号为701。
  • 数据偏移:指的是数据部分距离报文段起始处的偏移量,实际上指的是首部的长度。
  • 确认ACK:当ACK=1时确认号字段有效,否则无效。TCP规定,在建立连接后所有传送的报文都必须把ACK置1.
  • 同步SYN:在建立连接时用来同步序号。当SYN=1,ACK=0时表示这是一个请求报文段。若对方同意建立连接,则响应报文中SYN=1,ACK=1。
  • 终止FIN:用来释放一个连接,当FIN=1时,表示此报文段的发送方的数据已经发送完毕,并要求释放链接。
  • 窗口:窗口值作为接收方让发送方设置其发送窗口的依据。之所以要有这个限制,是因为接收方的数据缓存空间是有限的。

TCP的三次握手

{% asset_img 三次.png %}
三次.png

假设A为客户端,B为服务器端。

  • 首先B处于LISTEN状态,等待客户的连接请求。
  • A向B发送请求报文,SYN=1,ACK=0,选择初始序号x。
  • B接收到连接请求报文,如果同意建立连接,则向A发送连接确认报文,SYN=1,ACK=1,确认号为x+1,同时选择一个初始的序号y。
  • A收到B的连接确认后,还要向B发出确认,确认号为y+1,序号为x+1。
  • B收到A的确认后,连接建立

三次握手的原因

第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。

客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。客户端等待一个超时重传时间之后,就会重新请求连接。但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此就不会再次打开连接。

TCP的四次挥手

{% asset_img 四次.jpg %}
四次.jpg

以下描述不讨论序号和确认号,因为序号和确认号的规则比较简单。并且不讨论 ACK,因为 ACK 在连接建立之后都为 1。

  • A 发送连接释放报文,FIN=1。
  • B 收到之后发出确认,此时 TCP 属于半关闭状态,B 能向 A 发送数据但是 A 不能向 B 发送数据。
  • 当 B 不再需要连接时,发送连接释放报文,FIN=1。
  • A 收到后发出确认,进入 TIME-WAIT 状态,等待 2 MSL(最大报文存活时间)后释放连接。
  • B 收到 A 的确认后释放连接。

四次挥手的原因

客户端发送了 FIN 连接释放报文之后,服务器收到了这个报文,就进入了 CLOSE-WAIT 状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器会发送 FIN 连接释放报文。

TIME_WAIT

客户端接收到服务器端的 FIN 报文后进入此状态,此时并不是直接进入 CLOSED 状态,还需要等待一个时间计时器设置的时间 2MSL。这么做有两个理由:

  • 确保最后一个确认报文能够到达。如果 B 没收到 A 发送来的确认报文,那么就会重新发送连接释放请求报文,A 等待一段时间就是为了处理这种情况的发生。
  • 等待一段时间是为了让本连接持续时间内所产生的所有报文都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文。

网络层

网络层负责将数据报的网络层分组从一台主机转移到另一台主机。源主机中的因特网运输层协议向网络层递交运输层报文段和目的地址。

网络层有IP协议,该协议定义了数据报中各个字段以及端系统和路由器如何作用于这些字段。

数据链路层

因特网的网络层通过一系列路由器在源和目的地之间发送分组。为了将分组从一个节点移动到下一个节点,网络层必须依靠链路层的服务。链路层分组称为帧。

物理层

链路层的任务是将整个帧从一个网络元素移动到邻近的网络元素,而物理层的任务是将该帧中的一个一个比特从一个节点移动到下一个节点。

通信特点

{% asset_img 七层.png %}
七层.png

TCP/IP五层模型

个层次划分

TCP/IP五层模型分为应用层(HTTP FTP TFTP DNS SMTP),传输层(TCP UDP),网络层(IP ICMP RIP IGMP),数据链路层(ARP RAPP),物理层。

对应层次

{% asset_img 五层.png %}
五层.png

对应协议

{% asset_img 协议.png %}
协议.png