TCPIP学习⼼得
⼀.基本概念
参考:TCP/IP详解学习笔记(1)-基本概念 - ⼀块积⽊ - CSDN博客
参考:全⾯了解linux TCP/IP协议栈 - 消磨时间的博客 - CSDN博客
·概念
⼀个协议族的统称。⾥⾯包括了IP协议,ICMP协议,TCP协议,以及我们更加熟悉的http、ftp、pop3协议等TCP/IP不是⼀个协议
不是⼀个协议,⽽是⼀个协议族的统称
等。
·TCP/IP协议分层
数据链路层+⽹络层+传输层+应⽤层
OSI七层协议与TCP/IP协议对应关系(图⽚来⾃⽹络)
⼆.数据链路层
参考:TCP/IP详解学习笔记(2)-数据链路层 - ⼀块积⽊ - CSDN博客
·数据链路层有三个⽬的
为IP模块发送和 接收IP数据报。
为ARP(地址解析协议)模块发送ARP请求和接收ARP应答。
为RARP(逆地址解析协议)发送RARP请 求和接收RARP应答。
·协议包括
以太⽹协议(eth)、令牌环、PPP、loopback(lo)协议等。
·关于MTU
每⼀种数据链路层协议,都有⼀个MTU(最⼤传输单元)定义。如果IP数据报过⼤,则要进⾏分⽚(fragmentation),使得每⽚都⼩于MTU。·关于环回接⼝(loopback)
传给环回地址(⼀般是127.0.0.1)的任何数据均作为IP输⼊。
传给⼴播地址或多播地址的数据报复制⼀份传给环回接⼝,然后送到以太⽹上。这是 因为⼴播传送和多播传送的定义包含主机本⾝。
任何传给该主机IP地址的数据均送到环回接⼝。
三.IP协议,ARP协议,RARP协议
参考:TCP/IP详解学习笔记(3)-IP协议,ARP协议,RARP协议 - ⼀块积⽊ - CSDN博客
·IP协议
IP协议没有提供⼀种数据未传达以后的处理机制,是不可靠的。
IP协议报⽂
TTL字段:规定该数据包在穿过多少个路由之后才会被抛弃(这⾥就体现出来IP协议包的不可靠性,它不保证数据被送达),某个ip数据包每穿过⼀个路由器,该数据包的TTL数值就会减少1,当该数据包的TTL成为零,它就会被⾃动抛弃。
·IP路由选择
怎么直接传递的,这就要靠ARP协最特殊的情况是⽬的主机和主机直连,那么主机根本不⽤寻路由,直接把数据传递过去就可以了。⾄于是怎么直接传递的,这就要靠ARP协议了,后⾯会讲到。
稍微⼀般⼀点的情况是,主机通过若⼲个路由器(router)和⽬的主机连接。那么路由器就要通过ip包的信息来为ip包寻到⼀个合适的⽬标来进⾏传递,⽐如合适的主机,或者合适的路由。路由器或者主机将会⽤如下的⽅式来处理某⼀个IP数据包
如果IP数据包的TTL(⽣命周期)以到,则该IP数据包就被抛弃。
搜索路由表,优先搜索匹配主机,如果能到和IP地址完全⼀致的⽬标主机,则将该包发向⽬标主机
搜索路由表,如果匹配主机失败,则匹配同⼦⽹的路由器,这需要“⼦⽹掩码(1.3.)”的协助。如果到路由器,则将该包发向路由器。
搜索路由表,如果匹配同⼦⽹路由器失败,则匹配同⽹号(第⼀章有讲解)路由器,如果到路由器,则将该包发向路由器。
tcpip协议pdf搜索陆游表,如果以上都失败了,就搜索默认路由,如果默认路由存在,则发包
如果都失败了,就丢掉这个包。
这再⼀次证明了,ip包是不可靠的。因为它不保证送达。
·⼦⽹寻址
IP地址的定义是⽹络号+主机号。但是现在所有的主机都要求⼦⽹编址,也就是说,把主机号在细分成⼦⽹号+主机号。最终⼀个IP地址就成为 ⽹络号码+⼦⽹号+主机号。例如⼀个B类地址:210.30.109.134。⼀般情况下,这个IP地址的红⾊部分就是⽹络号,⽽蓝⾊部分就是⼦⽹号,绿⾊部分就是主机号。⾄于有多少位代表⼦⽹号这个问题上,这没有⼀个硬性的规定,取⽽代之的则是⼦⽹掩码,校园⽹相信⼤多数⼈都⽤过,在校园⽹的设定⾥⾯有⼀个255.255.255.0的东西,这就是⼦⽹掩码。⼦⽹掩码是由32bit的⼆进制数字序列,形式为是⼀连串的1和⼀连串的0,例如:255.255.255.0(⼆进制就是11111111.11111111.11111111.00000000)对于刚才的那个B类地址,因为210.30是⽹络号,那么后⾯的109.134就是⼦⽹号和主机号的组合,⼜因为⼦⽹掩码只有后⼋bit为0,所以主机号就是IP地址的后⼋个bit,就是134,⽽剩下的就是⼦⽹号码--109。
·ARP协议
本来主机是完全不知道这个IP对应的是哪个主机的哪个接⼝,当主机要发送⼀个IP包的时候,会⾸先查⼀下⾃⼰的ARP⾼速缓存(就是⼀个IP-MAC地址对应表缓存),如果查询的IP-MAC值对不存在,那么主机就向⽹络发送⼀个ARP协议⼴播包,这个⼴播包⾥⾯就有待查询的IP地址,⽽直接收到
这份⼴播的包的所有主机都会查询⾃⼰的IP地址,如果收到⼴播包的某⼀个主机发现⾃⼰符合条件,那么就准备好⼀个包含⾃⼰的MAC地址的ARP包传送给发送ARP⼴播的主机,⽽⼴播主机拿到ARP包后会更新⾃⼰的ARP缓存(就是存放IP-MAC对应表的地⽅)。发送⼴播的主机就会⽤新的ARP缓存数据准备好数据链路层的的数据包发送⼯作。
这样的⾼速缓存是有时限的,⼀般是20分钟(伯克利系统的衍⽣系统)。
四.ICMP协议,ping和Traceroute
参考:TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute - ⼀块积⽊ - CSDN博客
·ICMP协议
当传送IP数据包发⽣错误--⽐如主机不可达,路由不可达等等,ICMP协议将会把错误信息封包,然后传送回给主机。给主机⼀个处理错误的机会,这 也就是为什么说建⽴在IP层以上的协议是可能做到安全的原因。ICMP数据包由8bit的错误类型和8bit的代码和16bit的校验和组成。⽽前16bit就组成了ICMP所要传递的信息。
尽管在⼤多数情况下,错误的包传送应该给出ICMP报⽂,但是在特殊情况下,是不产⽣ICMP错误报⽂的。如下
ICMP差错报⽂不会产⽣ICMP差错报⽂(出IMCP查询报⽂)(防⽌IMCP的⽆限产⽣和传送)
⽬的地址是⼴播地址或多播地址的IP数据报。
作为链路层⼴播的数据报。
不是IP分⽚的第⼀⽚。
源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、⼴播地 址或多播地址。
虽然⾥⾯的⼀些规定现在还不是很明⽩,但是所有的这⼀切规定,都是为了防⽌产⽣ICMP报⽂的⽆限传播⽽定义的。
ICMP协议⼤致分为两类,⼀种是查询报⽂,⼀种是差错报⽂。其中查询报⽂有以下⼏种⽤途:
ping查询(不要告诉我你不知道ping程序)
⼦⽹掩码查询(⽤于⽆盘⼯作站在初始化⾃⾝的时候初始化⼦⽹掩码)
时间戳查询(可以⽤来同步时间)
·ICMP的应⽤--ping
ping这个单词源⾃声纳定位,⽽这个程序的作⽤也确实如此,它利⽤ICMP协议包来侦测另⼀个主机是否可达。原理是⽤类型码为0的ICMP发请求,受到请求的主机则⽤类型码为8的ICMP回应。ping程序来计算间隔时间,并计算有多少个包被送达。⽤户就可以判断⽹络⼤致的情况。
ping还给我们⼀个看主机到⽬的主机的路由的机会。这是因为,ICMP的ping请求数据报在每经过⼀个路由器的时候,路由器都会把⾃⼰的ip放到该数 据报中。⽽⽬的主机则会把这个ip列表复制到回应icmp数据包中发回给主机。但是,⽆论如何,ip头所能纪录的路由列表是⾮常的有限。
·ICMP的应⽤--Traceroute
Traceroute是⽤来侦测主机到⽬的主机之间所经路由情况的重要⼯具,也是最便利的⼯具。前⾯说到,尽管ping⼯具也可以进⾏侦测,但是,因为ip头的限制,ping不能完全的记录下所经过的路由器。所以Traceroute正好就填补了这个缺憾。
Traceroute的原理是⾮常⾮常的有意思,它受到⽬的主机的IP后,⾸先给⽬的主机发送⼀个TTL=1(还记得TTL是什么吗?)的UDP(后⾯就 知道UDP是什么了)数据包,⽽经过的第⼀个路由器收到这个数据包以后,就⾃动把TTL减1,⽽TTL变为0以后,路由器就把这个包给抛弃了,并同时产⽣ ⼀个主机不可达的ICMP数据报给主机。主机收到这个数据报以后再发⼀个TTL=2的UDP数据报给⽬的主机,然后刺激第⼆个路由器给主机发ICMP数据 报。如此往复直到到达⽬的主机。这样,traceroute就拿到了
所有的路由器ip。从⽽避开了ip头只能记录有限路由IP的问题。
有⼈要问,我怎么知道UDP到没到达⽬的主机呢?这就涉及⼀个技巧的问题,TCP和UDP协议有⼀个端⼝号定义,⽽普通的⽹络程序只监控少数的⼏个号码较 ⼩的端⼝,⽐如说80,⽐如说23,等等。⽽traceroute发送的是端⼝号>30000(真变态)的UDP报,所以到达⽬的主机的时候,⽬的主机只能发送⼀个端⼝不可达的ICMP数据报给主机。主机接到这个报告以后就知道,主机到了,所以,说Traceroute是⼀个骗⼦⼀点也不为过
五.IP选路,动态选路,和⼀些细节
参考: TCP/IP详解学习笔记(5)-IP选路,动态选路,和⼀些细节 - ⼀块积⽊ - CSDN博客
六.UDP协议
参考: TCP/IP详解学习笔记(6)-UDP协议 - ⼀块积⽊ - CSDN博客
·UDP简要介绍
UDP是传输层协议,和TCP协议处于⼀个分层中,但是与TCP协议不同,UDP协议并不提供超时重传,出错重传等功能,也就是说其是不可靠的协议。
·UDP协议头
UDP报⽂(图⽚来⾃wwwblogs/Allen-rg/p/7190042.html)
UDP可以很长很长,可以有65535字节那么长。但是⼀般⽹络在传送的时候,⼀次⼀般传送不了那么长的协议(涉及到MTU的问题),就只好对数据分⽚,当然,这些是对UDP等上级协议透明的,UDP不需要关⼼IP协议层对数据如何分⽚。
·IP分⽚
IP在从上层接到数据以后,要根据IP地址来判断从那个接⼝发送数据(通过选路),并进⾏MTU的查询,如果数据⼤⼩超过MTU就进⾏数据分⽚。数据的分⽚是对上层和下层透明,⽽数据也只是到达⽬的地还会被重新组装,不过不⽤担⼼,IP层提供了⾜够的信息进⾏数据的再组装。
在IP头⾥⾯,16bit识别号唯⼀记录了⼀个IP包的ID,具有同⼀个ID的IP⽚将会被重新组装;⽽13位⽚
偏移则记录了某IP⽚相对整个包的位置;⽽这两个表⽰中间的3bit标志则标⽰着该分⽚后⾯是否还有新的分⽚。这三个标⽰就组成了IP分⽚的所有信息,接受⽅就可以利⽤这些信息对IP数据进⾏重新组织(就算是后⾯的分⽚⽐前⾯的分⽚先到,这些信息也是⾜够了)。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论