0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

电脑怎么知道自己的IP地址的?

小林coding 来源:八股文网站 作者:八股文网站 2022-11-04 14:21 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

今天这篇文章,很有意思,它来源于我曾经的一次真实面试里的其中一个小问题。

当时是终面,面我的是那家公司的技术顾问,在面试前hr还让我看了他的履历,是一位1996年就进了麻省理工计算机系的大佬。

属实有被震惊到,什么概念?1996年,没记错的话那是个用BP机和大哥大的年代?有几个人能用上电脑?又有几个人有这种机会能出国深造。

这是哪部爽文小说的主人公剧情?

就算放到现在,这也是非常强的事情。

我这辈子是没希望了,也不知道我的儿子或者孙子辈有没有机会能做到。

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

那一天,我感受到了,那种跨越时代的碾压感。

好了,不讲骚话了,直接开始主题吧。

我们知道,如果你知道某台电脑的IP,就可以向这个IP发起连接请求,建立连接后就可以操作收发数据。

8f781cfe-5c05-11ed-a3b6-dac502259ad0.png

五层网络协议对应的消息体变化分析

要发送的数据,会在网络层里加入IP头。

8f8ae28a-5c05-11ed-a3b6-dac502259ad0.png

ip报头

这里面最重要的是发送端和接收端的IP地址。这个IP地址就像是一个门牌号一样,有了它,数据包就能在这个纷繁复杂的网络世界里找到该由谁来接收这个数据包。

所以说上面的网络通信离不开IP。

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

然后就可以开始用它上网了。

那么问题来了。

刚插上网线,电脑怎么知道自己的IP是什么?怎么就突然能上网了呢?

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

DHCP是什么

插上网线之后,获得IP的方式主要有两种。

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

8f9e6800-5c05-11ed-a3b6-dac502259ad0.png

手动配IP

这就很不科学了,电脑又不只是卖给程序员,这几个词对于大部分普通人来说,比赋能抓手闭环这种黑话还要难理解。

大部分人没事都不应该去配这玩意。

有没有办法可以让这些IP信息自动获得?

有,这就是第二种获取IP的方式,DHCP(DynamicHostConfigurationProtocol,动态主机配置协议)。

8fb24a46-5c05-11ed-a3b6-dac502259ad0.png

DHCP自动生成IP

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

DHCP的工作原理

DHCP的工作原理也非常简单。

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

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

8fcd5dd6-5c05-11ed-a3b6-dac502259ad0.png

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流程。

sudoipconfigseten0DHCP

en0可以替换成其他网卡,比如eth0啥的。

这时候就可以抓到相关的数据包。

8fe9903c-5c05-11ed-a3b6-dac502259ad0.png

我们可以看到蓝色的四个数据包,分别对应上面提到的四个DHCP阶段。

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

8ffca3a2-5c05-11ed-a3b6-dac502259ad0.png

offer阶段

另外,通过抓包,我们可以发现DHCP是应用层的协议,基于传输层UDP协议进行数据传输。

9013b678-5c05-11ed-a3b6-dac502259ad0.png

那么问题又来了。

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

按道理说,UDP能做到的,TCP一般也能做到。但这次真不行。

主要原因还是因为TCP是面向连接的,而UDP是无连接的。

所谓"连接",他就只有一个发送端和一个接收端,就跟水管一样。

而DHCP由于一开始并不知道要跟谁建立连接,所以只能通过广播的形式发送消息,注意,小细节,广播。

902a09f0-5c05-11ed-a3b6-dac502259ad0.png

广播寻找DHCP服务器.drawio

同样是在本地网段内发广播消息,UDP只需要发给255.255.255.255。它实际上并不是值某个具体的机器,而是一个特殊地址,这个地址有特殊含义,只要设了这个目的地址,就会在一定本地网段内进行广播。

而TCP却不同,它需要先建立连接,但实际上255.255.255.255对应的机器并不存在,因此也不能建立连接。如果同样要做到广播的效果,就需要先得到本地网段内所有机器的IP,然后挨个建立连接,再挨个发消息。这就很低效了。

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

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

903a281c-5c05-11ed-a3b6-dac502259ad0.png

另外一个小细节不知道大家注意到没,上面在提到 DHCP Offer 阶段时,提到的是DHCP服务器会使用广播的形式回复。但抓个包下来却发现并不是广播,而是单播。

