网络基础

网络层次划分

国际标准化组织(ISO)提出的开放系统互连参考模型 (Open System Interconnect 简称OSI)将计算机网络体系结构的通信协议划分为七层,自下而上依次为:

  • 物理层(Physics Layer)
  • 数据链路层(Data Link Layer)
  • 网络层(Network Layer)
  • 传输层(Transport Layer)
  • 会话层(Session Layer)
  • 表示层(Presentation Layer)
  • 应用层(Application Layer)

其中第四层完成数据传送服务,上面三层面向用户。

除了标准的OSI七层模型以外,常见的网络层次划分还有TCP/IP四层协议以及TCP/IP五层协议,它们之间的对应关系如下图所示:

image

OSI七层网络模型

层数 分层名称 功能 实例
7 应用层 针对特定应用的协议 HTTP、FTP、DNS、Telnet、SMTP、POP3
6 表示层 设备固有数据格式和网络标准数据格式的转换 ASCII、GIF、JPEG
5 会话层 通信管理,负责建立和断开通信连接,管理传输层以下的分层 RPC、SQL、NFS
4 传输层 管理两个节点之间的数据传输,负责可靠传输 TCP、UDP,设备:网关
3 网络层 地址管理与路由选择 IP、ICMP、ARP、RARP,设备:路由器
2 数据链路层 互连设备之间传送和识别数据帧 IEEE 802.3,设备:网桥、交换机
1 物理层 以0、1代表电压高低、灯光的闪灭,界定连接器和网线的规格 RS232、v.35,设备:集线器、中继器
  • 物理层

负责0、1比特流(0、1序列)与电压的高低、光的闪灭之间的互换。

  • 数据链路层

负责物理层面上的互连的、节点之间的通信传输。例如与1个以太网相连的2个节点之间的通信。将0、1序列划分为具有意义的数据帧传送给对端(数据帧的生成与接收)。

  • 网络层

将数据层传输到目标地址,目标地址可以是多个网络通过路由器连接而成的某一地址。因此这一层主要负责寻址和路由选择。

  • 传输层

起着可靠传输的作用。只在通信双方节点上进行处理,而无需在路由器上处理。

  • 会话层

负责建立和断开通信连接(数据流动的逻辑通路),以及数据的分割等数据传输相关的管理。

  • 表示层

将应用处理的信息转换为适合网络传输的格式,或将来自下一层的数据转换为上层能够处理的格式。因此表示层主要负责数据格式的转换。

  • 应用层

为应用程序提供服务并规定应用程序中通信相关的细节。包括文件传输、电子邮件、远程登录(虚拟中端)等协议。

IP:网际协议

IP协议是TCP/IP协议的核心,所有的TCP,UDP,IMCP以及IGMP数据都以IP数据报格式传输。要注意的是IP不是可靠的协议,也就是说,IP协议没有提供一种数据未传达以后的处理机制,这被认为是上层协议:TCP或UDP要做的事情。

IP地址

IP地址(IPv4)由32位正整数来表示,每8位一组,分成4组,每组以“.”隔开。理论上最多可以允许2^32台机器连接到网络。

IP地址由网络标识(网络地址)和主机标识(主机地址)两部分组成。网络标识在数据链路的每个段配置不同的值。网络标识必须保证相互连接的每个段的地址不重复。而相同段内相连的主机必须有相同的网络地址。IP地址的主机标识则不允许在同一个网段内出现。

对于从第几位到第几位是主机标识,哪些位是主机标识,有约定俗成的两种区分类型:最初以分类进行区分;现在基本以子网掩码(网络前缀)区分。

IP地址分类

IP地址分为四个级别,分别是A类、B类、C类、D类。根据IP地址中从第1位到第4位的比特列对其网络标识和主机标识进行区分。

  • A类地址:以0开头,前8位是网络标识,地址范围是0.0.0.0 ~ 127.255.255.255;
  • B类地址:以10开头,前16位是网络标识,地址范围是128.0.0.0 ~ 191.255.255.255;
  • C类地址:以110开头,前24位是网络标识,地址范围是192.0.0.0 ~ 223.255.255.255;
  • D类地址:以1110开头,前32位是网络标识,地址范围是224.0.0.0 ~ 239.255.255.255,D类地址常被用于多播;
  • 以1111开头的地址为保留地址,地址范围是240.0.0.0 ~ 255.255.255.255;

注:只有A,B,C有网络号和主机号之分,D类地址没有划分网络号和主机号。

UDP:用户数据报协议

用户数据报协议(UDP,User Datagram Protocol)是一种面向无连接的传输层协议,提供面向事务的简单不可靠传送服务。常被用于一下场景:

  • 包总量较少的通信(DNS、SNMP)等;
  • 视频、音频等多媒体通信(即时通信);
  • 限定于LAN等特定网络中的应用通信;
  • 广播通信(广播、多播);

