TCP/IP网络协议栈学习
文章平均质量分 92
对TCP/IP网络协议栈的理论知识和源码进行学习、分析、研究以及优化。
Ch_ty
这个作者很懒,什么都没留下…
展开
-
Linux操作系统学习笔记(二十一)网络通信之三次握手
一. 前言 三次握手的基本知识在前文中已说明,本文从源码入手来详细分析其实现原理。二. 基本过程和API 一个简单的TCP客户端/服务端模型如下所示,其中Socket()会创建套接字并返回描述符,在前文已经详细分析过。之后bind()会绑定本地的IP/Port二元组用以定位,而connect(), listen(), accept()则是本篇的重点所在,即通过三次握手完成连接的建立。三. 源码分析3.1 bind 首先来看看bind()函数。其API如下所示int bind(int原创 2020-10-24 21:47:00 · 612 阅读 · 0 评论 -
NS《集合啦动物森友会》联机系统硬核分析及优化讨论
一. 联机系统简介 集合啦动物森友会是最近NS的大爆款,我也第一时间入坑玩的不亦乐乎。在最近一周的游玩过程中,唯一被大家抱怨的问题大概就是这个联机系统了。首先我来简单介绍一下动物森友会的网络联机流程和中间的一些机制。需要开通NS会员这肯定没啥好说的去别的岛上逛或者别人来自己岛上逛只能二选一,不可以自己开着岛让别人来玩同时自己跑别人岛上玩如果想去别人岛上玩,此时不允许岛上有人开着窗口...原创 2020-03-29 19:54:31 · 3105 阅读 · 0 评论 -
TCP拥塞控制算法BBR源码分析
BBR是谷歌与2016年提出的TCP拥塞控制算法,在Linux4.9的patch中正式加入。该算法一出,瞬间引起了极大的轰动。在CSDN上也有众多大佬对此进行分析讨论,褒贬不一。 本文首先对源码进行了分析,并在此基础上对BBR算法进行总结。1.源码分析/* Bottleneck Bandwidth and RTT (BBR) congestion control * ...原创 2018-04-19 23:38:34 · 9437 阅读 · 3 评论 -
网络协议栈学习之socket, sock_common, sock, 和 sk_buff
一直很好奇socket是如何实现的,底层的数据结构又是如何,因此在这里对socket的数据结构进行分析原创 2018-06-12 22:47:44 · 2609 阅读 · 0 评论 -
Netfilter学习之NAT类型动态配置(一)iptables和Netfilter简介
通过一段时间的学习,我发现目前尚未有公开的技术实现NAPT的动态配置,仅仅通过iptables实现一些固定的配置无法满足动态配置的需求。因此,本系列博客目的在于通过对Netfilter和Iptables的学习,通过内核编程实现Full Cone, Restricted Cone, Port Restricted Cone和Symmetric NAPT的配置。 介绍iptables和Net...原创 2017-11-28 23:35:58 · 1667 阅读 · 0 评论 -
Netfilter学习之NAT类型动态配置(二)NAT类型介绍及MASQUERADE用户层的实现
在上一节中,我们介绍了iptables和netfilter的基本关系,在这里我们会进一步介绍现有的NAT以及Linux中大多已实现的MASQUERADE实现原理。1. NAT类型介绍 常用的NAT类型主要有Full Cone NAT(全锥型), Restricted NAT(限制型锥型), Port Restricted NAT(端口限制型锥型), Symmetric NAT(对...原创 2018-02-04 20:38:20 · 2986 阅读 · 0 评论 -
Netfilter学习之NAT类型动态配置(三)MASQUERADE内核空间的实现
本节中,我们分析MASQUERADE在内核空间的实现。详细分析在代码中以注释的形式说明。1.ipt_MASQUERADE.c源码分析 iptables 命令行在用户空间配置之后,会激活相应的内核空间的钩子函数。此源码即为钩子函数的注册。/* Masquerade. Simple mapping which alters range to a local IP addre......原创 2018-03-25 23:14:57 · 2837 阅读 · 0 评论 -
Netfilter学习之NAT类型动态配置(四)nf_nat_core.c源码解析
在研究了masquerade的用户空间和内核源码之后,我们发现最后进入了nf_nat_setup_info()函数,该函数位于nf_nat_core.c之中,是Netfilter的NAT表核心函数的实现。1 nf_nat_core.c源码分析 本小节分析了nf_nat_core的源码,重点分析当Iptables指定的钩子函数激活后,在Netfilter中是如何识别和起作用的。这里...原创 2018-04-06 11:39:42 · 4216 阅读 · 0 评论 -
Netfilter学习之NAT类型动态配置(五)全锥型、限制型锥形、端口限制型锥型、对称型NAT的实现思路
本节中,我们根据上节的分析,从理论上分析不同NAT的实现思路。对NAT不了解的可以看Netfilter学习之NAT类型动态配置(二)。1. 端口限制型NAT Port Restricted NAT是Netfilter中自带的NAT转化规则,即MASQUERADE。此种情况下,需要检测外部tuple和目标tuple四个变量,均相同才可以成功访问内部tuple。2. 限制型N...原创 2018-04-14 20:19:59 · 32885 阅读 · 0 评论 -
Netfilter学习之NAT类型动态配置(六)全锥型NAT用户空间iptables命令行实现
本文主要实现全锥型NAT的用户空间iptables命令行扩展的实现,实现思路见上文,具体可以模仿MASQUERADE的源码进行改写。1.关键部分实现代码 由于fullcone类型并不需要输入参数,因此parse可以为空,print和save也很简单,只需要help和结构注册两部分保证正确即可。 help如下:static void FULLCONE_help(voi...原创 2018-04-22 22:10:32 · 1567 阅读 · 1 评论 -
Netfilter学习之NAT类型动态配置(七)全锥型NAT内核空间实现
本文主要实现全锥型NAT的用户空间iptables命令行扩展的实现。实现思路见上文。1.关键部分实现代码2.小结原创 2018-05-24 20:34:12 · 2413 阅读 · 14 评论 -
Netfilter学习之NAT类型动态配置(八)nf_nat_proto_common.c代码解析
nf_nat_proto_common.c实现了对称型的端口改变,在此我决定对其代码进行分析,以便实现对对称型NAT的随意改动。 具体代码如下:#include <linux/types.h>#include <linux/random.h>#include <linux/netfilter.h>#include <linux/原创 2018-05-25 21:26:45 · 1364 阅读 · 0 评论