刚插上网线,电脑怎么知道自己的IP是什么?

1个月前 (11-18 15:15)阅读2回复0
niannian
niannian
  • 总版主
  • 注册排名10
  • 经验值80195
  • 级别网站编辑
  • 主题16039
  • 回复0
楼主

存眷

“脚本之家

”,与百万开发者在一路

做者 | 小白

出品 | 小白debug(ID:xiaobaidebug)

已获得原公家号的受权转载

今天那篇文章,很有意思,它来源于我曾经的一次实在面试里的此中一个小问题。其时是末面,面我的是那家公司的手艺参谋,在面试前hr还让我看了他的履历,是一位1996年就进了麻省理工计算机系的大佬。

失实有被震惊到,什么概念?1996年,没记错的话那是个用 BP机和大哥大的年代?有几小我能用上电脑?又有几小我有那种时机能出国进修。

那是哪部 爽文小说的仆人公剧情?

就算放到如今,那也长短常强的工作。

我那辈子是没希望了,也不晓得我的儿子或者孙子辈有没有时机能做到。

也就是说,那位大佬,至少 领先了我两代人。

那一天,我感触感染到了,那种逾越时代的碾压感。

好了,间接起头主题吧。

我们晓得,若是你晓得某台电脑的IP,就能够向那个IP倡议毗连恳求,成立毗连后就能够操做收发数据。

展开全文

五层收集协议对应的动静体改变阐发

要发送的数据,会在收集层里参加 IP头。

ip报头

那里面最重要的是 发送端和领受端的IP地址。那个IP地址就像是一个门商标一样,有了它,数据包就能在那个纷繁复杂的收集世界里找到该由谁来领受那个数据包。

所以说上面的收集通信离不开IP。

假设我有一台新买的电脑, 还没联网呢,那时候拿着新买的网线,插入网线口,网线插口亮起来了。

然后就能够起头用它上彀了。

那么问题来了。

刚插上彀线,电脑怎么晓得本身的IP是什么?怎么就突然能上彀了呢?

那个话题,我们从 DHCP聊起吧。

DHCP是什么

插上彀线之后,获得IP的体例次要有两种。

第一种是,本身 手动在电脑里配。像下图那样,是macOS的一个截图,在选择 手动设置装备摆设之后,除了 IP地址还需要配上 子网掩码和 路由器的地址。

手动配IP

那就很不科学了,电脑又不但是卖给法式员,那几个词关于大部门通俗人来说,比 赋能抓手闭环那种黑话还要难理解。

大部门人没事都不该该去配那玩意。

有没有办法能够让那些IP信息主动获得?

有,那就是 第二种获取IP的体例, DHCP( Dynamic Host Configuration Protocol, 动态主机设置装备摆设协议)。

DHCP主动生成IP

通过DHCP,在联网之后能够主动获取到本机需要的 IP地址,子网掩码还有路由器地址。

DHCP的工做原理

DHCP的工做原理也十分简单。

说白了,就是向某个 管IP分配的办事器,也就是 DHCP办事器,申请IP地址。其实一般家里用的路由器就自带那个功用。

整个操做流程分为 4个阶段。

DHCP协议

DHCP Discover: 在联网时,本机因为没有IP,也不晓得DHCP办事器的IP地址是几,所以底子不晓得该向谁倡议恳求,于是索性选择 播送 ,向当地网段内所有人发出动静,询问" 谁能给个IP用用 "。

DHCP Offer: 不是DHCP办事器的机子会忽略你的播送动静,而DHCP办事器收到动静后,会在本身敬服的一个IP池里拿出一个闲暇IP,通过 播送 的形式给回你的电脑。

DHCP Request: 你的电脑在拿到IP后,再次倡议 播送 ,就说"那个IP我要了"。

DHCP ACK: DHCP办事器此时再回复你一个ACK,意思是"ok的"。你就正式获得那个IP在 一段时间(好比24小时) 里的利用权了。后续 只要IP租约不外期 ,就能够不断用那个IP停止通信了。

到那里,问题来了

为什么要有第三和第四阶段

各人有没有发现, 在Offer阶段,其实你的机子就已经拿到了IP了,为什么还要有后面的Request和ACK呢?是不是有些多此一举?

那是因为当地网段内,可能有 不行一台DHCP办事器,在你播送之后,每个DHCP办事器都有可能给你发Offer。

本着先到先得的原则,你的机子一般会对第一个到的Offer响应DHCP Request,目标是为了确认offer,在你确认Offer那段时间内,DHCP办事器确认那个IP还没被分进来,你才能够放心利用那个IP。

