IP协议的详细知识总结

网络层

IP协议

首先通过认识IP协议报头来了解IP协议

IP协议的详细知识总结_第1张图片

4位版本

IP协议的版本号,目前只有两个取值,4(0100)和6(0110)

4位首部长度

表示IP首部长度。最大数值是15(1111),单位是4个字节,所以IP首部最大长度为60字节。

8位服务类型(TOS)

3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0).所以说虽然是8位,但是其实只有4位是有效的

4位TOS分别表示为:最小延迟,最大吞吐量,最高可靠性,最小成本.(同一时刻,只能存在一种状态)

ip协议是规划两点之间的一条比较合适的路径,也就是选择上面四种状态之一尽心规划.

16位总长度

16位表示最大长度为64k,所以单个IP数据报最大的长度不能超过64k

如果需要一个更长的ip数据报(比如搭载的数据载荷就超过了64k),IP协议自己就实现了分包和组包这样的操作.

16位标识+3位标志+13位片偏移

因为这三部分共同完成分包和组包的操作,所以这里放在一起进行总结

IP协议的详细知识总结_第2张图片

拆分之后,接收方如何知道这几个小包是同一个数据拆分的呢?

此时就到了16位标识出场:所有从同一个数据拆分出来的小包,他们的16位标识都是一样的

IP协议的详细知识总结_第3张图片

此时接收方知道标识一样的小包是同一个数据拆分出来的小包,可是接收方面对数据仍然会手足无措,不知道这些小包应该按照什么样的顺序进行组合.