TCP:传输控制协议

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

TCP首部

TCP数据被封装在一个IP数据报中,如下图所示:

image

图中同时展示了TCP首部的数据格式,如果不计任选字段,通常是20个字节。包含如下部分:

  • 源端和目的端的端口号:用于寻找发端和收端应用进程。这两个值加上IP首部中源端IP地址和目的端IP地址唯一确定一个TCP连接。
  • 序号:用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的第一个数据字节。序号到达2^32-1后从0重新开始。
  • 确认序号:包含发送确认的一端所期望收到的下一个序号。只有ACK标志为1时,确认序号才有效。
  • 首部长度:首部中32bit字的数目。TCP首部最多60字节,如果没有任选字段,正常长度是20字节。
  • 标志位:
    • URG:紧急指针有效;
    • ACK:确认序号有效;
    • PSH:接收方应该尽快将这个报文段交给应用层;
    • SYN:同步序号用来发起一个连接;
    • FIN:发端完成发送任务;
  • 窗口大小:字节数,起始于确认序号字段指明的值,这个值是接收端期望收到的字节。窗口大小最大为65535字节。TCP流量控制由连接的每一端通过声明的窗口大小来提供。
  • 检验和:覆盖TCP首部和TCP数据,由发端计算和存储、收端验证。
  • 紧急指针:正的偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。只有URG标志设置为1时紧急指针才有效。
  • 可选字段:最常见的可选字段是最长报文大小,又称为MSS。

TCP连接

TCP连接建立与终止流程如下图所示:

image

连接建立:三次握手

  1. 请求端发送一个SYN段指明客户打算连接的服务器端口,以及初始序号。
  2. 服务端发回包含服务器的初始序号的SYN报文段作为应答,同时设置ACK标志,将确认序号设置为客户的序号加1以对客户的SYN报文段进行确认。
  3. 客户必须将确认序号设置为服务器的序号加1以对服务器的SYN报文段进行确认。

连接断开:四次挥手

  1. 请求端发送FIN报文到服务端,进入FIN-WAIT-1状态。
  2. 服务端发回一个ACK报文,确认序号为收到的序号加1,然后进入CLOSE-WAIT状态。(服务端可能还有数据没有发完,客户端收到后进入FIN-WAIT-2状态继续等待服务端FIN消息)
  3. 服务端处理完数据后向客户端发送FIN报文,序号,ACK标志以及确认序号,然后进入LAST-ACK状态。
  4. 客户端收到FIN回复后,发送ACK报文到服务端,然后进入TIME-WAIT状态,等待2MSL后如果没有收到服务端重传请求则认为服务端已确认,进入CLOSE状态。

十万个为什么

为什么要三次握手?

三次握手可以有效防止已失效的连接请求报文段突然又传送到了服务端而产生错误。

在两次“握手”的情形下,假设客户端在跟服务端建立连接过程中数据报丢失了(有可能数据传输过程因为网络并发量很大在某个结点被阻塞了),那么客户端会再次发起连接请求。这种情形下服务端将有可能先后收到两次请求并建立连接,然后持续等待两个客户端请求向它发送数据。此时服务端有两个响应而客户端实际上只有一次请求,因而造成资源浪费。

为什么要四次挥手?

TCP是全双工模式,因此在四次挥手中,前两次挥手用于断开一个方向的连接,后两次挥手用于断开另一方向的连接。

为什么第四次挥手后要等待2MSL才关闭?

MSL:报文段最大生存时间,它是任何报文段被丢弃前在网络内的最长时间。

等待2MSL主要有两个原因:

  1. 为了保证客户端发送的最后一个ACK报文段能够到达服务器。因为这个ACK有可能丢失,从而导致处在LAST-ACK状态的服务器收不到对FIN-ACK的确认报文。服务器会超时重传这个FIN-ACK,接着客户端再重传一次确认,重新启动时间等待计时器。最后客户端和服务器都能正常的关闭。假设客户端不等待2MSL,而是在发送完ACK之后直接释放关闭,一但这个ACK丢失的话,服务器就无法正常的进入关闭连接状态。
  2. 可以防止已失效的报文段。客户端在发送最后一个ACK之后,再经过经过2MSL,就可以使本连接持续时间内所产生的所有报文段都从网络中消失。从保证在关闭连接后不会有还在网络中滞留的报文段去骚扰服务器。

服务器在发送FIN-ACK后,会立即启动超时重传计时器。客户端在发送最后一个ACK之后会立即启动时间等待计时器。

参考文章: