一.协议概述
1.TCP/IP 传输协议概述
TCP/IP 传输协议,即传输控制 / 网络协议,也被称作网络通讯协议。它是网络中使用的最基本通信协议,对互联网中各部分进行通信的标准和方法予以规定。通常所说的 TCP/IP 协议并非仅指 TCP 和 IP 两个协议,而是一个由 FTP、SMTP、TCP、UDP、IP 等协议构成的协议簇。只因在 TCP/IP 协议中 TCP 协议和 IP 协议最具代表性,故而得名 TCP/IP 协议。
2.设备间进程通信与网络协议分层
同一设备进程间通信方式
对于同一台设备上进程间的通信,存在多种方式,例如管道、消息队列、共享内存、信号等。
不同设备进程间通信方式
而不同设备上进程间的通信则需要网络通信。由于设备具有多样性,为了兼容各种设备,便协商制定出一套通用的网络传输协议。这个网络协议采用分层结构,每一层都有其独特的作用和职责。通常情况下,该网络协议由上到下可分成 5 层:
- 应用层:该层负责处理应用程序的逻辑,为用户提供直接服务,例如 HTTP 协议用于网页浏览,SMTP 协议用于邮件发送等。它是用户与网络应用交互的接口,不同的应用层协议满足不同类型的网络应用需求。
- 传输层:主要功能是提供端到端的可靠或不可靠的数据传输服务。其中 TCP 协议提供可靠的面向连接的数据传输,确保数据无差错、按序到达;UDP 协议则提供不可靠的无连接的数据传输,适合对传输速度要求高但对数据准确性要求相对较低的场景,如视频流、音频流传输。
- 网络层:负责将分组数据从源端传输到目的端,主要处理路由选择和拥塞控制等问题。IP 协议是网络层的核心协议,它为每个网络设备分配唯一的 IP 地址,实现不同网络之间的数据转发。
- 数据链路层:将网络层传来的 IP 数据报封装成帧,并进行差错检测和纠正。它在物理层提供的比特流传输基础上,实现相邻节点之间的数据可靠传输,常见的以太网协议就工作在这一层。
- 物理层:处于网络分层结构的最底层,负责处理物理介质上的信号传输,定义了物理设备的电气、机械、功能和过程特性,如网线的接口标准、光纤的传输特性等,是数据传输的物理基础。
二.协议分层
1.应用层
应用层概述
在网络协议的分层结构中,最上层且与我们直接接触的便是应用层(Application Layer)。我们日常在电脑或手机上使用的各类应用软件,其功能的实现均处于应用层。
应用层在设备通信中的角色
当两个不同设备上的应用程序需要进行通信时,应用层负责将应用数据传递给下一层,即传输层。在此过程中,应用层只需专注于为用户提供丰富的应用功能,无需关注数据具体的传输方式,仅需将应用数据妥善交给传输层即可。这就好比我们在寄快递时,只需把包裹交给快递员,后续包裹的包装、运输等一系列复杂工作则由快递员、司机等相关人员负责完成。
应用层与内核态、用户态的关系
介绍:应用层运行在操作系统中的用户态,而传输层及以下各层则工作在内核态。
- 内核态(Kernel Mode):此状态下运行的是操作系统程序,它拥有操作硬件的最高权限。操作系统通过内核态来管理系统资源、调度进程、处理硬件中断等核心任务,确保整个计算机系统的稳定运行和高效资源分配。例如,内核态负责管理内存的分配与回收,协调多个进程对 CPU 的使用,以及与硬件设备进行交互等操作。
- 用户态(User Mode):主要运行用户程序,如各种办公软件、游戏软件等。用户态的程序受到内核的保护和限制,不能直接访问硬件资源,只能通过系统调用向内核请求服务。这种机制保障了系统的安全性和稳定性,防止用户程序因错误操作而破坏系统资源或干扰其他程序的正常运行。例如,用户在使用浏览器(运行在用户态)浏览网页时,若需要访问网络资源,浏览器会通过系统调用请求内核(运行在内核态)提供网络连接和数据传输服务。
2.传输层
传输层概述
应用层的数据包会传递到传输层,传输层(Transport Layer)的核心职责是为应用层提供网络支持,确保数据能够在不同设备间有效传输。
传输层的两个重要协议
在传输层存在两个关键的传输协议,即 TCP 和 UDP,它们各自具备独特的特性与应用场景:
TCP(传输层控制协议,Transmission Control Protocol)
- 广泛应用:多数应用采用 TCP 作为传输层协议,例如常见的 HTTP 应用层协议。可以将其类比为寄快递场景,用户(HTTP 协议)选择了特定的快递公司(TCP 协议)来寄送包裹。
- 可靠性保障特性:TCP 相较于 UDP 具备诸多特性,像流量控制、超时重传以及拥塞控制等。这些特性旨在全方位保证数据包能够可靠无误地传输至对方。流量控制能够根据接收方的处理能力,动态调整发送方的数据发送速率,避免接收方因数据处理不及时而造成数据丢失;超时重传机制则在发送方设定的时间内未收到接收方的确认信息时,自动重新发送数据包,确保数据不会因网络延迟或丢包而无法送达;拥塞控制则是在网络出现拥堵时,主动降低数据发送速率,以缓解网络压力,保障整个网络的稳定运行。
UDP(用户数据报协议,User Datagram Protocol)
- 简单高效:UDP 相对简洁,它仅负责发送数据包,并不保证数据包一定能成功抵达对方。然而,其优势在于实时性更好,传输效率较高。例如应用层的网络时间协议(Network Time Protocol, NTP)就选用 UDP 来传输数据。在一些对实时性要求极高,如视频直播、在线游戏等场景中,即使偶尔丢失少量数据包,只要整体传输速度快,也不会对用户体验造成太大影响,UDP 这种简单高效的传输方式就显得尤为适用。
- 可靠传输实现:虽然 UDP 本身不具备 TCP 那样的可靠性保障机制,但通过在应用层实现类似 TCP 的特性,也能够达成可靠传输。不过,要开发一个商用的可靠 UDP 传输协议并非易事,需要精心设计和全面测试,以确保在各种复杂网络环境下都能稳定运行。
传输层的分段机制
- 分段原因:应用需要传输的数据量有时可能极为庞大,若直接进行传输,将难以进行有效控制。为解决这一问题,当传输层的数据包大小超过 MSS(TCP 协议的最大报文段长度)时,就必须对数据包进行分块处理。这样一来,即便在传输过程中某个分块出现丢失或损坏的情况,只需重新发送这一个分块,而无需重新发送整个庞大的数据包,大大提高了传输效率和可靠性。
- TCP 协议中的分段:在 TCP 协议里,我们将每个分块称作一个 TCP 段(TCP Segment)。TCP 协议通过这种分段机制,将大数据包合理拆分,在接收端再按照顺序重新组装,确保数据的完整性和准确性。
- UDP 协议与分段:与 TCP 不同,UDP 协议不会进行分段操作。这是因为 UDP 的设计理念侧重于快速传输,其应用场景往往允许一定程度的数据丢失或乱序,所以没有引入分段机制带来的额外复杂性。
传输层的端口机制
- 端口的作用:当设备作为接收方时,传输层肩负着把数据包准确传递给相应应用的重任。然而,一台设备上可能同时运行着多个应用程序,它们都在进行数据的接收或传输。为了能够精准区分不同的应用,就需要使用一个编号来标识,这个编号就是端口。
- 常见端口示例:不同的应用通常会使用特定的端口号。例如,80 端口一般是 Web 服务器所使用的端口,当我们在浏览器中输入网址访问网页时,浏览器与 Web 服务器之间的数据交互就通过 80 端口进行;22 端口通常用于 SSH 远程登录服务器,方便用户通过网络远程管理服务器。
- 动态端口分配:对于浏览器(客户端)而言,其中的每个标签栏都可视为一个独立的进程。在这种情况下,操作系统会为这些进程动态分配临时的端口号。由于传输层的报文中会携带端口号信息,接收方在接收到报文后,就能依据端口号准确识别出该报文是发送给哪个具体应用的,从而实现数据的准确投递。
3.网络层
网络层概述
初次接触传输层时,不少人可能会误以为它承担着将数据从一个设备传输到另一个设备的职责,而事实并非如此。
在实际复杂的网络场景中,网络环境充满了各种线路与分叉路口。当一个设备的数据要传至另一个设备时,需要在众多路径和节点间做出选择。传输层的设计理念强调简单、高效与专注,如果让它兼顾路径选择等功能,就与设计初衷相悖。
所以,传输层的主要任务是作为应用间数据传输的媒介,专注于服务好应用,实现应用到应用的通信,而将实际的设备间数据传输功能交给下一层 —— 网络层(Internet Layer)。网络层最常用的协议便是 IP 协议(Internet Protocol)。
IP 报文的形成
IP 报文的组装
IP 协议会把传输层传来的报文作为数据部分,然后添加 IP 包头,从而组装成 IP 报文。这一过程就像是给货物(传输层报文)加上一个带有运输信息的包装(IP 包头),以便在网络中准确传输。
IP 报文的分片
这里涉及一个重要概念 ——MTU(最大传输单元,即 Maximum Transmission Unit)。在以太网环境中,MTU 一般为 1500 字节。当组装后的 IP 报文大小超过 MTU 时,为了确保数据能在网络中顺利传输,就需要再次对 IP 报文进行分片处理。通过分片,将大的 IP 报文拆分成多个适合网络传输的小部分,最终得到可以发送到网络的 IP 报文。
IP 寻址
IP 地址的必要性:网络层负责在不同设备间传输数据,面对全球数量庞大的设备,必须要有一种方式来区分不同设备,IP 地址便承担了这一角色。对于 IPv4 协议,IP 地址总长度为 32 位,通常被分成四段,每段 8 位。
IP 地址的双重意义:仅有单纯的 IP 地址虽能区分设备,但在寻址时会面临巨大困难,毕竟不可能逐一匹配全球所有设备。因此,IP 地址被赋予了两种意义:
- 网络号:用于标识该 IP 地址所属的子网。子网就像是一个大网络中的小区域,通过网络号可以快速定位到目标设备所在的大致区域。
- 主机号:在同一子网内,用于标识不同的主机。这样,在一个子网内部,不同的主机可以通过主机号被准确区分。
网络号与主机号的计算:IP 地址的网络号和主机号的计算需要借助子网掩码(例如 192.168.1.1/24 中的 “/24” 就是子网掩码的一种表示方式)。在寻址过程中,首先会匹配网络号,只有网络号相同,才会进一步查找对应的主机号,从而准确找到目标设备。
IP 协议的路由功能
路由的背景
除了寻址能力,IP 协议还具备另一个至关重要的能力 —— 路由。在现实场景中,两台设备并非简单地通过一条网线直接相连,而是通过网关、路由器、交换机等众多网络设备连接在一起,由此形成了众多网络路径。
路由的实现
当数据包抵达一个网络节点时,就需要依据特定算法来决定下一步该选择哪条路径继续传输。形象地说,IP 协议的寻址作用类似导航,告诉我们前往下一个目的地的大致方向;而路由则如同操作方向盘,根据 “下一个目的地” 在众多路径中做出具体选择。这两个功能相互配合,确保数据能够在复杂的网络环境中准确无误地从源设备传输到目标设备。
4.数据链路层
数据链路层概述
在实际的网络环境里,网络并非浑然一体,而是被划分成众多的自治域(Autonomous System,简称 AS)以及子网。例如,你家与我家所使用的网络就分属不同范畴。这就意味着,数据不仅能够在同一网络内的设备之间实现传输,还可以跨越不同网络进行传递。
跨网络传输面临的问题
- 路由器的关键作用:当数据需要跨网络传输时,就需要一个能同时连接两个网络的设备,路由器便是承担此功能的常见设备。路由器可依据路由表计算出数据下一个要到达的 IP 地址。然而,IP 地址具有动态变化的特性,并非一成不变。
- IP 地址与设备对应难题:路由器虽然能算出目标 IP 地址,但如何确定这个 IP 地址具体对应哪台设备,成为了一个亟待解决的问题。毕竟,在网络中准确找到目标设备,才能确保数据顺利传输。
数据链路层的使命与功能
- 数据链路层的诞生:为了解决上述问题,数据链路层(Data Link Layer)应运而生。它的主要职责是为网络层提供链路级别的传输服务,致力于在网络中的设备间建立可靠的数据传输链路。
- 设备标识的核心 ——MAC 地址:每台设备的网卡都配备有一个 MAC 地址,它如同设备的 “身份证”,具有全球唯一性,专门用于标识网络中的设备。
- ARP 协议的桥梁作用:当路由器计算出下一个目的地的 IP 地址后,会借助 ARP 协议(Address Resolution Protocol,地址解析协议)来建立 IP 地址与 MAC 地址之间的映射关系。ARP 协议通过在网络中发送广播请求,询问与特定 IP 地址相对应的 MAC 地址。拥有该 IP 地址的设备会回应其 MAC 地址,这样路由器就能获取到目标 IP 地址对应的 MAC 地址,从而明确这个 IP 地址所对应的具体设备,实现数据在网络链路中的准确传输。例如,在一个企业园区网络中,不同部门处于不同子网,当财务部的计算机向销售部的服务器传输数据时,路由器通过路由表确定销售部服务器的 IP 地址,再利用 ARP 协议获取该 IP 地址对应的 MAC 地址,进而保障数据准确无误地从财务部计算机传输到销售部服务器。
5.物理层
当数据准备要从设备发送到网络时,需要把数据包转换成电信号,让其可以在物理介质中传输,这一层就是物理层( Physical Layer ),它主要是为数据链路层提供二进制传输的服务。