- 验证性实验
- ipconfig
1.1使用ipconfig/all查看 自己
主机名
主** DNS **后缀:
节点类型
IP** 路由已启用:**路由是把信息从源穿过网络传递到目的的行为,在路上,至少遇到一个中间节点。路由通常与桥接来对比,在粗心的人看来,它们似乎完成的是同样的事。它们的主要区别在于桥接发生在OSI参考协议的第二层(链接层),而路由发生在第三层(网络层)。这一区别使二者在传递信息的过程中使用不同的信息,从而以不同的方式来完成其任务。"否"表示该机未提供路由服务。
以太网适配器 以太网
媒体状态:
连接特定的** DNS **后缀
描述:
物理地址:
DHCP** 已启用:**DHCP是动态分配ip的协议,ip自动获取时会启用。
自动配置已启用:
无线局域网适配器 本地连接** *3 **:
媒体状态:
其他定义同上面以太网适配器,略。
因为我的pc机器装了vmware虚拟机(vmware里面装了ubuntu),所以默认出现这两块虚拟网卡,相当于我的机器装了多块网卡,这些虚拟网卡是与我的虚拟机相连的(如果我把虚拟网卡的IP地址和虚拟机系统里的IP地址改为同一网段,那么我的真实机与我的虚拟机将能够互相访问,并且能够实现资源与文件的共享)。
VMnet8提供NAT和DHCP服务,VMnet1提供DHCP服务。vmnet8是让主机和虚拟机通讯用的,如果需要访问虚拟机上的相关网络服务,才需要vmnet8。
连接的** DNS **后缀:
描述:
物理地址:
DHCP** 已启用:**略
自动配置已启用:略
本地链接 IPv6 地址:
IPv4 **** 地址:本地在局域网内的ip地址
子网掩码
默认网关
DHCPv6 IAID** :**身份关联标识符 (Identity Association Identifier, IAID)。
**DHCPv6 **** 客户端 **** DUID **:
DNS **** 服务器:域名解析服务器的地址,将网址翻译成IP地址。
**TCPIP **** 上的 **** NetBIOS **:
无线局域网适配器 WLAN:
获得租约的时间:
租约过期的时间:
DHCP** 服务器:**DHCP服务器地址,提供DHCP服务的电脑的IP地址
以太网适配器 蓝牙网络连接
1.2使用 ipconfig/all 查看 旁边
旁边没有计算机。
2、ping
2.1要测试到某计算机如 重庆交通大学 Web 服务器的连通性,可以使用 ping www.cqjtu.edu.cn 命令,也可直接使用 IP 地址。
请掌握使用该命令后屏幕显示的反馈回来信息的意思,如:TTL、时间等。、
ttl表示生存时间,他告诉网络路由器包在网网络中的时间是否太长而应该被丢弃。
Times表示本机到该ip的延迟时间。
2.2 使用 ping/? 命令了解该命令的各种选项并实际使用。
-d:使用Socket的SO_DEBUG功能;
-c<完成次数>:设置完成要求回应的次数;
-f:极限检测;
-i<间隔秒数>:指定收发信息的间隔时间;
-I<网络界面>:使用指定的网络界面送出数据包;
-l<前置载入>:设置在送出要求信息之前,先行发出的数据包;
-n:只输出数值;
-p<范本样式>:设置填满数据包的范本样式;
-q:不显示指令执行过程,开头和结尾的相关信息除外;
-r:忽略普通的Routing Table,直接将数据包送到远端主机上;
-R:记录路由过程;
-s<数据包大小>:设置数据包的大小;
-t<存活数值>:设置存活数值TTL的大小;
-v:详细显示指令的执行过程。
3.tracert
3.1要了解到某计算机如 www.baidu.com 中间经过了哪些节点(路由器)及其它状态,可使用 tracert www.baidu.com 命令,查看反馈的信息,了解节点的个数。
通过ip.cn查看节点是从局域网到重庆再到北京。
3.2 ping.pe 这个网站可以探测从全球主要的 ISP 到某站点如 https://qige.io 的线路状态,当然也包括各线路到该主机的路由情况。请使用浏览器访问 http://ping.pe/qige.io 进行了解
问题一
实现原理
1、tracert发出TTL值为1的ICMP数据包(40个字节、源地址、目标地址和发出时间标签,一般发3个)
2、当到达路径上第一个路由器时,路由器会将,TTL值减1
3、此时TTL值为0,该路由器将此数据包丢弃,向源地址返回一个ICMP超时通知(数据包的源地址、路由器的IP地址)
4、当tracert收到该数据包,获得了这个路径上的第一个路由器的地址
5、tracert再发送另一个TTL为2的数据包
6、第一个路由器会将此数据包转发给第二个路由器
7、当TTL=0,第二个路由器返回一个超时通知,tracert得到第二个路由器地址
Tracert每次发出数据报时便会将TTL加1,发现下一个路由器
这个动作一直重复,直到到达目的地或者确定目标主机不可到达为止
到达目的IP后,目标主机并不返回超时报文
Tracert发送数据报时,会选择一个一般应用程序不会使用的号码来做端口(3000以上)
当到达目的地后,目标主机返回一个ICMP port unreachable(端口不可达)的消息
当tracert收到这个消息后,就知道目的地到达了
问题二
从本机出发到不同的ip,终点距离太远,不在局域网内,都需要跳转到相同的节点。
问题三
在追踪过程中,你可能会看到路径中某些节点显示为 * 号,这是发生了什么?
超过Tracert的固定等待时间,tracert会将ttl + 1继续检测。
4.Arp
4.1运行 arp -a 命令查看当前的 arp 缓存, 请留意缓存了些什么。然后 ping 一下你旁边的计算机 IP(注意,需保证该计算机的 IP 没有出现在 arp 缓存中,或者使用 arp -d * 先删除全部缓存),再次查看缓存,你会发现一些改变,请作出解释。
缓存中多出了对方的ip-mac映射,原因是在ping目的主机的过程中,虽然知道其ip地址,但mac地址不知道,于是ping暂停并进行一次qrp请求与回复,此时源主机知道了目的主机的IP以及mac地址并加入到缓存表当中。
4.2请使用 arp /? 命令了解该命令的各种选项。
-a 通过询问当前协议数据,显示当前 ARP 项。
如果指定 inet_addr,则只显示指定计算机
的 IP 地址和物理地址。如果不止一个网络
接口使用 ARP,则显示每个 ARP 表的项。
-g 与 -a 相同。
-v 在详细模式下显示当前 ARP 项。所有无效项
和环回接口上的项都将显示。
inet_addr 指定 Internet 地址。
-N if_addr 显示 if_addr 指定的网络接口的 ARP 项。
-d 删除 inet_addr 指定的主机。inet_addr 可
以是通配符 *,以删除所有主机。
-s 添加主机并且将 Internet 地址 inet_addr
与物理地址 eth_addr 相关联。物理地址是用
连字符分隔的 6 个十六进制字节。该项是永久的。
eth_addr 指定物理地址。
if_addr 如果存在,此项指定地址转换表应修改的接口
的 Internet 地址。如果不存在,则使用第一
个适用的接口。
4.3 一般而言,arp 缓存里常常会有网关的缓存,并且是动态类型的。
假设当前网关的 IP 地址是 192.168.0.1,MAC 地址是 5c-d9-98-f1-89-64,请使用 arp -s 192.168.0.1 5c-d9-98-f1-89-64 命令设置其为静态类型的。
对于将arp设置为静态的优缺点的回答:我们将网关或其他计算机的arp信息设置为静态的优点有:便于以固定的IP地址或IP地址分组产生的流量为依据管理,可以避免用户忘记密码而进行的繁琐事务流程;缺点有:合法用户分配的地址可能被非法盗用,不仅对网络的正常使用造成影响,同时由于被盗用的地址往往具有较高的权限,因而也容易给合法用户造成损失和潜在的安全隐患。
5、dhcp
5.1一般地,我们自动获取的网络配置信息包括:IP 地址、子网掩码、网关 IP 以及 DNS 服务器 IP 等。使用 ipconfig/release 命令释放自动获取的网络配置,并用 ipconfig/renew 命令重新获取,了解 DHCP 工作过程和原理。
Dhcp工作原理:
- DHCP 客户端进行 IP 请求
当一个 DHCP客户机启动时, 会自动将自己的 IP地址配置成 0.0.0.0, 由于使用 0.0.0.0不能进行正常通信, 所以客户机就必须通过 DHCP服务器来获取一个合法的地址。 由于客户机不知道 DHCP服务器的 IP地址, 所以它使用 0.0.0.0的地址作为源地址, 使用 255.255.255.255作为目标地址, 使用 UDP 67端口作为目的端口来广播请求 IP地址信息。 广播信息 DHCP Discover中包含了 DHCP客户机的 MAC地址和计算机名, 以便使 DHCP服务器能确定是哪个客户机发送的请求。
2 DHCP 服务器响应请求
当DHCP服务器接收到客户机请求IP地址的信息时, 它就在自己的IP地址池中查找是否有合法的IP地址提供给客户机。 如果有, DHCP服务器就将此IP地址做上标记, 加入到DHCP OFFER的消息中, 然后DHCP服务器就广播一则包括下列信息的DHCP OFFER消息:DHCP客户机的MAC地址; DHCP服务器提供的合法IP地址; 子网掩码; 默认网关(路由) ; 租约的期限; DHCP服务器
的IP地址-MAC。因为DHCP客户机还没有IP地址, 所以DHCP服务器使用自己的IP地址作为源地址, 使用255.255.255.255作为目标地址, 使用UDP 68端口作为源端口来广播DHCP OFFER信息
3 DHCP 客户机选择 IPDHCP客户机从接收到的第一个DHCP OFFER消息中选择IP地址, 发出IP地址的DHCP服务器将该地址保留, 这样该地
址就不能提供给另一个DHCP客户机。 当客户机从第一个DHCP服务器接收DHCP OFFER并选择IP地址后, DHCP租约的第三过程发生。 客户机将DHCP REQUEST消息广播到所有的DHCP服务器, 表明它接受提供的内容。 DHCP REQUEST消息包括为该客户机提供IP配置的服务器的服务标识符(IP地址) 。 DHCP服务器查看服务器标识符字段, 以确定它自己是否被选择为指定的客户机提供IP地址, 如果那些DHCP OFFER被拒绝, 则DHCP服务器会取消提供并保留其IP地址以用于下一个IP租约请求。
在客户机选择IP的过程中, 虽然客户机选择了IP地址, 但是还没有配置IP地址, 而在一个网络中可能有几个DHCP
服务器, 所以客户机仍然使用0.0.0.0的地址作为源地址, 使用255.255.255.255作为目标地址, 使用UDP 67端口作为
目的端口来广播DHCP REQUEST信息
4 DHCP 服务器确认租约
服务器确认租约: DHCP ACK
DHCP服务器接收到DHCP REQUEST消息后, 以DHCPACK消息的形式向客户机广播成功的确认, 该消息包含有IP地址的有效租约和其他可能配置的信息。 虽然服务器确认了客户机的租约请求, 但是客户机还没有收到服务器的DHCPACK
消息, 所以服务器仍然使用自己的IP地址作为源地址, 使用255.255.255.255作为目标地址, 使用UDP 68端口作为源端口来广播DHCP ACK信息。 当客户机收到DHCP ACK消息时, 它就配置了IP地址, 完成了TCP/IP的初始化。
服务器拒绝租约: DHCP NACK(DHCP NAK)如果DHCP REQUEST不成功, 例如客户机试图租约先前的IP地址, 但该IP地址不再可用, 或者因为客户机移到其他子网, 该IP无效时, DHCP服务器将广播否定确认消息DHCP NACK。 当客户机接收到不成功的确认时, 它将重新开始DHCP租约过程。
5 DHCP 客户机续租
DHCP客户机会在租期过去50%的时候, 直接向为其提供IP地址的DHCP服务器发送DHCP REQUEST消息包。 如果客户机接收到该服务器回应的DHCP ACK消息包, 客户机就根据包中所提供的新的租期以及其它已经更新的TCP/IP参数, 更新自己的配置, IP租用更新完成。 如果没有收到该服务器的回复, 则客户机继续使用现有的IP地址, 因为当前租期还有50%。
如果在租期过去50%的时候没有更新, 则DHCP客户机将在租期过去87.5%的时候再次向为其提供IP地址的DHCP服务器联系。 如果还不成功, 到租约的100%时候, DHCP客户机必须放弃这个IP地址, 重新申请。 如果此时无DHCP服务器可用, DHCP客户机会使用169.254.0.0/16中随机的一个地址, 并且每隔5分钟再进行尝试。
- netstas
2.Windows 系统将一些常用的端口与服务记录在 C:\WINDOWS\system32\drivers\etc\services 文件中,请查看该文件了解常用的端口号分配。
在里面可以看到sql所用的默认端口号。
2实作二
使用 netstat -an 命令,查看计算机当前的网络连接状况。更多的 netstat 命令选项,可参考上面链接 4 和 5 。
7.Dns
1.Windows 系统将一些固定的/静态的 DNS 信息记录在 C:\WINDOWS\system32\drivers\etc\hosts 文件中,如我们常用的 localhost 就对应 127.0.0.1 。请查看该文件看看有什么记录在该文件中。
外国网站不知道有什么用
- 解析过的 DNS 记录将会被缓存,以利于加快解析速度。使用ipconfig/displaydns 命令查看。我们也可以使用 ipconfig /flushdns 命令来清除所有的 DNS 缓存。
3.使用 nslookup qige.io 命令,将使用默认的 DNS 服务器查询该域名。当然你也可以指定使用 CloudFlare(1.1.1.1)或 Google(8.8.8.8) 的全球 DNS 服务器来解析,如:nslookup qige.io 8.8.8.8,当然,由于你懂的原因,这不一定会得到正确的答案。
8.cache
实作一
打开 Chrome 或 Firefox 浏览器,访问 https://qige.io ,接下来敲 F12 键 或 Ctrl + Shift + I 组合键打开开发者工具,选择 Network 面板后刷新页面,你会在开发者工具底部看到加载该页面花费的时间。请进一步查看哪些文件被 cache了,哪些没有。
只有qige.io没有被缓存。也就是页面的html源文件。
实作二
接下来仍在 Network 面板,选择 Disable cache 选项框,表明当前不使用 cache,页面数据全部来自于 Internet,刷新页面,再次在开发者工具底部查看加载该页面花费的时间。你可比对与有 cache 时的加载速度差异。
禁用缓存
不禁用
- wireshark实验
- 数据链路层
实作一 熟悉 Ethernet 帧结构使用 Wireshark 任意进行抓包,熟悉 Ethernet 帧的结构,如:目的 MAC、源 MAC、类型、字段等。
问题:你会发现 Wireshark 展现给我们的帧中没有校验字段,请了解一下原因。
答:这是因为有时校验和会由网卡计算,这时wireshark抓到的本机发送的数据包的校验和都是错误的,所以默认关闭了WireShark自己的校验。
实作二 了解子网内/外通信时的 MAC 地址
1.ping 你旁边的计算机(同一子网),同时用 Wireshark 抓这些包(可使用 icmp 关键字进行过滤以利于分析),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址是多少?这个 MAC 地址是谁的?
答:旁边没有计算机,手机ping不通,但是mac地址应该就是目的主机的。
2.然后 ping qige.io (或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 icmp 过滤),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址是多少?这个 MAC 地址是谁的?
3.再次 ping www.cqjtu.edu.cn (或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 icmp 过滤),记录一下发出帧的目的 MAC 地址以及返回帧的源 MAC 地址又是多少?这个 MAC 地址又是谁的?
访问本子网的计算机时,目的 MAC 就是该主机的。访问非本子网的计算机时,目的 MAC 是网关的
请问原因是什么?
答:ARP代理,访问非子网计算机时是通过路由器转接的,MAC地址是接入路由器端口的地址,再通过路由器发给相应计算机。
实作三 掌握 ARP 解析过程
- 为防止干扰,先使用 arp -d * 命令清空 arp 缓存
2.ping 你旁边的计算机(同一子网),同时用 Wireshark 抓这些包(可 arp 过滤),查看 ARP 请求的格式以及请求的内容,注意观察该请求的目的 MAC 地址是什么。再查看一下该请求的回应,注意观察该回应的源 MAC 和目的 MAC 地址是什么。
旁边没有计算机。
3.再次使用 arp -d * 命令清空 arp 缓存
- 然后 ping qige.io (或者本子网外的主机都可以),同时用 Wireshark 抓这些包(可 arp 过滤)。查看这次 ARP 请求的是什么,注意观察该请求是谁在回应。
问题:
通过以上的实验,你应该会发现,
1、ARP 请求都是使用广播方式发送的
2、如果访问的是本子网的 IP,那么 ARP 解析将直接得到该 IP 对应的 MAC;如果访问的非本子网的 IP, 那么 ARP 解析将得到网关的 MAC。
请问为什么?
答:ARP代理,访问非子网IP时是通过路由器访问的,路由器再把发出去,目标IP收到请求后,再通过路由器端口IP返回去,那么ARP解析将会得到网关的MAC。
- 网络层
实作一 熟悉 IP 包结构
使用 Wireshark 任意进行抓包(可用 ip 过滤),熟悉 IP 包的结构,如:版本、头部长度、总长度、TTL、协议类型等字段。
问题:为提高效率,我们应该让 IP 的头部尽可能的精简。但在如此珍贵的 IP 头部你会发现既有头部长度字段,也有总长度字段。请问为什么?
答:便于传输时的识别IP总长度,节省时间,当长度超过1500B时就会被返回链路层进行分段。
实作二 IP 包的分段与重组
根据规定,一个 IP 包最大可以有 64K 字节。但由于 Ethernet 帧的限制,当 IP 包的数据超过 1500 字节时就会被发送方的数据链路层分段,然后在接收方的网络层重组。
缺省的,ping 命令只会向对方发送 32 个字节的数据。我们可以使用 ping 202.202.240.16 -l 2000 命令指定要发送的数据长度。此时使用 Wireshark 抓包(用 ip.addr == 202.202.240.16 进行过滤),了解 IP 包如何进行分段,如:分段标志、偏移量以及每个包的大小等
好像出了点问题。。。
问题:分段与重组是一个耗费资源的操作,特别是当分段由传送路径上的节点即路由器来完成的时候,所以 IPv6 已经不允许分段了。那么 IPv6 中,如果路由器遇到了一个大数据包该怎么办?
答:转发至能支持该数据报的出链路上。
实作三 考察 TTL 事件
在 IP 包头中有一个 TTL 字段用来限定该包可以在 Internet上传输多少跳(hops),一般该值设置为 64、128等。
在验证性实验部分我们使用了 tracert 命令进行路由追踪。其原理是主动设置 IP 包的 TTL 值,从 1 开始逐渐增加,直至到达最终目的主机。
请使用 tracert www.baidu.com 命令进行追踪,此时使用 Wireshark 抓包(用 icmp 过滤),分析每个发送包的 TTL 是如何进行改变的,从而理解路由追踪原理。
每到达一个节点返回一个信息,TTL逐渐增加1直到到达目的主机。
问题: IPv4 中,TTL 虽然定义为生命期即 Time To Live,但现实中我们都以跳数/节点数进行设置。如果你收到一个包,其 TTL 的值为 50,那么可以推断这个包从源点到你之间有多少跳?
答:50跳。
- 传输层
实作一 熟悉 TCP 和 UDP 段结构
- 用 Wireshark 任意抓包(可用 tcp 过滤),熟悉 TCP 段的结构,如:源端口、目的端口、序列号、确认号、各种标志位等字段
2.用 Wireshark 任意抓包(可用 udp 过滤),熟悉 UDP 段的结构,如:源端口、目的端口、长度等。
问题:
由上大家可以看到 UDP 的头部比 TCP 简单得多,但两者都有源和目的端口号。请问源和目的端口号用来干什么?
答:在一台机器上,一个进程对应一个端口。端口的作用就是用来唯一标识这个进程。源端口标识发起通信的那个进程,目的端口标识接受通信的那个进程。有了端口号,接受到报文后才能够知道将报文发送到哪个进程。
实作二 分析 TCP 建立和释放连接
1、打开浏览器访问 qige.io 网站,用 Wireshark 抓包(可用 tcp 过滤后再使用加上 Follow TCP Stream),不要立即停止 Wireshark 捕获,待页面显示完毕后再多等一段时间使得能够捕获释放连接的包。
2、请在你捕获的包中找到三次握手建立连接的包,并说明为何它们是用于建立连接的,有什么特征。(SYN 同步序列号,用来发起一个TCP连接)
3、请在你捕获的包中找到四次挥手释放连接的包,并说明为何它们是用于释放连接的,有什么特征。(TCP断开连接是通过发送FIN报文,来告诉对方数据已经发送完毕,可以释放连接了)
- 应用层
实作一 了解 DNS 解析
1、先使用 ipconfig /flushdns 命令清除缓存,再使用 nslookup qige.io 命令进行解析,同时用 Wireshark 任意抓包(可用 dns 过滤)。
2、你应该可以看到当前计算机使用 UDP,向默认的 DNS 服务器的 53 号端口发出了查询请求,而 DNS 服务器的 53 号端口返回了结果。
3、可了解一下 DNS 查询和应答的相关字段的含义
问题:你可能会发现对同一个站点,我们发出的 DNS 解析请求不止一个,思考一下是什么原因?
答:例如,对域名www.baidu.com进行解析就会出现这样的结果。产生这样的结果是为了使baidu这个百度服务器的负载得到平衡(因为每天访问这个站点的次数非常多)。因此这个网站就设有好几个计算机,每一个计算机都运行同样的服务器软件。这些计算机的IP地址当然都是不一样的,但它们的域名却是相同的。这样,第一个访问该网址的就得到第一个计算机的IP地址,而第二个访问者就得到第二个计算机的IP地址等等。这样可使每一个计算机的负荷不会太大。
实作二 了解 HTTP 的请求和应答
1、打开浏览器访问 qige.io 网站,用 Wireshark 抓包(可用http 过滤再加上 Follow TCP Stream),不要立即停止 Wireshark 捕获,待页面显示完毕后再多等一段时间以将释放连接的包捕获。
3、请在你捕获的包中找到 HTTP 应答包,查看应答的代码是什么,如:200, 304, 404 等。并仔细了解应答的头部有哪些字段及其意义。(应答代码是200)
这里我们访问的是其他网站。
建议:
HTTP 请求和应答的头部字段值得大家认真的学习,因为基于 Web 的编程中我们将会大量使用。如:将用户认证的令牌信息放到头部,或者把 cookie 放到头部等。
问题:
刷新一次 qige.io 网站的页面同时进行抓包,你会发现不少的 304 代码的应答,这是所请求的对象没有更改的意思,让浏览器使用本地缓存的内容即可。那么服务器为什么会回答 304 应答而不是常见的 200 应答?
答:浏览器和服务器有一个协商的过程,服务器告诉浏览器当前请求的资源上一次修改的时间是这个时间。浏览器第二次发送请求的时候,告诉浏览器我上次请求的资源现在还在自己的缓存中,如果你那边这个资源还没有修改,就可以不用传送应答体给我了。服务器根据浏览器传来的时间发现和当前请求资源的修改时间一致,就应答304,表示不传应答体了,从缓存里取。