其实,这是DHCP协议的一个小优化。原则上大家在DHCP offer阶段,都用广播,那肯定是最稳的,目标机器收到后自然就会进入第三阶段DHCP Request。而非目标机器,收到后解包后发现目的机器的mac地址跟自己的不同,也会丢掉这个包。

但是问题就出在,这个非目的机器需要每次都在网卡收到包,并解完包,才发现原来这不是给它的消息,这。。。真,有被打扰到。

如果本地网段内这样的包满天飞,也浪费机器性能。

如果能用单播,那当然是最好的。但这时候目的机器其实并没有IP地址,有些系统在这种情况下能收单播包,有些则认为不能收,这个跟系统的实现有关。因此,对于能收单播包的系统,会在发DHCP Discover阶段设一个Broadcast flag = 0 (unicast)的标志位,告诉服务器,支持单播回复,于是服务器就会在DHCP Offer阶段以单播的形式进行回复。

90519bbe-5c05-11ed-a3b6-dac502259ad0.png

Discover要求使用单播回复

是不是每次联网都要经历DHCP四个阶段?

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

但大家也发现了,DHCP第一阶段和第二阶段都可能会发广播消息。对于家用电脑还好,插个网线,之后就雷打不动。但像手机这样的移动设备,是要带着到处跑的,坐个地铁,进个电梯,公司里到处走走,都可能会涉及到网络切换。

这每次都要来一个完整的四阶段,各种广播消息满天飞,其实对网络环境不太友好。

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

当然不需要。

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

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

9063fe58-5c05-11ed-a3b6-dac502259ad0.png

其实只发生了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消息。

907b2fba-5c05-11ed-a3b6-dac502259ad0.png

大家知道ARP消息的目的是通过IP地址去获得mac地址。所以普通的ARP消息里,是填了IP地址,不填mac地址的。

但这三条ARP协议,比较特殊,它们叫无偿ARP(Gratuitous ARP),特点是它会把IP和mac地址都填好了,而且填的还是自己的IP和mac地址。

目的有两个。

一个是为了告诉本地网段内所有机子,从现在起,xx IP地址属于xx mac地址,让大家记录在ARP缓存中。

另一个就是看下本地网段里有没有其他机子也用了这个IP,如果有冲突的话,那需要重新再走一次DHCP流程。

在三次无偿ARP消息之后,确认没有冲突了,才会开始使用这个IP地址进行通信。

总结

电脑插上网线,联网后会通过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服务器一定在这个局域网里吗?

90931076-5c05-11ed-a3b6-dac502259ad0.png

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • IP
    IP
    +关注

    关注

    5

    文章

    1849

    浏览量

    154920
  • 数据包
    +关注

    关注

    0

    文章

    269

    浏览量

    25425

原文标题:你不好奇刚插上网线,电脑怎么知道自己的 IP 地址的?

