什么是TCP/IP协议?

TCP/IP 传输协议(Transmission Control Protocol/Internet Protocol),即传输控制 / 网络协议,也叫作网络通讯协议,是一组网络协议,它是互联网的基础。其中IP协议负责寻址与路由,TCP协议负责可靠的数据传输,两者共同构成了现代互联网的基础。TCP 用于确保数据传输的可靠性,而 IP 用于确定数据包在网络中的路径。TCP/IP 传输协议是一个四层的体系结构,即应用层、传输层、网络层和数据链路层。

历史

TCP/IP 协议的历史可以追溯到上世纪 60 年代。当时,美国国防部高级研究计划署(ARPA)开始研发一种网络系统,以实现不同类型计算机之间的通信。这个网络系统被称为 ARPANET。

当时 ARPANET 使用的是一个叫网络控制协议(Network Control Protocol,NCP)的网络协议,但随着网络的发展和用户对网络的需求不断提高,设计者们发现,NCP 协议存在着很多的缺点以至于不能充分支持 ARPANET 网络,特别是 NCP 仅能用于同构环境中(所谓同构环境是网络上的所有计算机都运行相同的操作系统),设计者就认为 “同构” 这一限制不应被加到一个分布广泛的网络上。

1973 年,温顿・瑟夫(Vinton Cerf)和鲍勃・卡恩(Bob Kahn)在 ARPA 的支持下发明了 TCP 协议和 IP 协议,前一个协议负责在不同的计算机之间传输数据,确保数据在传输过程中不丢失,不重复,不乱序。后一个协议负责确定数据在网络中的路径。

1983 年,ARPA 将 TCP/IP 作为 ARPANET 的正式协议标准。随后,1984 年,TCP/IP 协议得到美国国防部的肯定,这使得 TCP/IP 成为了互联网的基础协议。

2005 年 9 月 9 日,卡恩和瑟夫由于对美国文化的卓越贡献获总统自由勋章。

现在,TCP/IP 已经成为了全球范围内的网络通信的基础协议,几乎所有的网络都在使用它,包括互联网,局域网和个人网络。

通信过程及协议

在网络通信的过程中,将发出数据的主机称为源主机,接收数据的主机称为目的主机。当源主机发出数据时,数据在源主机中从上层向下层传送。源主机中的应用进程先将数据交给应用层,应用层加上必要的控制信息就成了报文流,向下传给传输层。传输层将收到的数据单元加上本层的控制信息,形成报文段、数据报,再交给网际层。网际层加上本层的控制信息,形成 IP 数据报,传给网络接口层。网络接口层将网际层交下来的 IP 数据报组装成帧,并以比特流的形式传给网络硬件(即物理层),数据就离开源主机。

链路层

链路层是TCP/IP协议栈中最接近物理硬件的层级,其核心任务是将网络层传递下来的IP数据报封装成帧,并通过物理介质(如网线、光纤、Wi-Fi)以比特流的形式发送出去。每个帧都包含了源MAC地址和目的MAC地址,这相当于发送方和接收方的“硬件身份证号”。

在实际的局域网通信中,数据帧的发送方式分为三种:单播(一对一)、广播(一对所有,如ARP请求)和多播(一对多)。很多人误以为以太网总是“广播”数据,其实不然。在交换机组网的现代以太网中,交换机内部维护着一张MAC地址表。当交换机收到一个数据帧时,它会根据帧头部的目的MAC地址查找这张表,精确地将数据帧转发给对应的端口,而非发给所有主机。只有在交换机刚启动或尚不知晓目标MAC对应哪个端口时,才会暂时采用广播泛洪的方式学习路径。

此外,链路层还承担着差错检测的重任。帧尾部会附带循环冗余校验(CRC)值,接收方通过计算CRC来校验数据在传输过程中是否发生了比特错误,若出错则直接丢弃该帧,由上层协议(如TCP)负责重传。

网络层

IP协议

网络层引入了 IP 协议,制定了一套新地址,使得我们能够区分两台主机是否同属一个网络,这套地址就是网络地址,也就是所谓的 IP 地址。以IPv4为例,IP地址由32位二进制数组成,IP 协议将这个 32 位的地址分为两部分,前面部分代表网络地址,后面部分表示该主机在局域网中的地址。如果两个 IP 地址在同一个子网内,则网络地址一定相同。为了判断 IP 地址中的网络地址,IP 协议还引入了子网掩码,IP 地址和子网掩码通过按位与运算后就可以得到网络地址。

