Linux 1.2.13 -- IP分片重组源码分析 本文源码解析参考: 深入理解TCP/IP协议的实现之ip分片重组 – 基于linux1.2.13 计网理论部分参考: > Linux 1.2.13 源码仓库链接: read-linux-1.2.13-net-code ---- 引言 笔者在完成cs144 lab 后,发现自己对IP层分片这部分知识点模糊不清,阅读了自顶向下学习计算机网络书籍对应章节后...,发现书上对IP层分片这部分内容讲解较为简单,所以特此翻阅Linux网络子系统源码进行学习。...带着以上种种疑惑,我开启了对Linux 1.2.13 net模块的探索之路。 本文所讲内容未必完全正确,如有错误,欢迎在评论区指出。...在Linux 1.2.13的net模块中,使用ipfrag结构来描述一个ip分片信息,使用ipq结构来描述一个完整的传输层数据包信息: ip.h: /* Describe an IP fragment.
extern inline void add_wait_queue(struct wait_queue ** p, struct wait_queue * wa...
1 有一个全局的结构体数据,每次需要一块共享的内存时(shmget),从里面取一个结构体,记录相关的信息。
rarp是通过mac地址查询ip的协议,主要用于有mac的主机,但是没有ip的情况。我们先看看rarp协议的协议定义(来自网上的图[1])。
该函数的实现在各版本的内核里不尽相同,现在也支持了更多的能力,本文通过1.2.13的内核大致分析资源使用限制的一些原理。 首先在PCB中加了一个字段记录了限制信息。
linux用vma链表管理一个进程使用的虚拟地址空间。下面是实现代码。.../* * linux/mm/mprotect.c * * (C) Copyright 1994 Linus Torvalds */ #include #include... #include #include #include #include #include #include #include #include <asm/
mmap涉及到操作系统底层很多知识,目前粗略介绍一下大概的逻辑,等深入理解后再继续。操作系统用vma链表管理内存,mmap就是申请一个新的vma供进程使用。可以...
上次分析了ip分片重组,这次分析一下ip分片。首先我们要先了解为什么需要分片。比如在以太网中,使用CSMA/CD协议(由网卡实现),他规定了一个链路层数据包(不...
我们解析分析tcp/ip协议的实现,这一篇讲一下accept,accept就是从已完成三次握手的连接队列里,摘下一个节点。我们可以了解到三次握手的实现和过程。很...
kfree_s(i,sizeof(*i)); } dev->ip_mc_list=NULL; } 以上是IGMP v1版本的实现,在后续v2 v3版本了又增加了很多功能,比如离开组报文(linux1.2.13
我们操作一个文件之前都需要先open一下。我们看看open在虚拟文件系统中大致的执行过程。不会分析具体的过程。主要分析一下虚拟文件系统的实现原理。
分析完了服务器端,我们继续分析客户端,在socket编程中,客户端的流程是比较简单的,申请一个socket,然后调connect去发起连接就行。我们先看一下co...
/* * linux/fs/minix/inode.c * * Copyright (C) 1991, 1992 Linus Torvalds */ #ifdef MODULE #include... #include #else #define MOD_INC_USE_COUNT #define MOD_DEC_USE_COUNT...#endif #include #include #include #include #include #include #include #include <asm/system.h
/* * linux/fs/minix/namei.c * * Copyright (C) 1991, 1992 Linus Torvalds */ #ifdef MODULE #include... #endif #include #include #include #include #include #include #include
/* * linux/fs/minix/bitmap.c * * Copyright (C) 1991, 1992 Linus Torvalds */ /* bitmap.c contains...the code that handles the inode and block bitmaps */ #ifdef MODULE #include #endif...#include #include #include #include #include #include static int nibblemap[] = { 0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4
/* * linux/fs/minix/symlink.c * * Copyright (C) 1991, 1992 Linus Torvalds * * minix symlink...handling code */ #ifdef MODULE #include #endif #include #include... #include #include #include #include... static int minix_readlink(struct inode *, char *, int); static int minix_follow_link(
listen函数的逻辑比bind还简单。bind主要是校验和绑定ip、端口。listen则是修改socket的状态,并记录一些设置。
这一篇我们来看看,虚拟文件系统是如何抹平各个文件系统的差异,又是如何和具体的文件系统串起来的。 我们先来回顾一下之前的讲的内容。
按照socket网络编程的顺序,我们这一篇来分析bind函数。我们通过socket函数拿到了一个socket结构体。bind函数的逻辑其实比较简单,他就是给so...
这要说到网络协议的复杂性,而这个设计就是linux对这个复杂性的解决方案。我们回头看看socket函数的参数。...linux给出的方案是在sock结构体中定义一个字段,根据子类型type的值,指向不同的底层协议函数集。 ? 在申请完sock结构体并且和socket结构体互相关联后。
领取专属 10元无门槛券
手把手带您无忧上云