网络问题

0.0.0.0, 127.0.0.1, 127.0.0.2, 本机IP四者区别:

环回的特征是数据包不经过IP层以下的协议栈,直接被拷贝到环回地址socket的缓冲区中

首先假设本机有多个网卡:eth0 :192.168.0.1 eth1:192.168.1.1 lo: 127.0.0.1

1. 监听0.0.0.0创建Socket,那么无论使用127.0.0.1或127.0.0.2或本机ip都可以建立tcp连接,也就是不论通过127.0.0.1或127.0.0.2或192.168.0.1、192.168.1.1都能连接成功。
0.0.0.0建立tcp连接的时候也可以通过绑定IP_ADDR_ANY来实现。

2. 但是监听127.0.0.1,创建Socket,那么用本机地址或127.0.0.2建立tcp连接不成功,反过来也是如此;也就是,监听时采用的地址为192.168.0.1,就只能用192.168.0.1进行连接。IP层会过滤掉不同的IP。

3. 监听localhost? localhost是个域名,性质跟 “www.baidu.com” 差不多。不能直接绑定套接字,必须先gethostbyname转成IP才能绑定

794983-20190910115435850-1764312641.png
那么问题来了,还回地址必须是127.0.0.1么?

答案:不是必须!IPv4 的环回地址是保留地址之一 127.0.0.1。尽管只使用 127.0.0.1 这一个地址,但地址 127.0.0.0 到 127.255.255.255 均予以保留。此地址块中的任何地址都将环回到本地主机中。此地址块中的任何地址都绝不会出现在任何网络中。
可以做一个简单的测试,用ssh root@127.2.3.4 然后登录看看是不是还是本机?不用修改ip,随意一个此范围内长度ip地址均可以ping通,并且通过ssh登录到本机。
如下图,lo地址为127.0.0.1,netmask为255.0.0.0,所有与netmask掩码运算的结果 = inet & netmask都被视为环回地址。
794983-20190910151658934-492118336.png

环回的特征是数据包不经过IP层以下的协议栈,直接被拷贝到环回地址socket的缓冲区中

794983-20190910114514183-1788621587.png

ip输出函数先检查地址是不是环回地址
1.如果是环回地址 直接交给环回驱动程序处理 返回ip输入函数
2.如果不是环回地址 检查是不是广播或者多播地址。如果是广播地址或者组播地址数据报复制一份传给环回接口。然后在送到以太网上,因为广播和多播包含主机本身
3.如果不是广播或者多播地址 再检查是不是本机地址 如果是本机地址 则交给环回驱动程序处理,环回驱动程序返回给ip输入函数
从上面可以看出 ping127.0.0.1 数据包是不经过网卡的, ping本机则是需要经过网卡的

所以,
1.ping 127.0.0.1是检查TCP/IP协议栈是否正常。
2.ping 本地IP 是检查你网卡、配置是否正常。

转载于:https://www.cnblogs.com/dirge/p/11496614.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值