【计算机⽹络】读书笔记之《TCPIP详解卷1》《图解
TCPIP》《计算机⽹络》三合⼀
最近把之前看过的三本关于⽹络的书⼀起做了⼀下总结。
第⼀本是谢希仁的《计算机⽹络》,这本算是为数不多的国内的好教材,⾥⾯虽然有些内容过时,稍显臃肿,但是有些章节讲的⾮常不错。
第⼆本是《图解TCP/IP》,⽇本⼈写的书,⾮常认真细致,⽂字结合⼤量图⽚通俗易懂,⼊门不错,但是还是不够深⼊。
第三本是《TCP/IP详解卷1》,美国⼈写的书学术性质较强,⽐较难懂,但是很深⼊。结合tcpdump输出结果能让⼈更好的理解。
在看这本卷1之前,特地去先学习了⼀下《wireshark数据报分析实战》,跟着提供的例⼦学习了⼀下。这本书⾮常好的⼀个地⽅就是让抽象的东西具体化,⽐如三次握⼿SYN,ACK包,四次挥⼿FIN,ACK的发送接收情况可以⼀⽬了然。
同时,我也⾃⼰尝试抓了⼀下学校⽆线⽹的登陆过程,在HTTP包⾥⾯发现⽆线⽹登录验证居然是明⽂的,
也就是说可以弄个抓取⽆线信号的装置包括⼿机信号都可以抓到,然后对有兴趣的内容进⾏分析。总的来说,看完这本数据包分析,加上前⾯2本书,看卷⼀感觉不会吃⼒。
下⾯先放上⾃⼰⽤XMind画的思维导图,主要还是卷1的内容,有部分内容结合了前⾯两本书。
下⾯再附上整本书的笔记,都是⼀些重点章节的的重点内容。
ch1 概述
1.TCP/IP分层:物理层,数据链路层(ARP),⽹络层(IP,ICMP,IGMP),传输层(TCP,UDP),应⽤层。
ABCDE类地址。A类⽹络号8位(第⼀位0),24位主机号。
B类⽹络号16位(前⼆位10),16位主机号。
C同理,D类前⾯4位1110+28位多播组号。
2.封装和分⽤,分⽤时每层都检测报⽂表⽰的协议⾸部得到上层协议。ICMP与IGMP都被封装在IP数据包⾥,相当于IP的上层,但实际他们是同⼀层协议。
3.⼀共有16位65535个端⼝号,其中保留端⼝号:1~1023。
ch2 链路层
1. 802标准定义封装
2. 以太⽹⾸部封装⾄少64字节:⽬的地址+源地址(48 bit)+类型(2byte)+数据(⾄少46字节不⾜填充pad)+CRC(4byte)
3. SLIP(串⾏线路IP):IP数据包以END(0xc0)作为开头和结尾;IP报⽂中某个字符的END⽤0xdb和0xdc代替;0xdb被称为SLIP的ESC字符,若IP报⽂段出现此字符,⽤0xdb和0xdd取代。(与以太⽹封装⽐⽆类型和⾸部)
4. PPP(点对点协议):由LCP链路控制协议和NCP⽹络控制协议组成。PPP⽀持多种协议,⽽SLIP只⽀持IP,PPP有CRC检验。PPP 不涉及ARP。
5. 环回接⼝:localhost127.0.0.1
传给环回地址的数据均作为IP输⼊,应⽤程序有可能省略了传输层和⽹络层的操作,也可能实现了。
6.最⼤传输单元MTU:以太⽹为1500 MSS:最⼤报⽂段长度=MTU-⾸部长(IP⾸部与上层协议⾸部和)
ch3 IP(⽹际协议)
1. IP协议提供不可靠,⽆连接,尽最⼤努⼒交付的服务。采⽤⼤端字节序传输。
2.⾸部格式:
⾸部长度占4位,单位为4字节;总长度16位,单位为1字节。
服务类型:第4~7位的TOS:最⼩时延,最⼤吞吐量,最⾼可靠性,最⼩费⽤
注意IP中的选项与TCP的选项字段区别,⼀般IP的选项字段较少使⽤。
2. IP路由:
a) 搜索路由表,寻能与⽬的IP完全匹配的条⽬。
b) 搜索路由表,寻能与⽬的⽹络号相匹配的条⽬。
c) 搜索路由表,寻标为默认的条⽬,如果没到,向发送的主机返回⼀个主机不可达或⽹络不可达。
注意:1)所有主机和路由器都使⽤了默认路由
2)源⽬的IP始终不变化
3)每个链路层有不同的数据帧⾸部,⽽且链路层的⽬的MAC地址指的是下⼀站的链路层地址,源MAC地址就是发送者,通过ARP请求得到。
3. ⼦⽹寻址:主机号再分解成⼀个⼦⽹号和主机号并由系统管理员进⾏分配。
4. ⼦⽹掩码:确定⼦⽹号和主机号的分界线,确定IP属于本⼦⽹主机或本⽹络其他⼦⽹主机或其他⽹络主机。
CIDR:⽆类型域间选路,192.168.1.1/20表前20位⽹络号,后⾯是主机号,遵守最长匹配原则。
5. ifconfig -a报告所有接⼝信息
netstat-in打印出所有接⼝信息和IP地址⽽不是名字
ch4 ARP地址解析协议
1. 如果⽬的主机与发送主机位于同⼀个局域⽹,则设备驱动程序从不检查IP数据包中⽬的IP地址,⽽是根据以太⽹MAC地址确定⽬的接⼝。
2. ARP分组格式,以太⽹帧类型包括IP数据包,ARP/RARP请求和应答。协议类型表⽰要映射的协议地址的类型。op是指四种操作类型,ARP请求值为1,ARP应答2…...
3. ARP请求包⽬的地址为ff:ff:ff:ff为⼴播地址,收到应答⽅回应后,不仅发送⽅要把应答⽅mac地址写⼊⾼速缓存,应答⽅也把发送⽅的mac地址写⼊⾃⼰的⾼速缓存,⾼速缓存的⽣存时间⼀般为20分钟。
4. 以下是使⽤ARP的四种典型情况:
⽹1(H1,H2)------路由器R1-------⽹2(H3)--------路由器R2---------⽹3(H4)
a) 发送⽅是主机H1,要把IP数据包发送到同个⽹络3的另⼀台主机H2,只⽤在⽹1发送⼀个arp⼴播,到⽬的主机H2的mac地址
b) 发送⽅是主机H1,要把IP数据包发送给另外⼀个⽹络3的⼀台主机H4,同样在⽹1⼴播arp包,到路由器R1的mac地址,剩下⼯作R1完成
c) 发送⽅是路由器,发送⽅是路由器R1,⽬的是同个⽹络2中的H3,直接在⽹2⼴播,到主机H3的mac地址
d) 发送⽅是路由器R1,接收⽅是另个⽹络3的主机H3,R1在⽹2⼴播,到连接在⽹2的路由器R2的mac地址,剩下的⼯作由R2完成
此过程中,IP数据包源⽬的IP始终不变,⽽数据包的源⽬mac地址始终在不断改变。这些中间经过的路由器也称为委托ARP或ARP代理。5.免费ARP:主机发送ARP查询⾃⼰的IP地址
a)如果另外的主机设置了相同的IP地址,会产⽣⼀个错误信息
b)使⽤ARP请求中的发送端硬件地址更新⾼速缓存
6.arp -a显⽰ARP⾼速缓存的所有内容
-d删除某⼀个内容 -s增加⾼速缓存的内容
ch6 ICMP⽹际控制报⽂协议
1. ⾸部由8位类型,8位代码,16检验和,内容组成。报⽂种类分为ICMP差错报告报⽂,ICMP询问报⽂。
a) 差错报告报⽂类型:
i. ⽬的不可达(端⼝号不正确)
ii. 源点抑制(主机由于拥塞⽽丢弃数据报)
iii. 超时(TTL为0)
iv. 参数问题(⾸部字段值不正确)
v. 改变路由(重定向)
不应该发送ICMP差错报⽂的⼏种情况:
1) ICMP差错报⽂
2) ⽬的地址为⼴播或多播地址,包括链路层的⼴播数据报(防⽌⼴播风暴)
3) 除了IP分⽚的第⼀⽚
4) 源地址不是单个主机的数据报
b) 询问报⽂
i. 回显请求和回答(测时⽬的站是否可达及状态信息)
ii. 时间戳请求和回答(请某个主机或者路由器回答当前⽇期时间)
2. ICMP端⼝不可达差错
假设使⽤UDP查看该报⽂,每个“UDN端⼝不可达”返回的ICMP报⽂共70字节:
以太⽹⾸部IP⾸部ICMP⾸部产⽣差错的数据报IP⾸部UDP⾸部
14字节 20字节 8字节 20字节 8字节
ß---------------------------IP数据报------------------------------------à
ß---------------ICMP报⽂---------------------------------à
ß----------------------ICMP数据部分------à
发送前⼀个IP⾸部的⽬的使ICMP知道如何解释后⾯8字节的协议部分。
0 7 8 15 16 32
类型3代码0-15检验和
未⽤
IP⾸部+原始IP数据报中前8个字节(得到源端⼝号和⽬的端⼝号)
ICMP不可达报⽂
在ICMP报⽂中,当代码为4时,在路径MTU发现机制允许路由器把外出接⼝的MTU填在第⼆个32bit的低16位中。
ch7 ping程序
1. 如果不能ping到某台主机,也可能是由于路由器防⽕墙过滤。
ICMP回显请求和回显应答报⽂格式
标识符通常为进程ID,序号从0开始,每发送⼀次回显请求就加1,有可能丢失、失序、重复。执⾏ping返回seq和time。
2. ping -R提供了路由记录的功能,由于IP⾸部字段长度为4bit,15字节*4字节单位=60字节最⼤,60-20⾸部固定长度-3RR选项(code,len,ptr)=37字节,最多只能存9个地址。code为IP选项的类型这⾥为7,len为RR选项总长度,ptr指向存放下个IP的位置。
3. IP时间戳选项,与记录路由选项类似,此处code为0x44,还多了OF溢出和FL标志字段共1字节。
ch8 traceroute程序
1. 由于IP⾸部留给选项空间⼗分有限,并不是每个路由器都⽀持这个选项。
2. traceroute程序通过区分接受到的ICMP报⽂是超时(经过路由)还是端⼝不可达(到达⽬的主机)以确定结束时间,显⽰的结果就是中间经过的路由器以及所花费的时间,*表⽰未探查到应答信号。
3. ICMP超时报⽂结构与ICMP不可达类似,不同的是其类型为11,代码为0或1。
4. IP源站选路选项:
a) 宽松的源站选路,指定经过的IP清单,但其中可通过其他路由器。
b) 严格的源路由选择,采⽤确切路由。
ch9 IP选路
1.路由表经常被访问,但被路由守护程序⼤约30秒更新⼀次,收到ICMP重定向报⽂也会更新路由表。IP提供选路机制,路由守护程序提供选路策略。
2.搜索路由表的⼏个步骤:
a) 搜索匹配的主机地址
b) 搜索匹配的⽹络地址
c) 搜索默认表项
4. netstat -rn
a) 其中Flags的U表⽰可⽤,G表⽰该路由为⽹关(路由器),H表⽬的为主机(没设置就是⽹络地址),D表该路由由重定向创建,M表该路由已被重定向修改。tcpip协议pdf
b) G标志区分了直接路由和间接路由。
i. 间接路由时,⽹关地址是路由器。
ii. 直接路由,⽬的mac地址为点对点链路的另⼀端,⽹关地址为外出接⼝的本地IP地址。
c) Refcnt表⽰正在使⽤路由的活动进程个数
d) use表⽰通过该路由发送的分组个数
5. 每个主机都必须⽀持多个默认路由,常见的实现⽅式是按轮转使⽤它们。
6. 可以从没有H的那⾏得出⽬的地址的⼦⽹掩码,因为那⾏所代表的⽬的地址为⽹络地址。
7. IP选路的⽅式就按照上⾯3个所列,⽬的IP始终不变,⽬的mac地址为路由器或者⽬的端地址。
8. 初始化路由表可以⼿动设置(较少),运⾏路由守护程序,使⽤较新的路由器发现协议。对主机来说为静态选路,适合于⽹络较⼩且与⽹络只有单个连接点。
9. 对于没有到达⽬的地的路由,如果该IP报由主机产⽣,就给发送该数据包的应⽤程序返回⼀个差错;如果是被转发的数据报,就给原始发送端发送ICMP主机不可达差错报⽂。
10. ICMP重定向⼀般让具有很少选路信息的主机逐渐建⽴更完善的路由表,重定向报⽂是为主机服务,⽽不是路由器;路由表还可以由路由器发现报⽂改变。但是不能同时被这2种⽅式修改。
11. 主机做路由器时要满⾜:
d) 出接⼝必须等于⼊接⼝
e) ⽤于向外传送数据报的路由不能被ICMP重定向报⽂创建或修改,不能为默认路由
f) 数据报不能⽤源站选路转发
g) 内核必须配置成可以发送重定向报⽂
12. 收到ICMP重定向修改路由表之前要做的检查:
h) 新的路由器必须直接与⽹络相连
i) 重定向报⽂必须来⾃当前到⽬的地所选择的路由器
j) 重定向报⽂不能让主机本⾝做路由器
k) 被修改的路由必须为间接路由
路由器应该发送的是对主机的重定向,⽽不是对⽹络的重定向。
13. 初始化路由表的另外⼀种⽅法是⼴播或者多播传送⼀份路由器请求报⽂(由⽤户进程产⽣)。ICMP路由器通告报⽂使得路由器在⼀份报⽂中可以通告多份报⽂,路由器地址和优先级组成⼀项,值越⼤说明作为默认路由器的优先级越⾼,默认⼀般为0,0x80000000表不可做默认路由器使⽤。
14. 路由器会定期随机传送通告报⽂,并且监听来⾃主机的请求报⽂。主机引导期间⼀般发送3份路由器请求报⽂,同时也会监听来⾃相邻路由器的通告报⽂。
ch10 动态选路协议
1. 通过路由器上的路由守护进程,如routed,gated
2. 内部⽹关协议:选路信息协议RIP、最短路径优先OSPF
外部⽹关协议BGP
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论