ARP协议

即地址解析协议,用于根据已知的 IP 地址获取对应设备的 MAC 地址。由于 IP 协议负责网络层寻址,而实际的数据帧传输依赖 MAC 地址,因此主机在发送数据之前必须首先确定目标设备的 MAC 地址。

当主机需要向某个 IP 地址发送数据而本地 ARP 缓存中又不存在对应记录时,会向所在局域网发送一个 ARP 广播请求,其中包含目标 IP 地址。局域网内所有设备都会收到该请求,但只有拥有目标 IP 地址的设备会返回 ARP 应答报文,告知自己的 MAC 地址。发送方收到响应后,会将该 IP 地址与 MAC 地址的对应关系存入 ARP 缓存,以便后续通信直接使用。

ARP 协议工作于网络层与链路层之间,是 TCP/IP 协议栈中实现网络寻址的重要组成部分。

路由协议

首先通过 IP 协议来判断两台主机是否在同一个子网中,如果在同一个子网,就通过 ARP 协议查询对应的 MAC 地址,然后将数据帧发送给目标 MAC 地址对应的设备;如果不在同一个子网,以太网会将该数据包转发给本子网的网关进行路由。网关是互联网上子网与子网之间的桥梁,所以网关会进行多次转发,最终将该数据包转发到目标 IP 所在的子网中,然后再通过 ARP 获取目标机 MAC,最终再通过ARP解析目标主机的MAC地址,并将数据帧以单播形式发送给接收方。而完成这个路由协议的物理设备就是路由器,路由器扮演着交通枢纽的角色,它会根据信道情况,选择并设定路由,以最佳路径来转发数据包。

所以,网络层的主要工作是定义网络地址、区分网段、子网内 MAC 寻址、对于不同子网的数据包进行路由。

传输层

链路层通过MAC地址标识了主机,网络层通过IP地址标识了网段,但真正在网络中通信的实体是主机上运行的各种应用程序。传输层引入了端口这一概念,为主机上的应用程序提供了唯一的网络标识,从而实现了从“主机到主机”到“进程到进程(端到端)”的通信。

UDP协议

UDP(用户数据报协议)是一种无连接的传输协议。它在IP基础上仅增加了端口功能,发送数据前无需建立连接,数据报文头部非常精简(仅8字节),开销小、实时性高。但由于UDP没有确认、重传和拥塞控制机制,数据包发出后发送方无法确认对方是否收到,适合对实时性要求高但对丢包不敏感的场景,如视频直播、在线游戏和DNS查询。

TCP协议

TCP(Transmission Control Protocol,传输控制协议)是一种面向连接、可靠传输、基于字节流的传输层协议。与 UDP 不同,TCP 在数据传输前需要先建立连接,并在通信结束后释放连接。为了保证数据能够准确到达接收方,TCP 引入了确认应答(ACK)、超时重传、流量控制、拥塞控制以及数据排序等机制。

在建立连接时,通信双方需要通过著名的“三次握手”完成连接建立过程,从而确认双方均具备发送和接收数据的能力;在连接结束时,则通过“四次挥手”释放连接资源。

TCP 传输的数据单位称为报文段(Segment)。由于底层网络对数据包大小存在限制,TCP 会根据网络环境自动对数据进行分段传输,并在接收端重新组装为完整的数据流。对于应用程序而言,TCP 提供的是连续、可靠、有序的字节流服务,因此广泛应用于网页浏览、电子邮件、文件传输以及远程登录等场景。

凭借上述机制,TCP 能够在复杂网络环境中有效保证数据传输的完整性与可靠性。

应用层

理论上讲,有了以上三层协议的支持,数据已经可以从一个主机上的应用程序传输到另一台主机的应用程序了,但此时传过来的数据是字节流,不能很好的被程序识别,操作性差,因此,应用层定义了各种各样的协议来规范数据格式,常见的有HTTP、HTTPS、SMTP、DNS、FTP等,在请求 Header 中,分别定义了请求数据格式 Accept 和响应数据格式 Content-Type,有了这个规范以后,当对方接收到请求以后就知道该用什么格式来解析,然后对请求进行处理,最后按照请求方要求的格式将数据返回,请求端接收到响应后,就按照规定的格式进行解读。

所以应用层的主要工作就是定义数据格式并按照对应的格式解读数据。

安全问题

链路层上的攻击

