![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux0.99网络模块源码分析
文章平均质量分 89
wyc_
技术之路是千里之行,莫功利方能行更远
展开
-
linux0.99网络模块-网络模块初始化
linux0.11版内核的启动过程我们已经分析过了,对于0.99版稍有不同。我们看一下head.S中的改变。linux0.11内核head.s:135 after_page_tables:136 pushl $0 # These are the parameters to main :-)137 pushl $0138 pu原创 2015-10-13 20:32:03 · 864 阅读 · 0 评论 -
linux0.99网络模块-传输层(TCP接收)
上一篇文章《linux0.99网络模块-网络层(接收)》中我们提到过,注册到IP层的协议有ICMP,TCP,UDP。本文就来分析TCP处理数据报的过程。我们记得上一篇中网络层通过调用下面的函数来把数据报传递给TCP。775 ipprot->handler (skb2, dev, &opt, iph->daddr,776 net16(iph-原创 2015-10-21 09:24:45 · 1515 阅读 · 0 评论 -
linux0.99网络模块-应用层 or 传输层读写
应用层的操作大都会以系统调用的形式调用相应的内核函数,本文就分析一下相关的系统调用以及其他一些辅助函数。本文重点分析UDP与TCP的read/write函数,以达到承前启后的目的(其他函数读者可以大致浏览一下)。create 884 static int 885 ip_proto_create (struct socket *sock, int prot原创 2015-10-21 20:29:36 · 983 阅读 · 3 评论 -
linux0.99网络模块-网络层(接收)
上一篇文章中我们说道了ip层的处理函数为ip_rcv,现在我们就来看一下网络层收到数据报后是如何处理的。第一部分不过在此之前我们先来看一下会用到的一些结构或函数。1.net/tcp/ip.h: 84 struct ip_header 85 { 86 unsigned char ihl:4, version:4; 87 unsigned原创 2015-10-20 09:25:55 · 820 阅读 · 0 评论 -
linux0.99网络模块-数据链路层(发送)
在前面的文章中,分析了网络层数据报的传输过程,其中调用了下面的代码net/tcp/ip.c855 dev->queue_xmit(skb, dev, sk->priority);现在我们就来看一下该设备(wd8003)注册的发送函数,在网络设备初始化一篇中我们分析了wd8003的初始化过程,发送函数正是在那里面注册的,如下:net/tcp/Space.c6原创 2015-10-22 16:05:59 · 818 阅读 · 0 评论 -
linux0.99网络模块-网络层(发送)
在TCP的write系统调用中调用了下面的函数用于数据报的发送net/tep/tcp.c852 prot->queue_xmit (sk, dev, skb,0);来看一下TCP注册的queue_xmit:net/tcp/tcp.c3185 struct proto tcp_prot =3201 ip_queue_xmit,原创 2015-10-21 21:03:20 · 686 阅读 · 0 评论 -
linux0.99网络模块-网络设备初始化
在《llinux0.99网络模块-网络模块初始化》中我们分析了网络模块的初始化过程,其中关于设备初始化我们单独拿到这里来分析。对于linux0.99内核来说,它初始化了两个设备-loopback和wd8003.1.数据结构net/tcp/dev.h 47 #define DEV_NUMBUFFS 3 48 #define MAX_ADDR_L原创 2015-10-15 16:05:10 · 699 阅读 · 0 评论 -
linux0.99网络模块-传输层(UDP接收)
上一篇文章《linux0.99网络模块-网络层(接收)》中我们提到过,注册到IP层的协议有ICMP,TCP,UDP。本文就来分析UDP处理数据报的过程。我们记得上一篇中网络层通过调用下面的函数来把数据报传递给UDP。775 ipprot->handler (skb2, dev, &opt, iph->daddr,776 net16(i原创 2015-10-20 20:00:58 · 568 阅读 · 0 评论 -
linux0.99网络模块-数据链路层(接收)
在《linux0.99网络模块-中断处理》中我们知道网卡设备接收到数据报后就会触发中断,在中断处理函数中会把接收到的封装为sk_buff结构的数据添加到链路层的backlog中,并设置了下半部激活标志。现在我们就来看一下链路层是如何把数据交给上层的。我们从中断下半部的处理开始:net/tcp/dev.c294 void295 inet_bh(void *tmp)29原创 2015-10-19 11:27:43 · 551 阅读 · 0 评论 -
linux0.99网络模块-物理层(中断处理)
前面《linux0.99网络模块-网络设备初始化》的分析中wd8003注册了中断处理函数wd8003_sigaction(irqaction (dev->irq, &wd8003_sigaction))。当网络设备接收到数据报之后就会触发中断,然后就会调用该函数。net/tcp/we.c:639 static struct sigaction wd8003_sigaction =原创 2015-10-18 11:13:10 · 687 阅读 · 1 评论 -
TCP/IP详解 卷I 笔记
第1章 概述知识点比较少,主要一个是不同的网络层:应用层 传输层 网络层 链路层它们分别对应的协议,比如IP协议对应网络层 TCP协议对应传输层 以太网协议对应链路层。另外一个是IP地址分类:A类0开始,网络号占一个字节B类10网络号占两个字节C类110网路号占三个字节D类1110,剩余的是28位多播地址E类11110,剩原创 2015-07-01 22:12:15 · 1071 阅读 · 0 评论