127.0.0.1和localhost和本机IP三者的区别

背景描述:
pc 端与读写器通过网口连接,使用socket 协议传输数据
pc端设置端口,启动server ,读写器是client端
在本机测试

发现server端,socket.bind 绑定的IP,当传入的参数值为127.0.0.1与192.168.x.x时,
对方client 端必须严格按照对应的IP与port 来连接。

另外是获取socket连接到IP与port
从endPoint 转为 IPEndPoint

var ep = _client.Client.RemoveEndPoint as IPEndPoint;
if (ep != null)
{
    Console.WriteLine("Address: {0}", ep.Address);
    Console.WriteLine("Port: {0}", ep.Port);
}

来看一下
127.0.0.1和localhost和本机IP三者的区别

localhost 数据传输
在这里插入图片描述

127.0.0.1 (有IP,只到网络层IP走网卡,不到链路层MAC)

一般设置程序时本地服务用localhost是最好的,localhost不会解析成ip,也不会占用网卡、网络资源。

1)问题1:127.0.0.1 本机网络 IO 需要经过网卡吗?
不需要经过网卡。即使了把网卡拔了本机网络还是可以正常使用。

2)问题2:数据包在内核中是个什么走向,和外网发送相比流程上有啥差别?

总的来说,本机网络 IO 和跨机 IO 比较起来,确实是节约了一些开销。发送数据不需要进 RingBuffer 的驱动队列,直接把 skb 传给接收协议栈(经过软中断)。

但是在内核其它组件上可是一点都没少:系统调用、协议栈(传输层、网络层等)、网络设备子系统、邻居子系统整个走了一个遍。连“驱动”程序都走了(虽然对于回环设备来说只是一个纯软件的虚拟出来的东东)。所以即使是本机网络 IO,也别误以为没啥开销。

3)问题3:使用 127.0.0.1 能比 192.168.x 更快吗?

先说结论:我认为这两种使用方法在性能上没有啥差别。

我觉得有相当大一部分人都会认为访问本机 Server 的话,用 127.0.0.1 更快。原因是直觉上认为访问 IP 就会经过网卡。

其实内核知道本机上所有的 IP,只要发现目的地址是本机 IP 就可以全走 loopback 回环设备了。本机其它 IP 和 127.0.0.1 一样,也是不用过物理网卡的,所以访问它们性能开销基本一样!

参考1
参考2

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值