<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Gannicus.Guo的博客]]></title><description><![CDATA[Gannicus Guo的 DIY TCP/IP之旅，549865672@qq.com]]></description><link>https://blog.youkuaiyun.com/pro_human</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; pro_human]]></copyright><item><title><![CDATA[QEMU + ARM64 Linux kernel export memory layout info via debugfs]]></title><link>https://blog.youkuaiyun.com/pro_human/article/details/123466388</link><guid>https://blog.youkuaiyun.com/pro_human/article/details/123466388</guid><author>pro_human</author><pubDate>Sun, 13 Mar 2022 21:34:51 +0800</pubDate><description><![CDATA[上一篇文章已经搭建了QEMU+ARM64 Linux Kernel的开发环境，kernel的启动信息里没有memory layout的信息，配置kernel，通过debugfs暴露memory layout info.
编译Linux kernel 再次启动qemu
mount -t debugfs none /sys/kernel/debug/

# cd /sys/kernel/debug/
# ls -al
total 0
drwx------   34 root     root          ]]></description><category></category></item><item><title><![CDATA[搭建QEMU + ARM64 Linux Kernel 开发环境]]></title><link>https://blog.youkuaiyun.com/pro_human/article/details/123446938</link><guid>https://blog.youkuaiyun.com/pro_human/article/details/123446938</guid><author>pro_human</author><pubDate>Sat, 12 Mar 2022 20:54:58 +0800</pubDate><description><![CDATA[QEMU + ARM64 Linux Kernel
欢迎使用Markdown编辑器
你好！ 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章，了解一下Markdown的基本语法知识。
新的改变
我们对Markdown编辑器进行了一些功能拓展与语法支持，除了标准的Markdown编辑器功能，我们增加了如下几点新功能，帮助你用它写博客：

全新的界面设计 ，将会带来全新的写作体验；
在创作中心设置你喜爱的代码高亮样式，Markdown ]]></description><category></category></item><item><title><![CDATA[dump array]]></title><link>https://blog.youkuaiyun.com/pro_human/article/details/103972687</link><guid>https://blog.youkuaiyun.com/pro_human/article/details/103972687</guid><author>pro_human</author><pubDate>Sat, 12 Mar 2022 18:10:40 +0800</pubDate><description><![CDATA[#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;

int main(int argc, char *argv[])
{
	unsigned int sz = 0, idx = 0, end;
	if (argc &lt;= 2) {
		printf("Usage: ./test &lt;x&gt; &lt;y&gt;\n");
		retur...]]></description><category></category></item><item><title><![CDATA[Ubuntu Compile and Install Linux Kernel]]></title><link>https://blog.youkuaiyun.com/pro_human/article/details/102716943</link><guid>https://blog.youkuaiyun.com/pro_human/article/details/102716943</guid><author>pro_human</author><pubDate>Thu, 24 Oct 2019 16:43:13 +0800</pubDate><description><![CDATA[Get Linux kernel source code from www.kernel.org

I choose linux-4.14.150.tar.gz to download the tarball


decompress the tarball

 tar -xvf linux-4.14.150.tar.xz


Install build dependency tools

su...]]></description><category></category></item><item><title><![CDATA[python 实时绘制 iperf吞吐量数据]]></title><link>https://blog.youkuaiyun.com/pro_human/article/details/102484901</link><guid>https://blog.youkuaiyun.com/pro_human/article/details/102484901</guid><author>pro_human</author><pubDate>Thu, 10 Oct 2019 16:23:48 +0800</pubDate><description><![CDATA[python matplotlib 实时绘制iperf吞吐量数据
效果展示
单条流

多条流

python 代码
import sys
import matplotlib.pyplot as plt
import numpy as np
import time
import thread
from matplotlib import animation

colors = ["red",
   ...]]></description><category></category></item><item><title><![CDATA[vim 语法补齐插件: YouCompleteMe]]></title><link>https://blog.youkuaiyun.com/pro_human/article/details/102484629</link><guid>https://blog.youkuaiyun.com/pro_human/article/details/102484629</guid><author>pro_human</author><pubDate>Thu, 10 Oct 2019 16:18:49 +0800</pubDate><description><![CDATA[step1: download vundle plugin