文章出处:【微信号:小林coding,微信公众号:小林coding】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    IP地址冲突导致德国站群服务器断网的解决方法?

    在网络管理中,IP地址冲突是一个常见且令人头疼的问题。尤其是对于依赖站群服务器进行大规模网络操作的企业而言,IP冲突可能会导致整个服务器群组无法正常工作,从而造成严重的业务中断。本文将探讨如何解决因
    的头像 发表于 08-12 15:47 590次阅读

    CNC的IP地址相同冲突如何解决?

    在网络世界中,每个设备都需要一个独特的标识来确保信息的准确传输,这个标识就是IP地址。然而,在CNC(数控机床)生产车间中,由于存在多个品牌、不同型号的设备,且这些设备在出厂测试时往往会被配备相同
    的头像 发表于 07-23 14:13 443次阅读
    CNC的<b class='flag-5'>IP</b><b class='flag-5'>地址</b>相同冲突如何解决?

    从零开始学IP地址

    IP地址是一种网络编码,用来唯一标识网络中的设备,以确保主机间正常通信。IP地址由32位二进制(32-bit)组成。
    的头像 发表于 07-08 09:29 1412次阅读
    从零开始学<b class='flag-5'>IP</b><b class='flag-5'>地址</b>

    自己搭建达龙云电脑自己搭建达龙云电脑的详细操作步骤

    随着移动互联网的快速发展,人们对计算设备的便携性和灵活性提出了更高的要求。云电脑以其独特的云架构,为用户提供了全新的使用体验。今天就为大家介绍自己搭建达龙云电脑的详细操作步骤。    搭建自己
    的头像 发表于 01-16 10:42 978次阅读
    <b class='flag-5'>自己</b>搭建达龙云<b class='flag-5'>电脑</b>,<b class='flag-5'>自己</b>搭建达龙云<b class='flag-5'>电脑</b>的详细操作步骤

    自己电脑搭建云主机,自己电脑如何搭建云主机?

      如今,服务器远程连接技术正逐渐成为行业的新宠,它代表着服务器管理领域向高效化、智能化迈进的发展趋势。本文将带你剖析自己电脑如何搭建云主机。 自己电脑搭建云主机是一种经济实惠且具有可
    的头像 发表于 01-06 09:55 1449次阅读
    <b class='flag-5'>自己</b><b class='flag-5'>电脑</b>搭建云主机,<b class='flag-5'>自己</b><b class='flag-5'>电脑</b>如何搭建云主机?

    ISP与IP地址

    ISP可以为用户提供互联网接入、信息内容、应用服务以及其他增值业务。 要知道,在ISP的网络中,IP地址池几乎可以说不可或缺。IP地址池是指
    的头像 发表于 12-27 10:41 919次阅读

    怎么自己搭建云电脑,怎么自己搭建云电脑的教程,云电脑是什么呢以及怎么链接

    探索怎么自己搭建云电脑的教程。    怎么自己搭建云电脑的教程:    找台性能尚可的电脑作为基础,安装服务器级操作系统,如WindowsS
    的头像 发表于 12-26 14:39 720次阅读
    怎么<b class='flag-5'>自己</b>搭建云<b class='flag-5'>电脑</b>,怎么<b class='flag-5'>自己</b>搭建云<b class='flag-5'>电脑</b>的教程,云<b class='flag-5'>电脑</b>是什么呢以及怎么链接

    CIDR的IP地址分配与管理

    和路由聚合方法。 CIDR摒弃了传统的基于类的IP地址分配方式,采用的是可变长子网掩码技术的扩展。 假设一个组织获得了一个 CIDR 地址块,如10.0.0.0/16。它可以根据自己
    的头像 发表于 12-26 10:01 945次阅读

    IP地址数据信息和爬虫拦截的关联

    IP地址数据信息和爬虫拦截的关联主要涉及到两方面的内容,也就是数据信息和爬虫。IP 地址数据信息的内容丰富,包括所属地域、所属网络运营商、访问时间序列、访问频率等。 从
    的头像 发表于 12-23 10:13 678次阅读

    IP地址伪造和反伪造技术

    IP地址伪造简而言之就是网络攻击的一种手段。攻击者通过伪装成合法的IP地址,绕过访问控制、进行恶意攻击或窃取敏感信息。 IP
    的头像 发表于 12-20 10:12 983次阅读

    云计算环境下的IP地址分配方式

    之前我们聊过在计算机环境下IP地址的分配方式,但在云计算环境下,IP地址的分配方式更加灵活,可以根据实际需求进行配置,用来满足不同企业和应用的需求。 在云计算环境中,
    的头像 发表于 12-19 14:02 845次阅读

    NAT技术为什么会对IP地址查询造成干扰

    利用价值。但是有一些技术会对IP地址查询造成干扰,今天就来聊一聊NAT技术。 ·NAT技术究竟是什么呢? 简单来说,它让局域网里的多台电脑可以共用一个或几个外网IP上网。当局域网里的
    的头像 发表于 12-18 10:36 838次阅读
    NAT技术为什么会对<b class='flag-5'>IP</b><b class='flag-5'>地址</b>查询造成干扰

    IP地址如何实现数据传输与路由

    IP地址查询定位:https://www.ipdatacloud.com/?utm-source=WZJ&utm-keyword=?2826 IP 地址如何实现数据传输与路由这个问题主
    的头像 发表于 12-17 09:39 689次阅读

    通过安卓手机查找IP地址步骤

    我们在使用安卓手机的时候,可以在设备上通过一些方法来查到IP地址,而IP地址也分为公网IP地址
    的头像 发表于 12-12 13:53 4516次阅读
    通过安卓手机查找<b class='flag-5'>IP</b><b class='flag-5'>地址</b>步骤

    如何在Linux系统上设置站群服务器IP地址

    在Linux系统上设置站群服务器的IP地址,可以通过以下步骤进行,主机推荐小编为您整理发布如何在Linux系统上设置站群服务器IP地址
    的头像 发表于 12-11 10:05 863次阅读