JHHK

欢迎来到我的个人网站
行者常至 为者常成

6、网络层

目录

快速开始

一、IP首部图片示例

img

二、首部协议标识

协议:封装的数据部分使用的什么协议,比如传输层过来的 tcp 和 udp、网络层产生的 arp 和 icmp

arp协议工作在网络层

icmp协议工作在网络层
我们ping的时候是没有经过应用层和传输层的
IP首部 + icmp首部 + 数据

类似的协议还有:
ppp 协议工作在链路层
csma/cd 协议工作在链路层

三、TTL

生存时间,允许传过路由器的数量,当ttl变为0时,对应的路由器会返回错误报文
通过ping命令,配置ttl,可以逐步查看穿过的路由器

网络层(Network )

img

网络层数据包(IP数据包,Packet)由首部、数据2部分组成
数据:很多时候是由传输层传递下来的数据段(Segment)

一、网络层首部 - 版本、首部长度、区分服务

版本(Version)
占4位
0b0100:IPv4
0b0110:IPv6

首部长度(Header Length)
占4位,二进制乘以4才是最终长度
0b0101:20(最小值)
0b1111:60(最大值)

区分服务(Differentiated Services Field)
占8位
可以用于提高网络的服务质量(QoS,Quality of Service)

二、网络层首部 - 总长度

总长度(Total Length)
占16位
首部 + 数据的长度之和,最大值是65535

img

由于帧的数据不能超过1500字节,所以过大的IP数据包,需要分成片(fragments)传输给数据链路层
每一片都有自己的网络层首部(IP首部)

三、网络层首部 - 标识、标志

标识(Identification)
占16位
数据包的ID,当数据包过大进行分片时,同一个数据包的所有片的标识都是一样的
有一个计数器专门管理数据包的ID,每发出一个数据包,ID就加1

标志(Flags)
占3位
第1位(Reserved Bit):保留
第2位(Don’t Fragment):1代表不允许分片,0代表允许分片
第3位(More Fragments):1代表不是最后一片,0代表是最后一片

四、网络层首部 - 片偏移

片偏移(Fragment Offset)
占13位
片偏移乘以8:字节偏移
每一片的长度一定是8的整数倍

img

示例:ping ke.qq.com -l 4000

img

五、网络层首部 - 生存时间

生存时间(Time To Live,TTL)
占8位
每个路由器在转发之前会将TTL减1,一旦发现TTL减为0,路由器会返回错误报告
观察使用ping命令后的TTL,能够推测出对方的操作系统、中间经过了多少个路由器

img

六、网络层首部 - 协议、首部校验和

协议(Protocol)
占8位
表明所封装的数据是使用了什么协议

img

首部校验和(Header Checksum)
用于检查首部是否有错误

ping的几个用法

1、查看ping的用法
ping /?(Windows)
ping(Mac)

2、发送指定大小的数据包
ping ip地址 -l 数据包大小 (Windows 默认发送4个ICMP数据包)
ping ip地址 -c 4 -s 数据包大小(Mac -c count 指定发送次数)

ping ke.qq.com -s 4000 -c 1
PING ke.qq.com (153.37.100.224): 4000 data bytes
4008 bytes from 153.37.100.224: icmp_seq=0 ttl=54 time=27.151 ms

--- ke.qq.com ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 27.151/27.151/27.151/0.000 ms

img img img

3、不允许网络层分片
ping ip地址 -f

4、设置TTL的值
ping ip地址 -i TTL(Windows)
ping ke.qq.com -m 1 -c 1(Mac)

ping ke.qq.com -m 2 -c 1
PING ke.qq.com (153.37.100.193): 56 data bytes
92 bytes from bogon (192.168.1.1): Time to live exceeded

5、通过tracert、pathping命令,可以跟踪数据包经过了哪些路由器

查看ping命令的使用

ping --help

查看百度

$ ping baidu.com -c 1                                                                                                                     exit 2
PING baidu.com (110.242.68.66): 56 data bytes
64 bytes from 110.242.68.66: icmp_seq=0 ttl=249 time=16.737 ms

ttl=249代表数据从110.242.68.66到达我的电脑时ttl为249
可以推测出百度用的服务器是 Linux 版本是2.2.14 kernerl 或 2.4 kernel,他们默认的ttl是255
也就是说百度服务器发数据到我的电脑中间经历了 6 = 255 - 249 个路由

推测路径

# 发送1次,并且设置ttl为1
$ ping baidu.com -c 1 -m 1                                                                                                               exit 64
PING baidu.com (110.242.68.66): 56 data bytes

# 因为ttl只设置了1,所以到我的网关 10.249.31.254 时 ttl为0,路由器返回错误给我
36 bytes from 10.249.31.254: Time to live exceeded
Vr HL TOS  Len   ID Flg  off TTL Pro  cks      Src      Dst
 4  5  00 5400 17a5   0 0000  01  01 c5af 10.249.30.40  110.242.68.66 

通过这种方式我们可以一个一个的测试下去,查找出经过了哪些路由

# 不知道为什么经过的第二个路由器获取不到??
$ ping baidu.com -c 1 -m 2                                                                                                                exit 2
PING baidu.com (110.242.68.66): 56 data bytes
--- baidu.com ping statistics ---
1 packets transmitted, 0 packets received, 100.0% packet loss


# 经过的第三个路由器:125.208.12.193
lixiaoyi@lixiaoyideMacBook-Pro in ~
$ ping baidu.com -c 1 -m 3                                                                                                                exit 2
PING baidu.com (110.242.68.66): 56 data bytes
36 bytes from 125.208.12.193: Time to live exceeded
Vr HL TOS  Len   ID Flg  off TTL Pro  cks      Src      Dst
 4  5  00 5400 4243   0 0000  01  01 9b11 10.249.30.40  110.242.68.66 
--- baidu.com ping statistics ---
1 packets transmitted, 0 packets received, 100.0% packet loss


# 经过的第四个路由器:10.19.36.81
lixiaoyi@lixiaoyideMacBook-Pro in ~
$ ping baidu.com -c 1 -m 4                                                                                                                exit 2
PING baidu.com (110.242.68.66): 56 data bytes
36 bytes from 10.19.36.81: Time to live exceeded
Vr HL TOS  Len   ID Flg  off TTL Pro  cks      Src      Dst
 4  5  00 5400 efc1   0 0000  01  01 ed92 10.249.30.40  110.242.68.66 
--- baidu.com ping statistics ---
1 packets transmitted, 0 packets received, 100.0% packet loss
lixiaoyi@lixiaoyideMacBook-Pro in ~
$  

行者常至,为者常成!





R
Valine - A simple comment system based on Leancloud.