赞
踩
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地址,一般为主机号为1
路由器至少连接两个子网,路由器也就相当于同时在两个子网中,立即路由器有多个ip地址,网络号不一样,主机号为1
路由器的功能:ip报文转发,构建子网(给子网内部的设备分配ip地址)
DHCP技术:自动给子网内新增主机节点分配ip地址,避免手动管理ip的不便。
路由器带有DHCP功能, 可以看做一个DHCP服务器。
局限性:浪费ip地址
申请了一个B类网络,一个子网可以支持2^16-2主机允许,但实际上不可能达到这个数量。
(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地址,同一个mac地址的设备,每次接入互联网中,得到的ip地址不一定是相同的
ipv6:新的协议,用16个字节128来表示ip地址(ipv4 是 4个字节 32位)
NAT技术
私有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报文过大进行分片
报文长度为3000进行分片
片偏移 | 0 | 1500 | 2980 |
第三位标志 | 0 | 0 | 1 |
标识符 | 1111 | 1111 | 1111 |
三个切片标识符都是1111
每个片都带有ip报头
偏移量计算参照切片前的ip报文
三个分片16位标识号为1111
判断是否被分片?
a.片偏移!=0 || 第三位标识符为1
如何判断是否丢失?
a.丢第一个,没有片偏移为0的分片
b.丢最后一个 没有第三位标识符为1的分片
c.丢中间,根据片偏移量判断
不建议分片
有任何一个分片丢失,ip报文都要重新发送
分片过多,丢的包也多。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。