当前位置:   article > 正文

波奇学Linux:IP协议

波奇学Linux:IP协议

ip报文解析 

 4位版本:一般是4表示通信的ip版本号是ipv4还是ipv6

4位首部长度:数值*4=ip报头长度 取值范围为[0101,1111], 报头长度就是[5*4=20,15*4=60]

8位服务类型(TOS):4位TOS位段和3位优先权字段和一位保留字段

4位TOS相当于给路由器转发路径选择提供策略,只能选择一个,最小延时(速度快),最大吞吐量(数据多),最高可靠性(避免丢包),最小成本。

16位总长度:表示ip报文整体长度

16位标识:每个ip报文都有自己的编号,分片的ip报文编号是相同的。

3位标志位:第1个不用,第2位置为0,表示允许分片,第3位表示结束当前标记(最后一个小包置为0,不然为1)

13位片偏移:表示片在原始片中的偏移量

8位生存时间:报文在网络中生存时间,表示报文可以经过路由转发的次数,一般为64 每被转发一次,数字减1,防止出现路由循环。

8位协议:把ip的有效载荷交给上层的UDP/TCP等哪个协议

16位首部校验和:校验数据报 头部 在传输中是否出错。

32位源ip地址/32位目的ip地址:源ip和目的ip

Question

报头和有效载荷如何分离?

固定长度和自描述字段结合,读取20个字节,再读取首部长度计算出报头长度,报头长度-20字节,剩下的部分即为选项的长度。

网络底层是字节流吗?

不是,由ip协议可知实际上是报文流,tcp上层经过处理才变成了字节流的模样。

套接字socket的ip和端口号分别哪层报文?

ip地址保存在ip报文中,端口号保存在tcp/udp报文中。在路由过程中,只会用到网路层,看不到端口号。

为什么应用成要把点分十进制的ip转为4个字节?

ip报文ip就是4个字节

如何看待ip报文从代码的角度?

ip报头是c语言的结构体

ip地址组成

ip地址=网络号+主机号

网段号:保证相互连接的两个网段具有不同的标识

主机号:同一个网段内,主机有相同的网络号,有不同的主机号

路由器本质上是也是一台主机,也有自己的ip地址,一般为主机号为1

路由器至少连接两个子网,路由器也就相当于同时在两个子网中,立即路由器有多个ip地址,网络号不一样,主机号为1

路由器的功能:ip报文转发,构建子网(给子网内部的设备分配ip地址)

DHCP技术:自动给子网内新增主机节点分配ip地址,避免手动管理ip的不便。

路由器带有DHCP功能, 可以看做一个DHCP服务器。

划分ip的方法和ip短缺问题

局限性:浪费ip地址

申请了一个B类网络,一个子网可以支持2^16-2主机允许,但实际上不可能达到这个数量。

CIDR解决ip短缺问题

(Classless Interdomain Routine)

引入一个额外的子网掩码(subnet mask)来区分网络号和主机号

子网掩码也是一个32位的正整数,通常用一串0结尾

ip地址和子网进行按位与操作,得到的结果就是网络号

网络号和主机号划分与这个ip地址是A类还是B类,C类无关

通过子网掩码计算网络号

主机数为0,和255的不分配给主机

140.252.20.0作为网络号代表局域网

140.252.20.255作为广播用于给所有主机发数据包

子网掩码如何解决问题ip浪费问题?

网络号的位数不再固定,当子网掩码的1变多时,网络号变长,ip地址变少。0变多时,网络号变短,ip地址变少

如当子网掩码变255.255.255.240(ff ff ff f0)

网络号就变成 140.252.20.60

子网地址范围 140.252.20.64~140.252.20.79

子网掩码在路由器中,当ip报文转发时,路由器会子网掩码计算出网络号

增加ip利用上限

动态分配ip地址:只给接入网络的设备分配ip地址,同一个mac地址的设备,每次接入互联网中,得到的ip地址不一定是相同的

ipv6:新的协议,用16个字节128来表示ip地址(ipv4 是 4个字节 32位)

NAT技术

NAT技术

公网ip和私有ip

私有ip地址:在组键的局域网中通信,而不直接连接到Internet上。

公网ip:访问局域网外的设备要用到公网ip,如百度服务器。

私有ip的范围

我们只需要用公网ip标识局域网,用私有ip标识局域网中的设备

我们在用ipconfig查询得到的ip地址实际上是私有ip。

局域网主机如何访问公网

路由器有两个ip:子网ip相当路由器在当前局域网中ip,wan口ip相当于路由器在上一级局域网的私有ip。 运营商的wan口ip相当于公网ip。

主机192.168.1.201发送请求,经过路由转发的过程中,私有 ip被不断替换成wan口ip

路由表:主机是如何转发给路由器的

1.计算目标网络=目标ip&Genmask

2.比对desination和目标网络,通过Iface转发到符合的下一级路由,destination是下一级路由的网络号

路由表的结果:

1.给你具体下一跳

2.路由器不清楚,转入默认路由(同网段的另一台路由)

3.到达入口路由器(目标ip网络号的路由)

ip报文的分片

实际上在同一台主机,报文没有在网络层发送出去,而是继续交给自己的下一层协议(数据链路层),不能发送一次过大的报文,要求上层不能发过大报文。

ip报文过大进行分片

报文长度为3000进行分片

片偏移015002980
第三位标志001
标识符111111111111

三个切片标识符都是1111

每个片都带有ip报头

偏移量计算参照切片前的ip报文

三个分片16位标识号为1111

判断是否被分片?

a.片偏移!=0 ||  第三位标识符为1

如何判断是否丢失?

a.丢第一个,没有片偏移为0的分片

b.丢最后一个 没有第三位标识符为1的分片

c.丢中间,根据片偏移量判断

不建议分片

有任何一个分片丢失,ip报文都要重新发送

分片过多,丢的包也多。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/463894
推荐阅读
相关标签
  

闽ICP备14008679号