《趣谈网络协议》课后思考题

1、MAC地址可以修改吗?

MAC地址是什么?

  • MAC(Media Access Control,介质访问控制)地址,也叫硬件地址,长度是48比特(6字节),由16进制的数字组成,分为前24位和后24位。
  • 前24位叫作组织唯一标志符(Organizationally Unique Identifer,OUI),是由IEEE的注册管理机构给不同厂家分配的代码,用于区分不同的厂家。后24位是厂家自己分配的, 称为扩展标识符。同一个厂家生产的网卡中MAC地址后24位是不同的。

可以修改吗?

本来设计唯一,后来设备变多,还出现了虚拟网卡,所以然后逻辑上可以修改,但至少保证一个局域网唯一,以便在没有IP地址的情况,先用MAC地址进行通信,获得IP地址。

  • 也就是说,MAC本来设计为唯一性的,但是后来设备越来越多,而且还有虚拟化的设备和网卡,有很多工具可以修改,就很难保证不冲突了。但是至少应该保持一个局域网内是唯一 的。
  • MAC的设计,使得即便不能保证绝对唯一,但是能保证一个局域网内出现冲突的概率很小。这样,一台机器启动的时候,就能够在没有IP地址的情况下,先用MAC地址进行通信,获 得IP地址。
  • 好在MAC地址是工作在一个局域网中的,因而即便出现了冲突,网络工程师也能够在自己的范围内很快定位并解决这个问题。这就像我们生成UUID或者哈希值,大部分情况下是不 会冲突的,但是如果碰巧出现冲突了,采取一定的机制解决冲突就好。

2、当网络包到达一个城关的时候,可以通过路由表得到下一个城关的 IP 地址,直接通过 IP地址找就可以了,为什么还要通过本地的MAC地址呢?

原因一:只要是在网络上跑的包,都是完整的。可以有下层没上层,绝对不可能有上层没下层

原因二:在网络包里,有源IP地址和目标IP地址、源MAC地址和目标MAC地址。从路由表中取得下一跳的IP地址后,应该把这个地址放在哪里呢?如果放在目标IP地址里面,到了城关,谁知道最终的目标在哪里呢?所以要用MAC地址。

补充:所谓的下一跳,看起来是IP地址,其实是要通过ARP得到MAC地址,将下一跳的MAC地址放在目标MAC地址里面。

3、反过来为什么不直接使用MAC地址进行通信?

由于全世界存在着各式各样的网络,它们使用不同的硬件地址。要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,所以维护一个庞大的MAC地址映射表因此几乎是不可能的事。

4、IP地址 和MAC地址的关系

  • IP和设备并不总是对应的。局域网内IP地址是动态分配的,如果我下线了分给我的IP地址就会分配给另一台电脑,通信就产生了问题
  • MAC地址和设备是一一对应的且全球唯一。所以局域网使用MAC地址通信没有问题
  • IP 是地址,有定位功能;MAC 是身份证,无定位功能

5、怎么查看 IP 地址吗?

在 Windows 上是 ipconfig,在 Linux 上是 ifconfig 和 ip addr

6、ifconfig 和 ip addr 的区别?

这是一个有关 net-tools iproute2 的“历史”故事。

net-tools起源于BSD,自2001年起,Linux社区已经对其停止维护,而iproute2旨在取代net  -tools,并提供了一些新功能。一些Linux发行版已经停止支持net-tools,只支持iproute2。  net-tools通过procfs(/proc)ioctl系统调用去访问和改变内核网络配置,而iproute2则通过 netlink套接字接口与内核通讯。  net-tools中工具的名字比较杂乱,而iproute2则相对整齐和直观,基本是ip命令加后面的子 命令。 虽然取代意图很明显,但是这么多年过去了,net-tool依然还在被广泛使用,最好还是两套命令都掌握吧。

7、在DHCP网络里面,手动配置IP地址会冲突吗?

会出现冲突

在一个DHCP网络里面,如果某一台机器手动配置了一个IP地址,并且在DHCP管理的网段里的话,DHCP服务器是会将这个地址分配给其他机器的。一旦分配了,ARP的时候,就会 收到两个应答,IP地址就冲突了。

怎么解决?
DHCP的过程虽然没有明确如何处理,但是DHCP的客户端和服务器都可以添加相应的机制来检测冲突。

如果由客户端来检测冲突,一般情况是,客户端在接受分配的IP之前,先发送一个ARP,看是否有应答,有就说明冲突了,于是发送一个DHCPDECLINE,放弃这个IP地址。

如果由服务器来检测冲突,DHCP服务器会发送ping,来看某个IP是否已经被使用。如果被使用了,它就不再将这个IP分配给其他的客户端了。

8、DHCP的Offer和ACK应该是单播还是广播呢?

先看看网络设备的状态标识(net_device flags), < BROADCAST,MULTICAST,UP,LOWER_UP >

  • BROADCAST 表示这个网卡有广播地址,可以发送广播包;
  • MULTICAST 表示网卡可以发送多播包;
  • UP 表示网卡处于启动的状态;
  • LOWER_UP 表示 L1 是启动的,也即网线插着呢

取决于BROADCAST设置的值

BROADCAST设为1,以广播的形式进行交互

BROADCAST设为0,以单播的形式进行交互

9、ARP 协议,即已知 IP 地址求 MAC;还有一种 RARP 协议,即已知 MAC 求 IP 的,你知道它可以用来干什么吗

无盘工作站,即没有硬盘的机器,无法持久化IP地址到本地,但有网卡,所以通过RARP协议来获取IP地址。

10、当发送的报文出问题的时候,会发送一个ICMP的差错报文来报告错误,但是如果 ICMP 的差错报文也出问题了呢?

不会导致产生ICMP差错报文的有

  • ICMP差错报文(ICMP查询报文可能会产生ICMP差错报文);
  • 目的地址是广播地址或多播地址的IP数据报;
  • 作为链路层广播的数据报;
  • 不是IP分片的第一片;
  • 源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地址或多播地址

11、什么是面向连接?

所谓的建立连接,是为了在客户端和服务端维护连接,而建立一定的数据结构来维护双方交互的状态,用这样的数据结构来保证所谓的面向连接的特性。

连接是一种状态即彼此可以感知到对方的存在,建立连接是维护一种状态,维护一种状态需要一定数据结构来完成

12、TCP重试有没有可能导致重复下单?

因为TCP层收到了重复包之后,TCP层自己会进行去重,发给应用层、HTTP层。还是一个唯一的下单请求,所以不会重复下单。

那什么时候会导致重复下单呢?

因为网络原因或者服务端错误,导致TCP连接断了,这样会重新发送应用层的请求,也即HTTP的请求会重新发送一遍。
如果服务端设计的是无状态的,它记不住上一次已经发送了一次请求。如果处理不好,就会导致重复下单,这就需要服务端除了实现无状态,还需要根据传过来的订单号实现幂等, 同一个订单只处理一次。
 

13、TCP层报平安,怎么确认浏览器收到呢?

TCP报平安,只能保证TCP层能够收到,不保证浏览器能够收到。

但是可以想象,如果浏览器是你写的一个程序,你也是通过socket编程写的,你是通过socket,建立一个TCP的连 接,然后从这个连接里面读取数据,读取的数据就是TCP层确认收到的。这个读取的动作是本地系统调用,大部分情况下不会失败的。如果读取失败呢,当然本地会报错,你的socket读取函数会返回错误,如果你是浏览器程序的实现者,你有两种选择, 一个是将错误报告给用户,另一个是重新发送一次请求,获取结果显示给用户。

待续

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值