1.IP地址

IP地址主要用于识别网络主机,其他网络设备(如路由器)的网络地址。就像是商家发送快递,需要知道买家的地址,快递员才能将包裹达到目的地IP地址是一个32位数的二进制数,通常被分割成4个二进制数(也就是四个字节),如11000000.10101000.00000001.00000001

通常是用“点分十进制”的方式来表示,即a.b.c.d的形式(a,b,c,d都是0~25之间的十进制整数)

这个例子就是192.168.1.1

2.端口号

在网络通信中,端口号可以标识主机中发送数据、接收数据的进程。就像是发送快递,不仅要知道收货地址,还需要知道收货人(端口号)。端口号是0~65535范围的数字(在TCP和UDP协议的头部结构中,端口号被定义为16位的无符号整数),进程可以通过绑定一个端口号,来发送及接收网络数据。

3.协议

现在我们已知IP地址和端口号,可以定位到网络中唯一的进程,而网络通信是基于二进制0、1数据来传输,如何告诉对方发送的数据是什么样的呢?这些数据有很多类型:图片、视频、文本等。同一个类型的数据,格式可能也不同,此时我们就需要使用协议来规定双方的数据结构。

概念

协议,网络协议的简称,网络协议是网络通信经过的所有网络设备都必须共同遵从的一组约定,规则。如怎么建立连接。怎么样互相识别等。只有遵守这个协议,计算机之间才能相互通信交流。以我的理解,协议就像是一个翻译官,确保不同设备、不同系统之间能“听懂”彼此的话。协议最终体现为在网络上传输的数据包的格式。

五元组

在TCP/IP协议中,用五元组来标识一个网络通信:

1.源IP:标识源主机

2.源端口号:标识源主机中该次通信发送数据的进程

3.目的IP:标识目的主机

4.目的端口号:标识目的主机中该次通信接收数据的进程

5.协议号:标识发送进程和接收进程双方约定的数据格式

可以在CMD中,输入nestat-ano查看网络数据传输中的五元组信息

4.协议分层

对于网络协议来说,往往分成几个层次进行定义

为什么需要网络协议的分层呢?

网络协议分层是为了让复杂的网络通信系统变得可设计、可实现、可维护,核心作用类似“分工协作”——把庞大的通信任务拆分成多个独立的小任务,每层专注解决一个问题,最终通过层与层的配合完成整体通信。通过“分工”让复杂的通信变得简单、高效、可扩展。

OSI七层模型

OSI七层模型即复杂又不实用:所以OSI七层模型没有落地、实现。

实际组建网络时,是以TCP/IP五层模型来实现。

TCP/IP五层模型

TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。TCP/IP通讯采用了5层的层级结构,每一层都呼应它的下一层所提供的网络来完成自己的需求。

应用层:负责应用程序间沟通。

传输层:负责两台主机之间的数据传输,不考虑中间过程,只考虑起点和终点。

网络层:负责地址管理和路由选择,是两个设备之间如何进行通信,这俩设备之间,可能隔着很多交换机和路由器

数据链路层:负责设备之间的数据帧的传送和识别,完成两个相邻设备之间如何进行通信的,通过网线,把电脑连到路由器/交换机上

物理层:规定了网络通信中的一些硬件设施符合要求,负责光/电信号的传递方式。

物理层我们考虑的比较少,很多时候也可以称为TCP/IP四层模型

网络设备所在分层

对于一台主机,它的操作系统内核实现了从传输层到物理层的内容。

对于一台路由器,它实现了从网络层到物理层。

对于一台交换机,它实现了从数据链路层和物理层。

对于集线器,它只实现了物理层。

随着现代技术的发展,也出现了很多3层或者4层交换机,四层路由器,上面说的都是传统意义上的交换机和路由器。

5.封装

应用层数据通过协议栈发送到网络时,即数据从应用层向下传递到物理层时,每层协议都要加上一个数据首部,这就是封装。首部信息包含了一些类似首部多长,载荷有多长,上层协议是什么信息。

6.分用

接收方收到数据后,从物理层向上传递到应用层,每经过一层,该层会剥离自己添加的头部信息,只将原数据传递给上层,该过程就是分用。

7.客户端和服务端

服务端在常见的网络数据传输场景下,把提供服务的一方进程,成为服务端,可以提供对外服务。

客户端:就是获取服务的一方进程。

对于服务来说,一般是提供:客户端获取服务资源,客户端保存资源在服务端。

就像是在银行🏦办事:

银行提供存款服务:用户(客户端)保存资源(现金)在银行(服务端)

银行提供取款服务:用户(客户端)获取服务端资源(银行替用户保管的现金)

8.请求和响应

获取一个网络资源,涉及到两次网络数据传输

第一次:请求数据的发送

第二次:响应数据的发送

就像是我们去奶茶店点奶茶

先要发起请求:点一杯珍珠奶茶🧋,再有奶茶店提供对应的响应:提供一杯🧋

9.两台主机之间的网络通信流程

假设我通过qq发bestie给我的好龟龟:

1.应用程序获取到用户输入,构造一个应用层的数据包,这个数据包就会遵守应用层协议(这个协议一般都是开发这个程序的程序员自己定义的)

此时假设这样的协议格式:

发送者的QQ号,接受者的QQ号,消息的时间,消息正文

示例的数据:

1234567,7654321,2026-04-20 15:32:00,bestie

2.应用程序调用传输层体供的接口,把数据交给传输层。传输层拿到数据之后,构造出“传输层数据包”,传输层的协议主要是两个:TCP和UDP

TCP报头 1234567,7654321,2026-04-20 15:32:00,bestie

TCP数据包=TCP报头(TCP功能相关属性)+TCP载荷(应用层数据包)

传输层报头会记录应用层使用哪个协议(准确的说是数据交给那个应用程序)

3.传输层构造好数据之后,继续调用网络层的API,把传输层的数据包交给网络层,网络层继续进行处理,网络层最主要的协议就是IP协议,IP协议继续对上述数据包进行加工=>拼上IP报头,IP报头里就会记录当前传输层使用的是哪个协议

IP报头 TCP报头 1234567,7654321,2026-04-20 15:32:00,bestie

4.IP协议继续调用数据链路层的API,把IP数据包交给数据链路层,数据链路层中核心协议—“以太网”,以太网这个协议,也会在网络层数据包的基础上进一步加工。数据链路层报头也会记录网络层使用哪个协议。

以太网的报头 IP报头 TCP报头 1234567,7654321,2026-04-20 15:32:00,bestie 以太网的尾巴

5.以太网继续这样的数据交给硬件设备(网卡),网卡会把上述二进制数据,最终以光信号/电信号.电磁波信号传播出去了.

当这些数据到达我好龟龟的主机,逐层进行解析

1.数据到达接收方的网卡,光信号,网卡把光信号还原成二进制,再把二进制数据交给上层数据链路层。

2.数据链路层按照以太网协议进行解析,把报头和报尾取出来,剩下的载荷,往上传递给网络层。

以太网的报头 IP报头 TCP报头 1234567,7654321,2026-04-20 15:32:00,bestie 以太网的尾巴

3.网络层拿到这个数据之后,按照IP协议的格式解析,再把载荷数据交给传输层。

IP报头 TCP报头 1234567,7654321,2026-04-20 15:32:00,bestie

4.传输层拿到数据之后,也是类似的操作,按照TCP协议来解析,取出载荷,交给应用层

TCP报头 1234567,7654321,2026-04-20 15:32:00,bestie

5.QQ应用程序,解析应用层数据,拿到关键信息,展示到界面上,给出提示

1234567,7654321,2026-04-20 15:32:00,bestie

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