从系统的角度讲,数据是怎么被传输的?

从系统的角度讲,数据是怎么被传输的?

每一次创建进程就创建进程控制块PCB,进程控制块的核心实现就是task_struct,task_struct是一个结构体;

在task_srtruct中有一个files指针,用于指向文件的结构体,文件结构体当中就有一个文件描述符数组,数组的索引号就是文件描述符,用于打开文件;

每个文件都有一个inode,socket文件里的inode就指向内核当中socket结构体,在这个结构体当中会有一个发送队列和接收队列。发送队列/接收队列都存在很多的sk_buff,这个sk_buff就是网络当中各个抽象层的数据包。

为什么每一层要使用相同的结构体?

不需要每次传递都进行拷贝,如果拷贝会浪费很多cpu性能

具体的实现:
sk_buff当中有一个叫做data的指针

每次接收和发送就靠里面的data指针的移动

  • 接收就是逐步剥离首部的过程:

因此指针指向整个数据包的过程是向后移动的,也就是data指针的值一直在增加

  • 发送就是逐步增加首部的过程:

所以在数据加上头部之前,需要预留出一部分头部的空间,之后在每一层加上头部时data指针的值就减少,向前移动,指向到新加上的头部的开始位置

以下就是整个进程操作数据发送接收的流程


欢迎批评指正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值