【网络】Socket底层讲解

文章目录


说TCP的Socket就是一个文件流,是非常准确的。
因为,Socket在Linux中就是以文件的形式存在的。除此之外,还存在文件描述符。写入和读出,也是通过文件描述符。
在内核中,Socket是一个文件,那对应就有文件描述符。
每一个进程都有一个数据结构task struct,里面指向一个文件描述符数组,来列出这个进程打开的所有文件的文件描述符
文件描述符是一个整数,是这个数组的下标。
这个数组中的内容是一个指针,指向内核中所有打开的文件的列表。既然是一个文件,就会有一个inode,只不过Socket对应的inode不像真正的文件系统一样,保存在硬盘上的,而是在内存中的。
在这个inode中,指向了Socket在内核中的Socket结构。
在这个结构里面, 主要的是两个队列,一个是发送队列,一个是接收队列。在这两个队列里面保存的是一个缓存 sk_buff。这个缓存里面能够看到完整的包的结构。和TCP收发包可以对应起来。
数据结构图:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/vict_wang/article/details/88698117