博客
关于我
《Linux内核TCP/IP 实现》:协议栈源码总纲一
阅读量:236 次
发布时间:2019-03-01

本文共 1640 字,大约阅读时间需要 5 分钟。

一、Linux内核网络栈代码的准备知识

1. Linux内核IPv4网络部分的分层结构

Linux内核的网络栈主要由以下几个层次组成,每个层次负责不同的网络协议处理:

BSD socket层:这一层处理BSD socket相关操作,每个socket在内核中以struct socket结构体表示。主要涉及的文件包括:

net/socket.c  net/protocols.c

INET socket层:BSD socket是通用的网络协议接口,但在处理TCP/IP协议时,INET socket层负责管理socket实例及相关的额外参数。涉及的文件包括:

net/ipv4/protocol.c  net/ipv4/af_inet.c  net/core/sock.c

TCP/UDP层:处理传输层协议的操作,主要通过struct inet_protocol和struct proto结构体来实现。涉及的文件包括:

net/ipv4/udp.c  net/ipv4/datagram.c  net/ipv4/tcp.c  net/ipv4/tcp_input.c  net/ipv4/tcp_output.c  net/ipv4/tcp_minisocks.c  net/ipv4/tcp_timer.c

IP层:负责网络层的协议处理,主要通过struct packet_type结构体来实现。涉及的文件包括:

net/ipv4/ip_forward.c  net/ipv4/ip_fragment.c  net/ipv4/ip_input.c  net/ipv4/ip_output.c

数据链路层和驱动程序:网络设备以struct net_device结构体表示,通用处理在dev.c中,驱动程序位于/driver/net目录下。

2. Linux中TCP/IP网络层次结构与实现

Linux通过一层相互依赖的软件层次实现TCP/IP模型,主要包括BSD socket层、INET socket层、传输层、网络层和链路层。应用程序通过系统调用将数据传递到内核空间,内核函数处理相应数据结构:

Linux支持多种通信协议族,其中TCP/IP是本文的重点。其他协议族包括:

  • TCP/IP网络协议族
  • UNIX域协议
  • X.25协议
  • AX.25协议
  • IPX协议
  • AppleTalk协议

3. 数据结构(msghdr, sk_buff, socket, sock, proto_ops, proto)

BSD套接字层:操作对象是socket,数据存放在msghdr结构中。在创建socket时,需要指定family、type和protocol参数,并建立socket实例及文件描述符。同时初始化socket操作函数proto_ops。

对于stream类型socket,初始化inet_stream_ops;对于dgram类型,初始化inet_dgram_ops。inet_stream_ops包含tcp_close等操作,用于释放socket资源。

创建socket时:初始化sock数据结构,包括接收队列、发送队列和backlog队列。对于inet类型socket,sock的proto初始化为tcp_prot。

数据传输过程:write操作将数据整理成msghdr格式,调用sock_sendmsg将数据传递到INET层。INET层将数据拆分成sk_buff结构,逐层传递给下层协议处理。

路由系统:包含neighbour表、FIB和路由缓存。neighbour表存储本机连接的邻居信息,FIB存储最重要的路由规则,路由缓存用于快速查找路由信息。

数据链路层:net_device结构体代表网络接口设备,系统通过dev_base链表管理所有net_device实例。注册和注销net_device分别通过register_netdev和unregister_netdev函数完成。

转载地址:http://acyt.baihongyu.com/

你可能感兴趣的文章
NLP 项目:维基百科文章爬虫和分类【01】 - 语料库阅读器
查看>>
NLP_什么是统计语言模型_条件概率的链式法则_n元统计语言模型_马尔科夫链_数据稀疏(出现了词库中没有的词)_统计语言模型的平滑策略---人工智能工作笔记0035
查看>>
NLP学习笔记:使用 Python 进行NLTK
查看>>
NLP的神经网络训练的新模式
查看>>
NLP采用Bert进行简单文本情感分类
查看>>
NLP问答系统:使用 Deepset SQUAD 和 SQuAD v2 度量评估
查看>>
NLP:使用 SciKit Learn 的文本矢量化方法
查看>>
Nmap扫描教程之Nmap基础知识
查看>>
Nmap端口扫描工具Windows安装和命令大全(非常详细)零基础入门到精通,收藏这篇就够了
查看>>
NMAP网络扫描工具的安装与使用
查看>>
NMF(非负矩阵分解)
查看>>
nmon_x86_64_centos7工具如何使用
查看>>
NN&DL4.1 Deep L-layer neural network简介
查看>>
NN&DL4.3 Getting your matrix dimensions right
查看>>
NN&DL4.8 What does this have to do with the brain?
查看>>
nnU-Net 终极指南
查看>>
No 'Access-Control-Allow-Origin' header is present on the requested resource.
查看>>
NO 157 去掉禅道访问地址中的zentao
查看>>
no available service ‘default‘ found, please make sure registry config corre seata
查看>>
no connection could be made because the target machine actively refused it.问题解决
查看>>