像不像你找工做的过程?

你海投简历( DHCP Discover),然后拿到了多个offer( DHCP Offer)。

那时候工作还没完,你一般会跟HR说:" 你给我两天时间,我要跟家里人筹议下"。

HR也会对你说:" 那你尽快确认,我那边还有很多候选人等着"。

之后你考虑下来觉得不错,跟HR说要接那个Offer( DHCP Request),HR看了下那个 岗位还在,才气确认让你第二天来上班( DHCP ACK)。若是那个公司的岗位已经招到其他候选人了,第四阶段的动静就会改为发 DHCP NAK,意思是回绝了你的接Offer恳求。

DHCP抓包

光看原理是有些枯燥,我们能够测验考试下抓包看下数据。

在号令行里施行下面的号令,能够强行让电脑的 en0 网卡从头走一遍DHCP流程。

sudo ipconfig set en0 DHCP

en0能够替代成其他网卡,好比eth0啥的。

en0能够替代成其他网卡,好比eth0啥的。

那时候就能够抓到相关的数据包。

我们能够看到蓝色的四个数据包,别离对应上面提到的四个DHCP阶段。

此中第二阶段中的DHCP Offer里会返回给我们需要的 IP、子网掩码、路由器地址以及DNS办事器地址。

offer阶段

别的,通过抓包,我们能够发现DHCP是应用层的协议, 基于传输层UDP协议停止数据传输。

那么问题又来了。

为什么DHCP用UDP,能不克不及改用TCP?

按事理说,UDP能做到的,TCP一般也能做到。但 此次实不可。

次要原因仍是因为 TCP是面向毗连的,而UDP是无毗连的。

所谓"毗连",他就只要一个发送端和一个领受端,就跟水管一样。

而DHCP因为一起头其实不晓得要跟谁成立毗连,所以只能通过播送的形式发送动静,留意,小细节, 播送。

播送寻找DHCP办事器.drawio

同样是在当地网段内发播送动静,UDP只需要发给 255.255.255.255 。 它现实上并非值某个详细的机器,而是一个特殊地址,那个地址有特殊含义,只要设了那个目标地址,就会在必然当地网段内停止 播送。

而TCP却差别,它需要先成立毗连,但现实上 255.255.255.255 对应的机器其实不存在,因而也不克不及成立毗连。若是同样要做到播送的效果,就需要先得到当地网段内所有机器的IP,然后 挨个成立毗连,再挨个发动静。那就很低效了。

因而DHCP选择了UDP,而不是TCP。

为什么第二阶段不是播送,而是单播。

别的一个小细节不晓得各人留意到没,上面在提到 DHCP Offer 阶段时,提到的是DHCP办事器会 利用播送的形式回复。但抓个包下来却 发现并非播送,而是单播。

其实,那是DHCP协议的一个 小优化。原则上各人在DHCP offer阶段,都用播送,那必定是最稳的, 目的机器收到后天然就会进入第三阶段DHCP Request。而 非目的机器,收到后解包后发现目标机器的mac地址跟本身的差别,也会丢掉那个包。

但是问题就出在,那个非目标机器需要每次都在网卡 收到包,并解完包,才发现本来那不是给它的动静,那。。。实, 有被打搅到。

若是当地网段内如许的包满天飞,也浪费机器性能。

若是能用单播,那当然是更好的。但那时候目标机器其实并没有IP地址,有些系统在那种情状下能收单播包,有些则认为不克不及收,那个跟系统的实现有关。因而,关于能收单播包的系统,会在发 DHCP Discover阶段设一个 Broadcast flag = 0 (unicast)的标记位,告诉办事器,撑持单播回复,于是办事器就会在 DHCP Offer阶段以单播的形式停止回复。

Discover要求利用单播回复 是不是每次联网都要履历DHCP四个阶段?

只要想联网,就需要IP,要用IP,就得走DHCP协议去分配。

但各人也发现了,DHCP第一阶段和第二阶段都可能会发 播送动静。关于家用电脑还好,插个网线,之后就雷打不动。但像手机如许的 挪动设备,是要带着四处跑的,坐个地铁,进个电梯,公司里四处走走,都可能会涉及到收集切换。

那每次都要来一个完好的四阶段,各类播送动静满天飞,其实对收集情况不太友好。

于是问题叒来了, 是不是每次联网都要履历DHCP四个阶段?

当然不需要。

我们会发现每次断开wifi再翻开wifi时,机子会履历一个 从没网到有网的过程。

那时候去抓个包,会发现。

