文章插图
在以太网帧中通过TCP/IP传输HTTP数据
- 图12-5清楚地说明了为容纳控制信息所牺牲的部分带宽.
更多linux内核视频教程文档资料免费领取后台私信【内核】自行获取.
文章插图
Linux内核源码/内存调优/文件系统/进程管理/设备驱动/网络协议栈-学习视频教程-腾讯课堂
2、网络命名空间net
- pid的命名空间, 我们知道内核的许多部分包含在命名空间中. 这可以建立系统的多个虚拟视图, 并彼此分隔开来. 每个实例看起来像是一台运行Linux的独立机器,但在一台物理机器上,可以同时运行许多这样的实例 。在内核版本2.6.24开发期间,内核也开始对网络子系统采用命名空间. 这对该子系统增加了一些额外的复杂性,因为该子系统的所有属性在此前的版本中都是"全局"的,而现在需要按命名空间来管理, 例如, 可用网卡的数量. 对特定的网络设备来说,如果它在一个命名空间中可见,在另一个命名空间中就不一定是可见的.
- 照例需要一个中枢结构来跟踪所有可用的命名空间, 即struct net, 其定义如下:
struct net {atomic_tpassive;/* To decided when the network* namespace should be freed.*/atomic_tcount;/* To decided when the network*namespace should be shut down.*/spinlock_trules_mod_lock;atomic64_tcookie_gen;struct list_headlist;/* list of network namespaces */struct list_headcleanup_list; /* namespaces on death row */struct list_headexit_list;/* Use only net_mutex */struct user_namespace*user_ns;/* Owning user namespace */spinlock_tnsid_lock;struct idrnetns_ids;struct ns_commonns;struct proc_dir_entry*proc_net;struct proc_dir_entry*proc_net_stat;#ifdef CONFIG_SYSCTLstruct ctl_table_setsysctls;#endifstruct sock*rtnl;/* rtnetlink socket */struct sock*genl_sock;struct list_headdev_base_head;struct hlist_head*dev_name_head;struct hlist_head*dev_index_head;unsigned intdev_base_seq; /* protected by rtnl_mutex */intifindex;unsigned intdev_unreg_count;/* core fib_rules */struct list_headrules_ops;struct net_device*loopback_dev;/* The loopback */struct netns_corecore;struct netns_mibmib;struct netns_packetpacket;struct netns_unixunx;struct netns_ipv4ipv4;#if IS_ENABLED(CONFIG_IPV6)struct netns_ipv6ipv6;#endif#if IS_ENABLED(CONFIG_IEEE802154_6LOWPAN)struct netns_ieee802154_lowpanieee802154_lowpan;#endif#if defined(CONFIG_IP_SCTP) || defined(CONFIG_IP_SCTP_MODULE)struct netns_sctpsctp;#endif#if defined(CONFIG_IP_DCCP) || defined(CONFIG_IP_DCCP_MODULE)struct netns_dccpdccp;#endif#ifdef CONFIG_NETFILTERstruct netns_nfnf;struct netns_xtxt;#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)struct netns_ctct;#endif#if defined(CONFIG_NF_TABLES) || defined(CONFIG_NF_TABLES_MODULE)struct netns_nftablesnft;#endif#if IS_ENABLED(CONFIG_NF_DEFRAG_IPV6)struct netns_nf_fragnf_frag;#endifstruct sock*nfnl;struct sock*nfnl_stash;#if IS_ENABLED(CONFIG_NETFILTER_NETLINK_ACCT)struct list_headnfnl_acct_list;#endif#if IS_ENABLED(CONFIG_NF_CT_NETLINK_TIMEOUT)struct list_headnfct_timeout_list;#endif#endif#ifdef CONFIG_WEXT_COREstruct sk_buff_headwext_nlevents;#endifstruct net_generic __rcu*gen;/* Note : following structs are cache line aligned */#ifdef CONFIG_XFRMstruct netns_xfrmxfrm;#endif#if IS_ENABLED(CONFIG_IP_VS)struct netns_ipvs*ipvs;#endif#if IS_ENABLED(CONFIG_MPLS)struct netns_mplsmpls;#endifstruct sock*diag_nlsk;atomic_tfnhe_genid;};
- 使网络子系统完全感知命名空间的工作才刚刚开始 。读者现在看到的情况,即内核版本2.6.24中的情况,仍然处于开发的早期阶段 。因此,随着网络子系统中越来越多的组件从全局管理转换为可感知命名空间的实现,struct net 的长度在未来会不断增长 。现在,基本的基础设施已经转换完毕 。
推荐阅读
- Linux运维三剑客 grep、awk、sed实用笔记
- CVE-2021-4034 关于 Linux Polkit 权限提升漏洞的修复方法
- 2022 年保护 Linux 服务器的 10 种流行开源工具
- 全宇宙最全的Linux运维bash脚本常见用法总结
- 从linux内核看io_uring的实现
- 一文了解在 Python 中如何使用列表推导
- Linux系统中 tar.xz文件解压
- C语言进行Linux网络编程
- linux系统下安装mysql 8.0.26配置文件my.cnf详细注解
- Linux运维常用工具