TCP/IP IP 协议 及 选路

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/yichen97/article/details/88702580

 

1. IP 介绍

1. IP是TCP/IP协议族中最核心的一个协议。比如说分用(https://blog.csdn.net/yichen97/article/details/87950880)中的作用。

2. IP的特点:IP提供不可靠、无连接的数据报传送服务。

不可靠。IP有可能丢包,他不能保证IP数据报能成功到达目的地,丢了之后,通过ICMP协议将“为什么丢包?网络上发生了什么事件而造成了这次丢包?”发给信源端。

无连接。IP不维护任何关于后续数据报的状态信息,每个数据报的处理是相互独立的,IP数据报可以不按发送顺序接收。如果一信源向相同的信宿发送两个连续的数据报(A,B),因为每个数据报都是独立的进行路由选择,可以选择不同的路线,因此,B很有可能在A到达之前先到达。IP不用管顺序,只是收到就可以,顺序交到TCP的时候,TCP来做排序(需要按照顺序来收包)。如果TCP先收到了后面的包,就一直做缓存,直到收到之前的包,然后把包的顺序连到一起,最后交给应用程序。

3. 相关命令 

ipconfig(Windows)&& ifconfig(Linux)查看信息

netstat 当前会话,比如谁跟谁有连接

2. IP首部

版本<4>:版本号v4,4个bit位,相应也有v6。

首部长度<4>:4个位首部长度,也就是说最大为1111(二进制),换成十进制为15,15其中的1份代表4个字节(32个位),一共有15份,4 * 15,也就是60个字节。故,IP首部最大不可能超过60个字节。一个正常的IP首部,前面的部分到 目的IP地址<32> 一共有20个字节,因为有这个限制(选项<可选> 不能超过40个字节)。

优先级和服务类型<8>:服务类型也叫TOS,从前往后看,TOS字段包括:前3个位的IP优先级、中间4个位的TOS子字段和1个未用位但必须置0。中间4 bit 的TOS分别代表最小延时、最大吞吐量、最高可靠性、最小费用。4个位可以表示为4个1,假如说第一个位被置1,说明这个包需要最小的延时;第二个位被置1,说明这个包需要最大的吞吐量……。给包打上这些位,中间的路由器就可以根据这些位,然后做一些服务质量的差别。但是,如果中间的路由器不对此位理睬,设的这些位也不会起作用,因为这只是一个标记。

总长度<16>:总长度包含IP首部和剩余数据。16个位也就是2的16次方,也就是65535,所以一个整体的IP数据包最大不可能超过65535。

标识<16>:比如说PC要发很多包,第一个包,假如标识是1,第二个包就是2,第三个包就是3,第四个包就是4,每一个包都对应的给它一个id,每新发一个包,id就加1,再发一个包,id还加1。当然第一个包标识肯定不是1,这个id是跟操作系统有关,但能确定的是:每一个包有一个id,每多发一个包,id就会加一个。因为id唯一的包是有可能被分片的,不管分成多少片,这些分片id都是一样的,这样就能让目的的PC,把这些id都为1的收集起来,重组装,而变成一个数据包。不管怎么分片,id都不变。

标志<3>:标志位虽然有三个位,但只有两个位在用,另一个位没有使用。在用的两个位中,其中一个位叫做df位(Don't Fragment),什么是df?比如说有一个分片是2000,MTU是1500,按理说这种情况下就应该分片了,分成一个1500和一个500,如果说那个2000的包df那一位等于1,意思就是这个包不用分片了,直接给目的PC就行了,然后向目的PC回送一个ICMP信息,告诉目的PC是哪一台服务器扔的,MUT是多少什么的,只有当df等于0时才允许分片;另一个位叫做mf位(More Fragments),由于接收端的PC不知道那么多分片,要接收到什么时候才算完成,所以在原始数据报分片完成后,将最后一个分片的mf字段设置为0,如果mf位等于1,说明后面还有其他的分片,如果接收到的分片mf位等于0,则说明,收完了。

片偏移<13>:如果一个包分成很多片,比如说有1号、2号、3号、4号、5号,因为ip是不可靠的,所以在收的时候,有可能就成了3号、2号、1号、5号、4号。刚开始,一号的偏移量就为0,假如1号片大小为1500,那么2号片的偏移量为1500;2号片大小为100,那么3号片的偏移量就是1600;3号片的大小是500,那么4号片的偏移量就是2100……。偏移量的作用就是看这个片应该放到哪个地方,才能把这个偏移量给接下去,不管这个片是什么时候抵达,根据偏移量就能把这些包给串在一起。

生存时间<8>:也叫做TTL,其实与时间没有太多关系,只不过是没过一个路由器,TTL就会减1。一般一个PC发出来是255,过一个路由器就减1,变成254,再过一个253……。好像听起来没有什么用处,但是,如果网络出现环路,不做TTL的话,就永远环下去了;做了TTL,就一直减减减,最后减到0,就丢弃了,不会永远被环下去。

协议<8>:就是每个头部都有一个标记,来告诉下一个头部是什么,比如说TCP的协议是6。

头部校验和<16>:就是将发出去包的内容做一个校验和,收的时候再通过校验算法,再做一次校验和,如果两个校验和相同,则证明发出去的包和接收到的包是一样的,没有被损坏,也没有被篡改。

选项<可选>:选项最大有40个字节,因为正常头部必须有20个字节(首部长度提到)。

3. IP路由选择

这个问题分为两类,分别是两个主机在一个网络里,和两个主机在不同网络里的情况。

1. 在相同的网络

2. 在不同的网络

1. 相同的网络下,两个真实的IP,两个真实的Mac地址;而跨网络,没有到目的IP之前都是网关的Mac地址。

2. 事实上,大多数主机和一些路由器可以用默认路由。

3. 数据报中的目的IP地址始终不发生任何变化,只有使用源路由选项时,目的IP地址才有可能被修改,但这种情况是很少出现的。

4. 所有路由选择决策都是基于这个目的IP地址。

5. 每个链路层可能具有不同的数据帧首部,而链路层的目的地址始终指的是下一站的链路层地址,也就是网关的Mac地址。

6. 以太网地址一般通过ARP来解析。

4. 特殊情况的IP地址

1. 0表示所有比特位全0,-1表示所有比特位全1,netid、subnetid和hostid分别表示不全为0或全1的字段,子网号为空表示该地址没有进行子网划分。

2. 表的前两项是特殊的源地址;中间项是特殊的环回地址;最后四项是广播地址。

3. 表的前两项,网络号为0,如主机使用BOOIP协议确定IP地址时,只能作为初始化过程中的源地址出现。

4. 0.0.0.0:作为源是OK的,但作为目的是完全不可能的。在DHCP(动态获取IP地址)未获取IP地址前,IP地址为0.0.0.0。

5. 以127开头的任何地址:环回口。

6. ping广播地址根据操作系统的不同,出的效果也是不一样的。用windows显示找不到主机,用mac反而可以ping到。

猜你喜欢

转载自blog.csdn.net/yichen97/article/details/88702580