链路层是数据进入网络后的第一道关口,因此也成为网络攻击的重要目标之一。在局域网环境中,如果攻击者能够接入同一网络,就有机会利用网络嗅探技术获取通信数据。

正常情况下,网卡只会接收发送给自身的数据帧,但当网卡被设置为混杂模式时,它可以接收经过网络中的所有数据帧。攻击者可以借助抓包工具对网络流量进行分析,从而获取通信双方的地址信息、协议类型以及部分未加密的数据内容。在早期缺乏加密措施的网络环境中,攻击者甚至能够直接获取用户账号、密码等敏感信息。

随着交换机逐渐取代集线器成为局域网的核心设备,单纯依靠监听获取全部流量变得更加困难。然而,攻击者仍然可能通过 ARP 欺骗等手段诱导网络流量经过自身设备,从而实现中间人攻击(Man-in-the-Middle Attack),继续对通信内容进行监听和篡改。

网络层上的攻击

网络层负责 IP 寻址与路由转发,是互联网实现互联互通的核心层次,因此也面临着多种安全威胁。

ARP 协议本身缺乏身份认证机制,主机通常会信任收到的 ARP 应答报文并更新本地缓存。攻击者可以伪造 ARP 响应,将自己的 MAC 地址冒充为网关或其他主机的地址,从而使目标设备将数据错误地发送给攻击者。这种攻击被称为 ARP 欺骗。攻击者在获得流量后,可以进一步实施监听、数据篡改甚至会话劫持等攻击行为。

除了 ARP 欺骗外,网络层还面临 IP 地址伪造的问题。由于 IP 协议本身无法验证数据包源地址的真实性,攻击者可以伪造源 IP 地址发送恶意流量,从而隐藏真实身份或绕过部分安全策略。这种技术常被用于拒绝服务攻击以及部分反射放大攻击之中。

ICMP 协议作为互联网控制报文协议,承担着网络诊断和错误报告的重要职责。常见的 Ping 命令便是基于 ICMP 实现的。虽然 ICMP 对网络维护具有重要意义,但攻击者也可能利用大量 ICMP 报文消耗目标系统资源,造成网络拥堵或服务性能下降。在现代网络环境中,这类攻击通常被归类为 ICMP Flood 等拒绝服务攻击。

传输层上的攻击

传输层主要负责端到端的数据传输,其核心协议 TCP 和 UDP 同样面临各种安全威胁。

TCP 协议在建立连接时需要进行三次握手,这一机制虽然保证了连接的可靠性,但也可能被攻击者利用。攻击者可以持续向服务器发送大量伪造的连接请求,而故意不完成后续握手过程,使服务器长期维持大量半连接状态,从而消耗系统资源,这种攻击被称为 SYN Flood,是典型的拒绝服务攻击方式之一。

由于 TCP 协议依赖序列号来保证数据的有序传输,如果攻击者能够预测或获取通信双方的相关信息,就有可能伪造合法数据包插入通信过程,实施 TCP 会话劫持攻击。攻击成功后,攻击者可能冒充合法用户执行操作,甚至获取敏感数据。

相比 TCP,UDP 协议不建立连接,也不提供可靠性保障,因此更容易被用于构造反射放大攻击。攻击者通过伪造源地址向开放服务发送请求,最终使大量响应数据集中返回至受害主机,从而形成巨大的流量冲击。

应用层上的攻击

应用层直接面向用户,因此也是各种网络攻击最为集中的区域。

在互联网中,人们通常通过域名访问网站,而 DNS 系统负责将域名解析为对应的 IP 地址。如果攻击者伪造 DNS 响应或控制 DNS 服务器,就可能向用户返回错误的解析结果,使用户被引导至恶意网站。这种行为被称为 DNS 欺骗或 DNS 污染。用户往往难以察觉自身访问的是伪造网站,从而导致账号密码、个人信息甚至金融数据被窃取。

除了 DNS 欺骗外,应用层还经常面临恶意代码传播、钓鱼攻击、跨站脚本攻击(XSS)、SQL 注入以及恶意文件下载等安全威胁。这些攻击通常针对具体应用程序的设计缺陷或配置漏洞展开,其危害范围往往远大于底层协议攻击。

随着 HTTPS、数字证书、多因素认证以及零信任安全架构等技术的发展,现代网络的安全性已经得到显著提升。然而,任何安全机制都无法彻底消除风险。只有在协议设计、安全设备部署以及用户安全意识三者共同作用下,才能构建更加可靠和安全的网络环境。