git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/Vundle.vim
step2: configure vundle plugin in vimrc
reference: .vim/bundle/Vundle.vim/README_ZH_CN.md
请将以下加在 ....]]></description><category></category></item><item><title><![CDATA[Gannicus Guo的DIY TCP/IP 连载目录]]></title><link>https://blog.youkuaiyun.com/pro_human/article/details/91987837</link><guid>https://blog.youkuaiyun.com/pro_human/article/details/91987837</guid><author>pro_human</author><pubDate>Fri, 14 Jun 2019 17:42:19 +0800</pubDate><description><![CDATA[Gannicus Guo的DIY TCP/IP 连载目录
该专栏描述本人自己动手写的一个简化的TCP/IP协议。经测试该协议可以运行在Ubuntu 16.10 x86_64 操作系统用户空间。便于描述，将该TCP/IP协议称为DIY TCP/IP 。专栏内容包括DIY TCP/IP实现的可行性分析，依赖的编程接口，ARP数据帧的收发，ICMP Echo (PING)数据帧的收发，简单的基于ARP表...]]></description><category></category></item><item><title><![CDATA[DIY TCP/IP TCP模块的实现10]]></title><link>https://blog.youkuaiyun.com/pro_human/article/details/91801254</link><guid>https://blog.youkuaiyun.com/pro_human/article/details/91801254</guid><author>pro_human</author><pubDate>Thu, 13 Jun 2019 10:44:17 +0800</pubDate><description><![CDATA[上一篇：DIY TCP/IP TCP模块的实现9
9.12	TCP滑动窗口的实现4
本节在9.11节的基础上，实现9.9节介绍的TCP滑动窗口算法。DIY TCP/IP在TCP连接建立之后，接收到TCP Client发送的数据帧时，将收到的TCP数据帧携带的数据放入滑动窗口中。正确更新滑动窗口数据结构中的”指针”位置，根据滑动窗口的指针位置计算接收缓存中剩余的空间大小，即本地TCP连接的windo...]]></description><category></category></item><item><title><![CDATA[DIY TCP/IP TCP模块的实现9]]></title><link>https://blog.youkuaiyun.com/pro_human/article/details/91410600</link><guid>https://blog.youkuaiyun.com/pro_human/article/details/91410600</guid><author>pro_human</author><pubDate>Tue, 11 Jun 2019 07:37:11 +0800</pubDate><description><![CDATA[上一篇：DIY TCP/IP TCP模块的实现8
9.11	TCP滑动窗口的实现3
9.10节的DIY TCP/IP已经可以正确接收TCP数据帧了。9.10节只是解析一下收到的TCP数据帧携带的数据长度，没有对接收到的数据部分做任何处理。在实现将接收到的TCP数据帧携带的数据放入滑动窗口之前，本节先来实现滑动窗口的初始化。DIY TCP/IP没有编译成动态库被其他应用程序调用，所以需要模拟一个读取...]]></description><category></category></item><item><title><![CDATA[DIY TCP/IP TCP模块的实现8]]></title><link>https://blog.youkuaiyun.com/pro_human/article/details/91364764</link><guid>https://blog.youkuaiyun.com/pro_human/article/details/91364764</guid><author>pro_human</author><pubDate>Mon, 10 Jun 2019 11:12:58 +0800</pubDate><description><![CDATA[上一篇：DIY TCP/IP TCP模块的实现7
9.10	TCP滑动窗口的实现2
9.8节实现了TCP三步握手数据帧的交互，完成了TCP连接的建立。主机A关闭GRO后，DIY TCP/IP可以正确接收到携带数据的TCP帧。在实现TCP滑动窗口之前，先完成对携带数据的TCP帧的接收。本节的目标是，接收到携带数据的TCP帧时，检验TCP帧的序号是否是希望接收到的序号，构建TCP ACK，确认收到TC...]]></description><category></category></item><item><title><![CDATA[DIY TCP/IP TCP模块的实现7]]></title><link>https://blog.youkuaiyun.com/pro_human/article/details/91357720</link><guid>https://blog.youkuaiyun.com/pro_human/article/details/91357720</guid><author>pro_human</author><pubDate>Sun, 09 Jun 2019 21:39:17 +0800</pubDate><description><![CDATA[上一篇：DIY TCP/IP TCP模块的实现6
9.9	TCP滑动窗口的实现1
9.1节介绍TCP头部结构时，已经介绍过TCP头部的window size是本地TCP连接的接收缓存大小。TCP的接收方通过window size把接收缓存的大小告知发送方。TCP发送方根据接收方的window size发送数据，以确保接收方有足够的缓存存放数据。TCP通过滑动窗口管理发送缓存和接收缓存。DIY TC...]]></description><category></category></item><item><title><![CDATA[DIY TCP/IP TCP模块的实现5]]></title><link>https://blog.youkuaiyun.com/pro_human/article/details/91158888</link><guid>https://blog.youkuaiyun.com/pro_human/article/details/91158888</guid><author>pro_human</author><pubDate>Sun, 09 Jun 2019 21:13:55 +0800</pubDate><description><![CDATA[上一篇：DIY TCP/IP TCP模块的实现4
9.7	TCP三步握手的实现2
本节基于9.6节对TCP三步握手的分析，扩展9.5节的代码，实现TCP的三步握手。具体来说是扩展9.5节的process_tcp_syn函数。DIY TCP/IP的TCP模块是TCP Server，监听指定端口，在TCP模块正确接收TCP SYN时，解析TCP SYN并保存对应的信息。构建TCP SYN-ACK头部，...]]></description><category></category></item><item><title><![CDATA[DIY TCP/IP TCP模块的实现6]]></title><link>https://blog.youkuaiyun.com/pro_human/article/details/91348574</link><guid>https://blog.youkuaiyun.com/pro_human/article/details/91348574</guid><author>pro_human</author><pubDate>Sat, 08 Jun 2019 22:51:25 +0800</pubDate><description><![CDATA[上一篇：DIY TCP/IP TCP模块的实现5
9.8	TCP三步握手的实现3
本节介绍Linux GRO对DIY TCP/IP的TCP模块接收数据帧的影响。9.7节完成了TCP三步握手的实现，但是在TCP连接建立之后，DIY TCP/IP收到了长度超过1500的TCP数据帧，而且这种TCP数据帧在DIY TCP/IP的TCP模块检查校验和均失败，本节分析并处理这种失败的情况。
回顾一下DIY ...]]></description><category></category></item><item><title><![CDATA[DIY TCP/IP TCP模块的实现4]]></title><link>https://blog.youkuaiyun.com/pro_human/article/details/90897471</link><guid>https://blog.youkuaiyun.com/pro_human/article/details/90897471</guid><author>pro_human</author><pubDate>Wed, 05 Jun 2019 10:03:51 +0800</pubDate><description><![CDATA[上一篇：DIY TCP/IP TCP模块的实现3
9.6	TCP三步握手的实现1
本节先介绍TCP三步握手过程，代码实现在9.7节介绍。先在主机A上通过tcpdump抓包看一下三步握手建立TCP连接的帧交互过程。与本章前几个小节的测试方法一样，同样是通过iperf建立TCP连接，主机A上运行的是x86_64 Ubuntu16.04操作系统，在主机A的终端中键入iperf -s -i 1运行TCP的...]]></description><category></category></item><item><title><![CDATA[DIY TCP/IP TCP模块的实现3]]></title><link>https://blog.youkuaiyun.com/pro_human/article/details/90758689</link><guid>https://blog.youkuaiyun.com/pro_human/article/details/90758689</guid><author>pro_human</author><pubDate>Mon, 03 Jun 2019 20:44:59 +0800</pubDate><description><![CDATA[上一篇：DIY TCP/IP TCP模块的实现2
9.5	TCP连接状态机的实现

