自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Gannicus.Guo的博客

Gannicus Guo的 DIY TCP/IP之旅,[email protected]

  • 博客(38)
  • 资源 (1)
  • 收藏
  • 关注

原创 QEMU + ARM64 Linux kernel export memory layout info via debugfs

上一篇文章已经搭建了QEMU+ARM64 Linux Kernel的开发环境,kernel的启动信息里没有memory layout的信息,配置kernel,通过debugfs暴露memory layout info.编译Linux kernel 再次启动qemumount -t debugfs none /sys/kernel/debug/# cd /sys/kernel/debug/# ls -altotal 0drwx------ 34 root root

2022-03-13 21:34:51 1729

原创 搭建QEMU + ARM64 Linux Kernel 开发环境

QEMU + ARM64 Linux Kernel欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计 ,将会带来全新的写作体验;在创作中心设置你喜爱的代码高亮样式,Markdown

2022-03-12 20:54:58 3840 1

原创 dump array

#include <stdio.h>#include <stdlib.h>int main(int argc, char *argv[]){ unsigned int sz = 0, idx = 0, end; if (argc <= 2) { printf("Usage: ./test <x> <y>\n"); retur...

2022-03-12 18:10:40 195

原创 Ubuntu Compile and Install Linux Kernel

Get Linux kernel source code from www.kernel.orgI choose linux-4.14.150.tar.gz to download the tarballdecompress the tarball tar -xvf linux-4.14.150.tar.xzInstall build dependency toolssu...

2019-10-24 16:43:13 577

原创 python 实时绘制 iperf吞吐量数据

