一个前辈写的网络协议学习方法

转载 2015年07月07日 22:12:52
 网络这东西就是一个靠实践的东西,只靠看书是不行的。当年在学校还上过史美林教授/张公忠教授所讲的计算机网络体系结构课,用的是Tanabaum写的那本,考试还得了九十多分,可实际还是连TCP和UDP有什么区别都分不清,就是死记背,到毕业的时候基本上是忘光了,工作后等于重新来过。
      上班了要在Linux做一些底层的网络处理,不得不从头来学Linux和网络,编程部分主要看Richard Stevens的那几本书:APUE、UNP、TCP/IP Illustraion等,学Linux则看得很杂,市面上各种Linux入门书大都翻了一遍,俺是习惯在书店里看书,爱看书而不爱买书,汗,,然后就是去各大BBS、论坛把他们的精华区都下载下来狂看,边看边实践,基本上在一个月内熟悉了Linux的操作。
           学网络协议刚开始也是看书,但看了之后没多少印象,那些东西靠死记真是没法记的,后来找到一个好办法,就是自己写个sniffer,自己写个协议分析器,先学怎么抓包,就看tcpdump的源码,然后看libpcap的源码,知道了什么是网卡的混杂模式,很快就能抓到网卡上包的。接下来就是对包进行分析,就看作TCP/IP Illustraion,从以太头、ARP/IP、ICMP/IGMP/TCP/UDP、HTTP/FTP/TELNET/SMTP等这么一点一点、一个字段一个字段分析下来,很快就明白了所谓TCP/IP到底是怎么回事。另外为了学TCP状态转换表,根据所抓的包的TCP标志分析通信双方当前是什么状态,刚开始还只能从头一方发SYN包开始分析,到后来是可从连接中间包如手就能逐渐判断双方的TCP状态,基本上是彻底搞清楚了TCP的状态转移是怎么回事,后来再理解防火墙的状态检测原理就很容易了。另外在分析过程中,为彻底掌握IP碎片,还特地ping大包来抓,把抓上来的包自己重组,搞明白了IP头的碎片offset字段是怎么用的。
          能抓包后进而又开始学如何自己构造包来“干扰”正常通信了,开始是学怎么发TCP的RST包来切断一个正常的TCP连接,就的学会如何计算IP头校验和,TCP校验和,知道了算TCP校验和时必须加IP伪头数据,然后是正确计算序列号和确认号,知道了原来SYN和FIN标志也是算一位的,最重要的是理解了什么是网络序什么是主机序,现在基本把ntohs(l),htons(l)处理都成了一种编程的本能意识了。学会用RST切断TCP后,进一步实现了直接发一个页面信息告诉客户端访问了非法信息,也就是以后实现URL过滤时客户端显示的拒绝画面。后来也学发ARP信息胡乱通告MAC地址,也就是以前写的那篇ARP攻击的由来。
           后来俺写的这个协议分析器逐步完善,能解析的就解析,不能解析的就打印出16进制数,可打印字符也打印出来,对HTTP、FTP、POP3、SMTP这些文本协议几乎就一下看明白了,对于非文本协议,如DNS,也根据协议解析了出来,而且解析DNS时不得不用了我一向不爱用的递归方法来编程。随着网络应用的增加,在用到前都先作协议解析,除了各种TCP、UDP的协议,还增加了BPDU、PPPOE、OSPF、ESP、AH、IKE等的解析处理,现在俺的协议分析器也可以分析上百种协议,平时抓包就只用俺这个,TCPDUMP基本不再用了,毕竟自己写的自己更清楚,如果有不能解析的再现加进去。现在学新协议时,往往先抓包看看协议的基本数据格式,再看RFC了解细节。
              学协议刚开始是看书,到后来要更深入了解或追询最新发展情况就只能看RFC了,毕竟网络的东西变化太快,书的东西只能算入门,说不定很快就出新的了,到现在也看了数百篇的RFC了。
             通过编程分析来学协议,慢是慢了点,花了一个多月的时间,但感觉学得扎实,正所谓磨刀不误砍柴功,而且一通百通。到现在虽然已经好几年了,IP头,TCP头有哪些字段还是一下就可以说得出来,对理解各种网络攻击原理从而进行防范更是有帮助,我觉得对我来说这种方法是很有效,如果哪位觉得有更有效的学习方法,可以共同交流一下。

向前辈的前辈学习

在我们这一代人眼里,我们的前辈的前辈是没有文化,固执的一代,以前我也有这种看法,不过毕业以后我才发现,原来我们缺少他们的一些东西。一年前,我得到一个偶然的机会去给一位年事很高的老人维护计算机,当时是班...
  • yblcgw
  • yblcgw
  • 2005-01-25 15:12:00
  • 1011

网络协议的学习方法

网络协议的学习方法 一个前辈写的自己学习网路协议的方法,感觉挺好的,转载于此:  网络这东西就是一个靠实践的东西,只靠看书是不行的。当年在学校还上过史美林教授/张公忠教授所讲的计算机网络体...
  • longlongwen
  • longlongwen
  • 2014-12-14 16:51:29
  • 293

网络协议学习方法

网络这东西就是一个靠实践的东西,只靠看书是不行的。当年在学校还上过史美林教授/张公忠教授所讲的计算机网络体系结构课,用的是Tanabaum写的那本,考试还得了九十多分,可实际还是连TCP和UDP有什么...
  • zhuralll111
  • zhuralll111
  • 2014-06-24 16:14:45
  • 424

网络协议C语言编写

  • 2013年11月23日 14:52
  • 18.56MB
  • 下载

听听前辈的教诲

  • zcy19501223
  • zcy19501223
  • 2010-03-24 18:52:00
  • 572

网络协议学习笔记

网络协议为计算机网络中进行数据交换而建立的规则、标准或约定的集合。 网络协议主要由三个要素组成:语义、语法及时序;语义表示要做什么,语法表示要怎么做,时序表示做的顺序。 网络协议是网络上所有设备(...
  • xiaoyaoyou1212
  • xiaoyaoyou1212
  • 2016-10-26 22:40:59
  • 5353

网络协议分析与实现简单概念

网络协议分析与实现通信协议是指双方实体完成通信或服务所必须遵循的规则和约定。协议的基本内容语义:协议所要表达的核心含义; 语法:语义能够正确表达的规范; 时序:语义被正确表达的时间点和先后顺序。O...
  • wwei25
  • wwei25
  • 2017-02-21 20:04:02
  • 537

从单片机51初学者到电子工程师

  • 2011年11月13日 14:15
  • 270KB
  • 下载

别忘了你还有同事和前辈,学东西要学会"不要脸"

一网友来询问,其公司的一个老手总是使用某个技术,他不明白为什么这么做,又啥好处?我很奇怪,既然公司里有这样的人,你为何不去问他,而来问我呢?难道你这么害怕和其他人接触吗?我们学东西,要互相帮助,本来大...
  • java2000_net
  • java2000_net
  • 2009-08-05 13:02:00
  • 7290

各种网络协议源代码实现

  • 2009年05月06日 15:32
  • 283KB
  • 下载
收藏助手
不良信息举报
您举报文章:一个前辈写的网络协议学习方法
举报原因:
原因补充:

(最多只允许输入30个字)