此时13位片偏移出场,描述这些包到底谁先谁后,需要注意的是,片偏移并不是单纯的表示1,2,3,4 而是基于片偏移计算出了每个包之间应该空出多少空间.(放置后发先至的情况.

IP协议的详细知识总结_第4张图片

此时数据拆分成三个包,因为网络原因,导致片偏移为2的数据报最后到达,但是因为片偏移的存在,最后仍然可以组合成一个完整的数据报,和发送方的数据报一模一样.

但是组合完成之后,接受方如何可以得知此时的ip数据报已经全部接收了呢?

此时3位标志出场,除了最后一个包,其他的包取值都为0,最后一个取值为1.

IP协议的详细知识总结_第5张图片

最后,接收方接受到整个ip数据报,皆大欢喜,可喜可贺.

8位生存时间(TTL)

表示一个ip数据报可以在网络中生存的时间,此时的单位不会是s或ms,而是转发的次数.IP数据报被发送的时候,会有一个初始的TTL(常见的值为128或64),IP数据报每次经过一个路由器,TTL就会-1,如果TTL减到了0,此时收到这个包的路由器就会将这个包丢弃.

因为有些包里面的IP地址,也许永远也到不了,这种包不可能在网络中永无休止的转发(浪费资源),正常的IP数据报都会在TTL内到达.

8位协议

传输层中使用的协议.比如TCP或UDP

16位首部校验和

用来校验数据是否正确

32位源IP地址+32位目的IP地址

源IP地址表示发件人地址,目的IP地址表示收件人地址.对于IPv4来说,一个IP地址本质上是32位的整数,通常用点分十进制表示这个ip地址,3个点把32位整数分成4部分,每部分1字节,每个部分的取值为0-255

地址管理

ip地址是一个点分十进制构成的数据,咋们把ip地址分成两部分:网络号和主机号

网络号:描述了当前的网段信息(局域网的标识)

主机号:区别了局域网内的主机

同一个局域网中,主机之间的网络号是相同的,主机号不能相同,

两个相邻的局域网(同一个路由器相连),网络号也是不同的

IP协议的详细知识总结_第6张图片

子网掩码

子网掩码格式和IP地址一样,也是一个32位的二进制数。其中左边是网络位,用二进制数字“1”表示,1的数目等于网络位的长度;右边是主机位,用二进制数字“0”表示,0的数目等于主机位的长度。

image-20220417145349290

此时的自子网掩码换算成二进制位1111 1111 1111 1111 1111 1111 0000 0000 前面为1的就表示为网络号,后面为0表示主机号

特殊的IP地址

将IP地址中的主机地址全部设为0,就成为了网络号,代表这个局域网;

将IP地址中的主机地址全部设为1,就成为了广播地址,用于给同一个链路中相互连接的所有主机发送数据包;

127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1

IP地址是10开头,192.168开头 172.12 —172.31开头,表示该IP地址是一个局域网内部的IP(内网IP),除此之外,剩下的IP成为外网(直接在广域网使用的IP)

要求外网IP是唯一的,每一个外网Ip都对应到唯一的设备内网IP只是当前局域网中是唯一的,不同的局域网中可以有相同的内网IP的设备

目前的IPv4协议使用的IP地址是32位整数,32位表示的范围42亿9千万,如果给世界上每个设备分一个唯一的IP,意味着世界上的设备不能超过42亿9千万,但随着互联网的兴起,这是不可能的

所以需要解决ip地址不够的问题

  1. 动态分配:让每个设备连上网的时候,才有ip,不联网的时候就没有ip(这个ip此时给别人使用)-

这种方案不能从根本解决问题,设备没有减少,ip地址没有增加,治标不治本

  1. NAT机制:让多个设备共用一个IP(外网IP)

把网络分成内网(局域网)和外网(广域网),要求外网ip必须表示唯一的设备,同时内网的若干个设备,可以共用同一个外网IP

此时每个外网IP都可以表示几千个甚至上万个设备,这个时候IP地址的压力就缓解了很多.

上图中的主机1如果访问一个网站,就通过运营商的外网IP去访问,但是这样会出现一个问题

如果主机1和主机2同时访问一个网站,那么网站就看到两个连接,这两个连接的IP地址都来自于同一个外网,此时网站如何区分两个主机(五元组)

不同的主机,就有不同的端口号,既然ip地址一样,那么就跟据端口号进行区分两个主机.

NAT机制将IP分为内网和外网,也隐藏一个重要的结论

对于一个外网IP,可以在网络中的任意位置访问到

对于一个内网IP,只能在当前局域网内部访问,局域网1的设备,不能通过内网IP访问到局域网2的设备

NAT机制也有极限:端口号的个数 (65535) 如果一个局域网的连接数超过65525,此时的NAT不一定好使,端口号不够用了

so,NAT只是缓解,但不能从根本解决

  1. IPv6:在报头中使用了一个更长的的字段来表示IP地址

16个字节 128位

从根本上解决了ip地址不够用的问题

但是IPv6和IPv4不兼容

image-20220417155732291

每一个数字都是一个16进制的数字,每个冒号分割了2字节

路由选择

路由选择,就是规划路线,两个设备之间要找出一条通道,能够完成传输的过程

IP数据报中的目的地址,表示了这个包要发去哪里,这个目的地址,如果当前路由器直接认识,就告诉IP数据报具体的路线。

如果当前路由器不认识,就会告诉一个大概的方向,让数据报走到下一个路由器的时候再访问,依次往后走,其实就是再距离目标越来越近,这个时候就总会遇到认识这个地址的路由器,就可以具体的转发过去。

路由器内部维护了一个数据结构:路由表

路由表里面就记录了一些网段信息(网络号)(目的IP就在这些网络号中匹配)以及每个网络号对应的网络接口(网络就扣其实就对应到路由器里面具体的接口)

数据链路层

主要的协议:以太网

以太网数据帧

IP协议的详细知识总结_第7张图片

目的地址+源地址

通过6个字节来表示源地址和目的地址,这个比IPv4更长,这里的地址称为mac地址

mac地址做到了每个网卡都是唯一的(网卡出场的时候就写死了),所以我们可以通过mac地址确定唯一的主机

IP地址和mac地址的功能

IP用来表示一个传输过程中的起点和终点,(不考虑NAT的情况,一个IP数据报中的源IP和目的IP是固定的)

mac用来表示传输过程中,任意两个相邻点之间的地址(一个以太网帧,在每次转发过程中,源mac和目的mac都会改变

类型

类型不同表示后面的数据搭载不同的值

如果是0800 就是一个完整的IP数据报

如果是0806,那就是一个ARP请求

如果是8035,那就是一个RARP请求

CRC

帧尾就是一个基于CRC算法的校验和

循环冗余算法和(把数据的每个字节依次进行累加(溢出就溢出了))

图中的46-1500 为MTU

MTU 表示一个以太网数据帧能承载的数据范围 范围取决于硬件设备

其他硬件设备,对应的数据链路层协议,可能不一样,MTU也不一样

如果数据报超过了MTU怎么办

IP层的分包操作 ip层的分包,其实不是给ip的报头64k准备的,更多的是为了适应数据链路层的MTU

MTU对IP协议的影响

由于数据链路层MTU的限制,对于较大的IP数据包要进行分包。

  • 将较大的IP包分成多个小包,并给每个小包打上标签;
  • 每个小包IP协议头的 16位标识(id) 都是相同的;
  • 每个小包的IP协议头的3位标志字段中,第2位置为0,表示允许分片,第3位来表示结束标记(当前是否是最后一个小包,是的话置为1,否则置为0);
  • 到达对端时再将这些小包,会按顺序重组,拼装到一起返回给传输层;
  • 一旦这些小包中任意一个小包丢失,接收端的重组就会失败。但是IP层不会负责重新传输数据;

MTU对UDP协议的影响

让我们回顾一下UDP协议:

  • 一旦UDP携带的数据超过1472(1500 - 20(IP首部) - 8(UDP首部)),那么就会在网络层分成多个IP数据报。
  • 这多个IP数据报有任意一个丢失,都会引起接收端网络层重组失败。那么这就意味着,如果UDP数据报在网络层被分片,整个数据被丢失的概率就大大增加了。

MTU对于TCP协议的影响

让我们再回顾一下TCP协议:

  • TCP的一个数据报也不能无限大,还是受制于MTU。TCP的单个数据报的最大消息长度,称为MSS(Max Segment Size);
  • TCP在建立连接的过程中,通信双方会进行MSS协商。
  • 最理想的情况下,MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的MTU)。
  • 双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值。
  • 然后双方得知对方的MSS值之后,选择较小的作为最终MSS。
  • MSS的值就是在TCP首部的40字节变长选项中(kind=2);

MSS:TCP中在IP不分包的前提下,最多搭载多少载荷

MTU也取决于TCP和IP的报头

IP协议的详细知识总结_第8张图片

分包的开销还是有,MSS对于TCP起到一个提示效果.如果当前传输TCP的数据不超过MSS的时候,是属于最高效的状态

ARP报文

ARP报文并不是用来传输数据的,只是起到一个辅助的效果

路由器这样的设备在转发数据的时候,首先拿到的是一个IP地址(目的IP),通过IP地址来决定接下来这个数据咋走(从哪个端口出去,发到哪个设备上),因此就得决定,接下来封装的以太网数据帧目的mac是啥,根据ARP协议就建立起IP->mac这样的映射关系.

当设备启动的时候,就会向局域网中,广播ARP报文,每个设备收到只有,都会给出一个应答,应答的信息中包含了自己的IP和mac,发起广播的一方,就可以根据这些回应建立起映射表

你可能感兴趣的:(网络协议,tcp/ip)