https://i-blog.csdnimg.cn/direct/fc1a7f90bc24499ca71d7c341bf8bc2b.png" />
1. 应用层 :
2. 传输层:
3. 网络层:
4.链路层:
通过网络发送信息时,数据在内存中的流转过程
一、用户内存中的流转
-
应用层数据生成
- 当用户使用应用程序(如浏览器、即时通讯软件等)创建要发送的信息时,这些信息首先在应用程序的内存空间中以特定的数据结构存在。例如,在即时通讯软件中,消息可能包含发送者、接收者、消息内容、时间戳等信息,这些数据以结构体或者对象的形式存储在应用程序的堆或栈内存中。
- 应用程序可能会对这些数据进行编码或格式化处理,例如将文本消息转换为适合网络传输的编码格式(如UTF - 8)。
-
向操作系统传递数据
- 应用程序通过系统调用(如在Windows中的
WSASend
,在Linux中的send
系统调用)将准备好的数据传递给操作系统。在这个过程中,数据从应用程序的内存空间复制到操作系统内核的缓冲区中。这个缓冲区可能是内核为网络通信专门设置的内存区域,如套接字缓冲区。
- 应用程序通过系统调用(如在Windows中的
二、操作系统中的流转
-
协议栈处理
-
传输层:
- 在操作系统内核中,数据首先到达传输层。如果使用的是TCP协议,TCP模块会为数据添加TCP头部信息,包括源端口、目的端口、序列号、确认号、窗口大小等。这些信息有助于实现可靠的端到端通信。如果是UDP协议,则添加相对简单的UDP头部,主要包含源端口和目的端口。这个过程中,数据在传输层的内核缓冲区中进行处理,缓冲区的大小通常是有限制的(例如,在Linux中可以通过系统参数调整TCP缓冲区大小)。
-
网络层:
-
数据链路层:
- 当数据到达数据链路层时,会添加数据链路层头部和尾部信息。例如,在以太网中,会添加以太网头部(包含源MAC地址、目的MAC地址、帧类型等)和尾部(帧校验序列)。在这个过程中,数据被组织成适合在物理网络介质上传输的帧格式,并且存储在数据链路层的缓冲区中。
-
-
与网卡交互
- 操作系统将构建好的数据帧从数据链路层的内核缓冲区移动到与网卡对应的驱动程序缓冲区。这个过程涉及到内存拷贝操作,以确保数据能够被网卡正确处理。