网络子系统53_ip协议分片重组_内存阈值

简介:
//调用路径:ip_defrag->ip_evictor
//	分片重组时,可使用内存上下限:
//		1.sysctl_ipfrag_high_thresh 可用内存上限
//		2.sysctl_ipfrag_low_thresh 内存超过上限后,需要释放内存到此限
1.1 static void ip_evictor(void)
{
	struct ipq *qp;
	struct list_head *tmp;
	int work;
	//计算需要释放的内存
	work = atomic_read(&ip_frag_mem) - sysctl_ipfrag_low_thresh;
	if (work <= 0)
		return;

	while (work > 0) {
		read_lock(&ipfrag_lock);
		if (list_empty(&ipq_lru_list)) {//最近最久没有没有被使用的链表,链表头的ipq最久没有被使用
			read_unlock(&ipfrag_lock);
			return;
		}
		//在获取锁的情况下,释放ipq
		tmp = ipq_lru_list.next;
		qp = list_entry(tmp, struct ipq, lru_list);
		atomic_inc(&qp->refcnt);//增加ipq的引用计数,防止其突然消失
		read_unlock(&ipfrag_lock);

		spin_lock(&qp->lock);
		if (!(qp->last_in&COMPLETE))//ipq没有接收完全
			ipq_kill(qp);//
		spin_unlock(&qp->lock);

		ipq_put(qp, &work);
		IP_INC_STATS_BH(IPSTATS_MIB_REASMFAILS);
	}
}
//调用路径:ip_evictor->ipq_kill
1.2 static void ipq_kill(struct ipq *ipq)
{
	if (del_timer(&ipq->timer))//删除ipq的定时器
		atomic_dec(&ipq->refcnt);//递减定时器持有的引用计数

	if (!(ipq->last_in & COMPLETE)) {//ipq没有接收完全
		ipq_unlink(ipq);//将ipq从ipq hash表bucket的链表上摘下来
		atomic_dec(&ipq->refcnt);//递减ipq hash表bucket对其持有的引用计数
		ipq->last_in |= COMPLETE;//标记ipq接收完全,防止其被更新
	}
}

1.3 static __inline__ void ipq_put(struct ipq *ipq, int *work)
{
	if (atomic_dec_and_test(&ipq->refcnt))//递减在ip_evictor中对ipq的引用
		ip_frag_destroy(ipq, work);//释放关联到此ipq的skb
}

1.4 static void ip_frag_destroy(struct ipq *qp, int *work)
{
	struct sk_buff *fp;
	//此ipq接收到的所有分片
	fp = qp->fragments;
	while (fp) {
		struct sk_buff *xp = fp->next;

		frag_kfree_skb(fp, work);//释放skb,从work中减去此skb的大小
		fp = xp;
	}

	frag_free_queue(qp, work);//释放ipq结构
}

目录
相关文章
|
6天前
|
数据采集 网络协议 API
HTTP协议大揭秘!Python requests库实战,让网络请求变得简单高效
【9月更文挑战第13天】在数字化时代,互联网成为信息传输的核心平台,HTTP协议作为基石,定义了客户端与服务器间的数据传输规则。直接处理HTTP请求复杂繁琐,但Python的`requests`库提供了一个简洁强大的接口,简化了这一过程。HTTP协议采用请求与响应模式,无状态且结构化设计,使其能灵活处理各种数据交换。
33 8
|
4天前
|
网络协议
UDP协议在网络通信中的独特应用与优势
UDP(用户数据报协议)作为关键的传输层协议,在网络通信中展现出独特优势。本文探讨UDP的无连接性及低开销特性,使其在实时性要求高的场景如视频流、在线游戏中表现优异;其不保证可靠交付的特性赋予应用程序自定义传输策略的灵活性;面向报文的高效处理能力及短小的包头设计进一步提升了数据传输效率。总之,UDP适用于高速、实时性强且对可靠性要求不高的应用场景,为网络通信提供了多样化的选择。
|
6天前
|
网络协议 网络架构 数据格式
TCP/IP基础:工作原理、协议栈与网络层
TCP/IP(传输控制协议/互联网协议)是互联网通信的基础协议,支持数据传输和网络连接。本文详细阐述了其工作原理、协议栈构成及网络层功能。TCP/IP采用客户端/服务器模型,通过四个层次——应用层、传输层、网络层和数据链路层,确保数据可靠传输。网络层负责IP寻址、路由选择、分片重组及数据包传输,是TCP/IP的核心部分。理解TCP/IP有助于深入掌握互联网底层机制。
26 2
|
6天前
|
网络协议 安全 数据安全/隐私保护
动静态IP的网络协议有什么不同
IP地址分为静态和动态两种分配方式。静态IP地址由管理员手动分配,确保设备具有固定且唯一的网络标识,适用于服务器等关键设备。动态IP地址则通过DHCP服务器自动分配,提供更高的灵活性和管理效率,适合个人电脑和移动设备。两者在网络配置、管理和安全性方面各有优劣,需根据具体应用场景进行选择。静态IP地址虽稳定但配置复杂,安全性较低;动态IP地址配置简单,安全性更高,能有效防止针对固定IP的攻击。
|
12天前
|
网络协议
网络协议概览:HTTP、UDP、TCP与IP
理解这些基本的网络协议对于任何网络专业人员都是至关重要的,它们不仅是网络通信的基础,也是构建更复杂网络服务和应用的基石。网络技术的不断发展可能会带来新的协议和标准,但这些基本协议的核心概念和原理将继续是理解和创新网络技术的关键。
27 0
|
30天前
|
存储 编译器 C语言
【C语言篇】数据在内存中的存储(超详细)
浮点数就采⽤下⾯的规则表⽰,即指数E的真实值加上127(或1023),再将有效数字M去掉整数部分的1。
|
2月前
|
存储 分布式计算 Hadoop
HadoopCPU、内存、存储限制
【7月更文挑战第13天】
187 14
|
20天前
|
存储 监控 Docker
如何限制docker使用的cpu,内存,存储
如何限制docker使用的cpu,内存,存储
|
2月前
|
存储 固态存储 芯片
计算机中内存与存储
【7月更文挑战第28天】
33 1
|
2月前
|
存储 弹性计算 程序员
新手程序员如何阿里云服务器配置?新人开发者CPU内存带宽存储怎么选?
对于新手开发者、个人或学生选择阿里云服务器,推荐ECS经济型e实例(ecs.e-c1m1.large),适用于小型网站或轻量应用。配置2核2G内存、3M固定带宽、40G ESSD系统盘,仅99元/年且续费同价。