python matplotlib 实时绘制iperf吞吐量数据效果展示单条流多条流python 代码import sysimport matplotlib.pyplot as pltimport numpy as npimport timeimport threadfrom matplotlib import animationcolors = ["red", ...

2019-10-10 16:23:48 2770 1

原创 vim 语法补齐插件: YouCompleteMe

step1: download vundle plugingit clone https://github.com/gmarik/vundle.git ~/.vim/bundle/Vundle.vimstep2: configure vundle plugin in vimrcreference: .vim/bundle/Vundle.vim/README_ZH_CN.md请将以下加在 ....

2019-10-10 16:18:49 953

原创 Gannicus Guo的DIY TCP/IP 连载目录

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表...

2019-06-14 17:42:19 240

原创 DIY TCP/IP TCP模块的实现10

上一篇:DIY TCP/IP TCP模块的实现99.12 TCP滑动窗口的实现4本节在9.11节的基础上,实现9.9节介绍的TCP滑动窗口算法。DIY TCP/IP在TCP连接建立之后,接收到TCP Client发送的数据帧时,将收到的TCP数据帧携带的数据放入滑动窗口中。正确更新滑动窗口数据结构中的”指针”位置,根据滑动窗口的指针位置计算接收缓存中剩余的空间大小,即本地TCP连接的windo...

2019-06-13 10:44:17 369

原创 DIY TCP/IP TCP模块的实现9

上一篇:DIY TCP/IP TCP模块的实现89.11 TCP滑动窗口的实现39.10节的DIY TCP/IP已经可以正确接收TCP数据帧了。9.10节只是解析一下收到的TCP数据帧携带的数据长度,没有对接收到的数据部分做任何处理。在实现将接收到的TCP数据帧携带的数据放入滑动窗口之前,本节先来实现滑动窗口的初始化。DIY TCP/IP没有编译成动态库被其他应用程序调用,所以需要模拟一个读取...

2019-06-11 07:37:11 182

原创 DIY TCP/IP TCP模块的实现8

上一篇:DIY TCP/IP TCP模块的实现79.10 TCP滑动窗口的实现29.8节实现了TCP三步握手数据帧的交互,完成了TCP连接的建立。主机A关闭GRO后,DIY TCP/IP可以正确接收到携带数据的TCP帧。在实现TCP滑动窗口之前,先完成对携带数据的TCP帧的接收。本节的目标是,接收到携带数据的TCP帧时,检验TCP帧的序号是否是希望接收到的序号,构建TCP ACK,确认收到TC...

2019-06-10 11:12:58 269

原创 DIY TCP/IP TCP模块的实现7

上一篇:DIY TCP/IP TCP模块的实现69.9 TCP滑动窗口的实现19.1节介绍TCP头部结构时,已经介绍过TCP头部的window size是本地TCP连接的接收缓存大小。TCP的接收方通过window size把接收缓存的大小告知发送方。TCP发送方根据接收方的window size发送数据,以确保接收方有足够的缓存存放数据。TCP通过滑动窗口管理发送缓存和接收缓存。DIY TC...

2019-06-09 21:39:17 195

原创 DIY TCP/IP TCP模块的实现5

上一篇:DIY TCP/IP TCP模块的实现49.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头部,...

2019-06-09 21:13:55 225

原创 DIY TCP/IP TCP模块的实现6

上一篇:DIY TCP/IP TCP模块的实现59.8 TCP三步握手的实现3本节介绍Linux GRO对DIY TCP/IP的TCP模块接收数据帧的影响。9.7节完成了TCP三步握手的实现,但是在TCP连接建立之后,DIY TCP/IP收到了长度超过1500的TCP数据帧,而且这种TCP数据帧在DIY TCP/IP的TCP模块检查校验和均失败,本节分析并处理这种失败的情况。回顾一下DIY ...

2019-06-08 22:51:25 247

原创 DIY TCP/IP TCP模块的实现4

上一篇:DIY TCP/IP TCP模块的实现39.6 TCP三步握手的实现1本节先介绍TCP三步握手过程,代码实现在9.7节介绍。先在主机A上通过tcpdump抓包看一下三步握手建立TCP连接的帧交互过程。与本章前几个小节的测试方法一样,同样是通过iperf建立TCP连接,主机A上运行的是x86_64 Ubuntu16.04操作系统,在主机A的终端中键入iperf -s -i 1运行TCP的...

2019-06-05 10:03:51 225

原创 DIY TCP/IP TCP模块的实现3

上一篇:DIY TCP/IP TCP模块的实现29.5 TCP连接状态机的实现TCP是面向连接的,即TCP连接的双方各自维护一个连接状态机,约定在各个状态可以接收和处理的数据帧,以及接收到特定数据帧时需要转换到的状态。上图描述了TCP的连接状态机转换图,由于是全双工连接,TCP连接的建立和断开都有主动和被动的区别。按照先连接,后断开,先主动,后被动的顺序,解释状态转换图。连接建立之前,双方...

2019-06-03 20:44:59 265

原创 DIY TCP/IP TCP模块的实现2

上一篇:DIY TCP/IP TCP模块的实现19.4 TCP连接的初始化TCP是面向连接的协议,面向连接即有状态的协议。通信双方通过三步握手,达到连接建立的状态,然后基于这种状态交互TCP数据帧。断开连接是通信双方通过四步握手达到断开连接的状态。9.1节提到<源IP地址,源端口,目标IP地址,目标端口>四元组可以标识通信双方建立的TCP连接。所以定义TCP连接的数据结构应包括四元...

2019-06-02 20:59:38 429

原创 DIY TCP/IP TCP模块的实现1

上一篇:DIY TCP/IP TCP模块的实现09.3 TCP数据帧的接收基于9.1和9.2节的介绍,本节实现TCP数据帧的接收。IP模块将上层协议类型为0x06的IP数据帧交给TCP模块,TCP模块根据IP数据帧构造TCP伪头部,剥去IP头部后得到TCP数据帧。将TCP伪首部和TCP数据帧一起计算,检验TCP头部校验和。校验和检验通过则表明DIY TCP/IP能正确接收TCP数据帧。再解析T...

2019-05-30 21:10:40 1543

原创 DIY TCP/IP TCP模块的实现0

上一篇:DIY TCP/IP IP模块和ICMP模块的实现69. TCP模块的实现本章实现DIY TCP/IP的TCP模块,目标是DIY TCP/IP可以支持局域网内iperf TCP吞吐量测试。围绕该目标将本章内容分为:TCP数据帧结构介绍;TCP伪首部介绍;TCP三步握手的实现,三步握手的实现还包括,TCP连接数据结构的定义,围绕TCP连接数据结构,实现简单的TCP连接状态机;TCP滑动窗...

2019-05-28 21:44:32 479

原创 DIY TCP/IP IP模块和ICMP模块的实现6

上一篇:DIY TCP/IP IP模块和ICMP模块的实现58.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分片是重组...

2019-05-27 21:36:39 239

原创 DIY TCP/IP IP模块和ICMP模块的实现5

上一篇:DIY TCP/IP IP模块和ICMP模块的实现48.7 IP分片的接收本节实现DIY TCP/IP对IP 分片的接收,需要正确检验每个IP分片首部的校验和,将属于同一个identification的IP分片全部正确接收后,按照分片数据的偏移量,重新组合上层协议数据帧,再将重组后的数据帧交给相应模块处理。本节的验证是通过Large Packet Ping,如果重组后的IP数据帧交给I...

2019-05-26 17:23:53 268

原创 DIY TCP/IP IP模块和ICMP模块的实现4

上一篇:DIY TCP/IP IP模块和ICMP模块的实现38.6 IP分片在介绍DIY TCP/IP接收IP分片的代码实现之前,本节先通过wireshark抓包来分析,如何判断一个IP数据帧是一个IP分片,如何判断分片的开始和结束,收到IP分片后如何重组分片。通过wireshark抓取指定长度(超过MTU 1500字节)的PING数据帧过程,便于描述,将该过程称为Large Packet P...

2019-05-25 20:14:18 443

原创 DIY TCP/IP IP模块和ICMP模块的实现3

上一篇:DIY TCP/IP IP模块和ICMP模块的实现28.5 IP数据帧的发送本节为构造好的ICMP (Ping) Reply添加IP头部,根据目标IP地址查找ARP模块的ARP表,在IP头部前面再添加以太网头部,最终通过DIY TCP/IP的网络设备模块把Echo (Ping) Reply发送到对方主机。本章一直沿用的测试都是在与运行DIY TCP/IP的主机A,处于同一局域网的另外一...

2019-05-24 21:19:36 257

原创 DIY TCP/IP IP模块和ICMP模块的实现2

上一篇:DIY TCP/IP IP模块和ICMP模块的实现1

2019-05-23 21:26:44 236

原创 DIY TCP/IP IP模块和ICMP模块的实现1

上一篇:DIY TCP/IP IP模块和ICMP模块的实现08.2 IP数据帧的接收本节实现DIY TCP/IP的IP数据帧的接收,6.1节介绍pdbuf模块时已经引入了IP头部结构体的定义,iphdr_t数据结构定义在ip.h头文件中。本节围绕该数据结构的定义,实现IP模块对IP数据帧的解析,IP头部校验和的检验,并根据IP头部的上层协议字段将IP数据帧分发给DIY TCP/IP的对应模块处...

2019-05-22 22:20:10 282

原创 DIY TCP/IP IP模块和ICMP模块的实现0

上一篇:DIY TCP/IP ARP模块38. IP模块和ICMP模块的实现本章介绍DIY TCP/IP的IP模块和ICMP模块的实现,ARP模块的目标是在与本机处于同一局域网的另外一台主机上建立DIY TCP/IP的虚拟IP地址和本机网络接口的硬件地址的映射。本章的目标是同一局域网的另外一台主机上能够PING通DIY TCP/IP的虚拟IP地址。达到这个目标需要实现ICMP Echo数据帧的...

2019-05-21 21:10:24 233

原创 DIY TCP/IP ARP模块3

上一篇:DIY TCP/IP ARP模块27.4 ARP表的实现先来概括介绍下ARP表,和ARP表的查找过程。ARP表存放局域网中IP地址和硬件地址的映射,构造以太网头部时需要根据目标IP地址查找ARP表获取目标硬件地址。如果目标IP地址与网络接口的IP地址在同一个局域网中,则查找ARP表,获取对应的目标硬件地址,如果查找失败则发送ARP Request,获取目标IP地址对应的硬件地址。收到A...

2019-05-20 21:35:18 219

原创 DIY TCP/IP ARP模块2

上一篇:DIY TCP/IP ARP模块1添加链接描述7.3 发送ARP Reply本节实现ARP Reply数据帧的发送,当接收到ARP Request数据帧的目的IP地址与DIY TCP/IP的虚拟IP地址相等时,通过第六章实现的pdbuf的接口函数,构建ARP Reply数据帧。修改网络设备模块dev_process_txpkt的实现,通过PF_PACKET类型的socket回复ARP ...

2019-05-19 22:40:24 230

原创 DIY TCP/IP ARP模块1

上一篇:DIY TCP/IP ARP模块07.2 接收ARP Request数据帧本节实现ARP模块的接收函数arp_recv,完成对接收到的ARP数据帧的解析。修改DIY TCP/IP网络设备模块接收线程的处理函数,根据以太网头部类型判断,如果是0x0806,则调用arp_recv函数处理,在arp_recv函数中完成对ARP帧的解析。新增文件arp.c用于实现ARP模块的处理逻辑,ARP模...

2019-05-17 18:27:01 338

原创 DIY TCP/IP ARP模块0

上一篇:DIY TCP/IP Payload Buffer模块27. ARP模块的实现本章介绍DIY TCP/IP ARP模块的实现,回顾第一章可行性分析中的描述,DIY TCP/IP 上层模块包括ICMP,IP,TCP和UDP协议帧的接收和发送,都依赖于ARP先建立虚拟IP地址和运行DIY TCP/IP 主机的MAC地址的映射。便于验证,DIY TCP/IP各个模块都是先实现接收,ARP模块...

2019-05-15 20:15:54 257

原创 DIY TCP/IP Payload Buffer模块1

上一篇:DIY TCP/IP Payload Buffer模块16.2 pdbuf数据结构本节新增pdbuf.h头文件,定义pdbuf数据结构和pdbuf模块的接口函数。pdbuf模块所有操作函数的实现,以及DIY TCP/IP的ARP,IP,ICMP,TCP,UDP等模块的组帧操作,都是基于本节定义的pdbuf_t数据结构。 #ifndef _PDBUF_H_ #define _PDBU...

2019-05-11 22:11:43 382

原创 DIY TCP/IP Payload Buffer模块0

pdbuf模块的实现pdbuf是payload buffer的简称,该模块为DIY TCP/IP提供buffer管理功能,与Linux Kernel的struct sk_buff类似。pdbuf模块提供buffer的动态分配和释放,为有效载荷分配内存时预留协议头部所需内存空间,同时保证有效载荷加上协议头部(不包括14个字节的以太网头部)的大小不超过以太网的最大协议传输单元1500字节。pdbu...

2019-05-10 22:57:10 479

原创 DIY TCP/IP 网络设备模块6

上一篇:DIY TCP/IP 网络设备模块5介绍DIY TCP/IP网络设备模块之上的其他模块的实现之前,本节先来完成log的分级打印。5.3.4节运行结果的打印输出已经相对复杂,目前DIY TCP/IP的log均是通过printf打印到标准输出,上层模块实现之后会有更多的log输出。避免过多的打印信息,实现log的分级打印。本节引入两个新的文件debug.c和debug.h,做为DIY TCP...

2019-05-09 21:41:54 196

原创 DIY TCP/IP 网络设备模块5

上一篇:DIY TCP/IP 网络设备模块45.4 网络设备模块的发送队列网络设备层发送队列用于异步处理DIY TCP/IP上层模块发送的数据帧。为上层模块提供网络设备层的发送接口。上层模块的数据帧进入网络设备模块的发送队列后,唤醒发送线程,从发送队列中取出数据帧,通过PF_PACKET类型的socket,将数据帧逐个发送到Linux Kernel网络设备的驱动中。与网络设备模块接收队列的实现...

2019-05-08 22:16:20 475

原创 DIY TCP/IP 网络设备模块4

上一篇:DIY TCP/IP 网络设备模块35.3.3 网络设备模块数据帧本节结合5.3.2节链表和队列的实现,定义DIY TCP/IP网络设备模块数据帧的数据结构,以便用于队列操作。在pcap_callback返回接收到的数据帧后,将pcap_pkthdr封装成本节定义的数据帧,为实现网络设备模块的接收队列做准备。DIY TCP/IP网络设备模块rx和tx数据帧的数据结构定义在device...

2019-05-07 22:57:03 192

原创 DIY TCP/IP 网络设备模块3

5.3.2 链表和队列的实现介绍网络设备模块的接收队列之前,先来实现DIY TCP/IP的第一个utility,也是各个模块都会用到的链表和队列。不像c++或java,提供丰富的数据类型如:链表,队列,字典等,C语言需自己动手实现链表和队列。这种每个模块都会使用的代码放在DIY TCP/IP的utility.c 文件中,相应的头文件是utility.h。本节的链表是参考Linux kernel中...

2019-05-07 10:59:53 200

原创 DIY TCP/IP 网络设备模块2

5.3 网络设备模块的接收队列DIY TCP/IP网络设备模块的接收队列异步处理pcap_callback返回的数据帧,在接收线程中解析数据帧,根据以太网头部类型,将数据帧交给DIY TCP/IP的上层模块处理。接收队列的实现包括:接收线程;定义网络设备模块数据帧的数据结构;链表和队列的实现;接收线程异步处理链路层数据帧。5.3.1 接收线程接收线程与网络设备相关,所以在网络设备结构体net...

2019-05-06 19:31:31 186

原创 DIY TCP/IP 网络设备模块1

网络设备模块的实现本章介绍DIY TCP/IP的网络设备模块的实现。网络设备层的逻辑包括,接收逻辑和发送逻辑。接收逻辑:DIY TCP/IP通过PF_PACKET域的socket接收链路层数据帧,模拟硬件网卡的接收。接收队列异步处理链路层接收的数据帧,解析以太网头部,根据以太网头部类型,将数据帧交给DIY TCP/IP的上层模块处理。发送逻辑:接收上层模块发送的数据帧,交给发送队列异步处理,同...

2019-05-05 19:47:39 403

原创 Gannicus Guo的DIY TCP/IP之旅

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表的IP路由,...

2019-05-05 07:06:38 803

USB-TO-RS232.exe

usb 转串口驱动 usb-to-rs232

2010-04-20

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除