其实只发作了DHCP的第三和第四阶段。那是因为机子笔录了曾经利用过 192.168.31.170 那个IP,从头联网后,会优先再次恳求那个IP,如许就省下了第一第二阶段的播送了。

别的需要留意的是,抓包图里 DHCP Request 之所以呈现两次,是因为 第一次Request发出后太久没得到回应,因而重发。

DHCP分配下来的IP必然不会反复吗?

一般来说DHCP办事器会在它敬服的IP池里找到一个没人用的IP分配给机子,

那个IP若是反复分配了,那当地网段内就会呈现两个 同样的IP,那个IP下面却对应两个 差别的mac地址。但其他机器上的 ARP缓存中却只会笔录此中一条 mac地址到IP的映射关系。

于是,数据在传递的过程中就会出错。

因而当地网段内IP必需独一。

那么DHCP分配下来的IP有没有可能跟此外IP是反复的?

都那么问了,那必定是可能的。

有两个常见的情状会呈现 IP反复。

文章开头提到,IP是能够本身手动配的,本身配的IP是有可能跟其他DHCP分配下来的IP是不异的。处理计划也很简单,尽量不要手动去配IP,同一走DHCP。或者在DHCP办事器里敬服的IP范畴里,将那条IP剔除。

一个当地网段内,是能够有多个DHCP办事器的,而他们敬服的 IP地址范畴是有可能堆叠的 ,于是就有可能将不异的IP给到差别的机子。处理计划也很简单,修改两台DHCP办事器的敬服的IP地址范畴,让它们不堆叠就行了。

不外吧,上面的处理计划,都需要有权限去修改 DHCP办事器。

得到 DHCP ACK之后立马就能利用那个IP了吗?

那就仿佛在问,拿到offer之后你是第一时间就去上班吗?

不。

你会先告诉你的同事同窗伴侣,以至会发伴侣圈。

你的机子也一样。

在得到 DHCP ACK之后,机子不会立即就用那个IP。

而是会先发 三条ARP动静。

各人晓得 ARP动静的目标是通过IP地址去获得mac地址。所以 通俗的ARP动静里,是填了IP地址,不填mac地址的。

但那三条ARP协议,比力特殊,它们叫 无偿ARP( Gratuitous ARP ),特点是它会把 IP和mac地址都填好了,并且 填的仍是本身的IP和mac地址。

目标有两个。

一个是为了告诉当地网段内所有机子,从如今起,xx IP地址属于xx mac地址,让各人笔录在ARP缓存中。

另一个就是看下当地网段里有没有其他机子也用了那个IP,若是有抵触的话,那需要从头再走一次DHCP流程。

在三次无偿ARP动静之后,确认没有抵触了,才会起头利用那个IP地址停止通信。

那种行为,现实上就跟你拿了offer之后 发了那么个伴侣圈没啥区别。

并且, 还连发了三条。

别骂了,图是P的,我没那么发过

秀offer,offer抵触了不成怕。秀对象秀抵触了才可怕。

若是你伴侣圈里有那种人,容许我, 删了吧。

总结

电脑插上彀线,联网后会通过DHCP协议动态申请一个IP,同时获得子网掩码,路由器地址等信息。

DHCP分为四个阶段,别离是 Discover,Offer, Request和ACK。若是曾经连过那个网,机器会笔录你前次利用的IP,再次毗连时优先利用本来的阿谁IP,因而只需要履历第三第四阶段。

DHCP是应用层协议,考虑到需要撑持播送功用,底层利用的是UDP协议,而不是TCP协议。

DHCP分配下来的IP是有可能跟某台手动设置装备摆设的IP地址反复的。

DHCP得到IP之后还会发3次无偿ARP布告,在确认没有抵触后起头利用那个IP。

最初给各人留个问题吧。我们上面的IP都是从DHCP办事器上申请的,在办事器返回DHCP Offer的时候,能够看到上面写了DHCP办事器的IP。好比 192.168.31.1 ,那明显是个局域网内的IP,但那能阐明,你的DHCP办事器必然在那个局域网里吗?

参考材料

《图解TCPIP》

END

全年不限次数用!

【☝🏼点击查看更多详情】

专属定造,法式员秒懂的极客卫衣!

当一个法式员疯狂敲键盘时,他到底在干嘛?

若是让你来设想收集

学完计算机收集物理层,便宜一根网线可还行?

转行的35岁法式员们

Office 2019/2021专业加强版,正版末身受权!

0
回帖

刚插上网线,电脑怎么知道自己的IP是什么? 期待您的回复!

取消
载入表情清单……
载入颜色清单……
插入网络图片

取消确定

图片上传中
编辑器信息
提示信息