TCP是面向连接的，即TCP连接的双方各自维护一个连接状态机，约定在各个状态可以接收和处理的数据帧，以及接收到特定数据帧时需要转换到的状态。上图描述了TCP的连接状态机转换图，由于是全双工连接，TCP连接的建立和断开都有主动和被动的区别。按照先连接，后断开，先主动，后被动的顺序，解释状态转换图。
连接建立之前，双方...]]></description><category></category></item><item><title><![CDATA[DIY TCP/IP TCP模块的实现2]]></title><link>https://blog.youkuaiyun.com/pro_human/article/details/90743182</link><guid>https://blog.youkuaiyun.com/pro_human/article/details/90743182</guid><author>pro_human</author><pubDate>Sun, 02 Jun 2019 20:59:38 +0800</pubDate><description><![CDATA[上一篇：DIY TCP/IP TCP模块的实现1
9.4	TCP连接的初始化
TCP是面向连接的协议，面向连接即有状态的协议。通信双方通过三步握手，达到连接建立的状态，然后基于这种状态交互TCP数据帧。断开连接是通信双方通过四步握手达到断开连接的状态。9.1节提到&lt;源IP地址，源端口，目标IP地址，目标端口&gt;四元组可以标识通信双方建立的TCP连接。所以定义TCP连接的数据结构应包括四元...]]></description><category></category></item><item><title><![CDATA[DIY TCP/IP TCP模块的实现1]]></title><link>https://blog.youkuaiyun.com/pro_human/article/details/90705625</link><guid>https://blog.youkuaiyun.com/pro_human/article/details/90705625</guid><author>pro_human</author><pubDate>Thu, 30 May 2019 21:10:40 +0800</pubDate><description><![CDATA[上一篇：DIY TCP/IP TCP模块的实现0
9.3	TCP数据帧的接收
基于9.1和9.2节的介绍，本节实现TCP数据帧的接收。IP模块将上层协议类型为0x06的IP数据帧交给TCP模块，TCP模块根据IP数据帧构造TCP伪头部，剥去IP头部后得到TCP数据帧。将TCP伪首部和TCP数据帧一起计算，检验TCP头部校验和。校验和检验通过则表明DIY TCP/IP能正确接收TCP数据帧。再解析T...]]></description><category></category></item><item><title><![CDATA[DIY TCP/IP TCP模块的实现0]]></title><link>https://blog.youkuaiyun.com/pro_human/article/details/90647494</link><guid>https://blog.youkuaiyun.com/pro_human/article/details/90647494</guid><author>pro_human</author><pubDate>Tue, 28 May 2019 21:44:32 +0800</pubDate><description><![CDATA[上一篇：DIY TCP/IP IP模块和ICMP模块的实现6
9.	TCP模块的实现
本章实现DIY TCP/IP的TCP模块，目标是DIY TCP/IP可以支持局域网内iperf TCP吞吐量测试。围绕该目标将本章内容分为：TCP数据帧结构介绍；TCP伪首部介绍；TCP三步握手的实现，三步握手的实现还包括，TCP连接数据结构的定义，围绕TCP连接数据结构，实现简单的TCP连接状态机；TCP滑动窗...]]></description><category></category></item><item><title><![CDATA[DIY TCP/IP IP模块和ICMP模块的实现6]]></title><link>https://blog.youkuaiyun.com/pro_human/article/details/90612184</link><guid>https://blog.youkuaiyun.com/pro_human/article/details/90612184</guid><author>pro_human</author><pubDate>Mon, 27 May 2019 21:36:39 +0800</pubDate><description><![CDATA[上一篇：DIY TCP/IP IP模块和ICMP模块的实现5
8.8	IP分片的发送
本节在8.7节的基础上修改ICMP模块对ICMP Echo Ping Reuqest的处理，构建ICMP Echo Ping Reply 数据帧，将长度超过MTU_SIZE (1500字节)的ICMP Echo Ping Reply数据帧交给IP模块 ，在IP模块添加IP分片的实现，并发送IP分片。IP分片是重组...]]></description><category></category></item><item><title><![CDATA[DIY TCP/IP IP模块和ICMP模块的实现5]]></title><link>https://blog.youkuaiyun.com/pro_human/article/details/90577994</link><guid>https://blog.youkuaiyun.com/pro_human/article/details/90577994</guid><author>pro_human</author><pubDate>Sun, 26 May 2019 17:23:53 +0800</pubDate><description><![CDATA[上一篇：DIY TCP/IP IP模块和ICMP模块的实现4
8.7	IP分片的接收
本节实现DIY TCP/IP对IP 分片的接收，需要正确检验每个IP分片首部的校验和，将属于同一个identification的IP分片全部正确接收后，按照分片数据的偏移量，重新组合上层协议数据帧，再将重组后的数据帧交给相应模块处理。本节的验证是通过Large Packet Ping，如果重组后的IP数据帧交给I...]]></description><category></category></item></channel></rss>