【转】IP Socket知识

虽然不是每个人都要做网络工程师,但开发人员的日常工作中,没有哪个不曾接触IP,
我碰到过好多新手在IP上犯迷糊,总结一下。

IP地址的记法:
IP地址由四个字节构成,为了方便阅读和书写,每个字节用0-255的数字表示,字节之间用'.'分割,如:
10.10.152.235
有时候我们会看到这样的IP:
10.10.152.235/24,
后面的/24表示子网掩码,24表示子网掩码上有24个1,等价于255.255.255.0 。

IP地址和子网掩码按位 与,得到的是 网络号(Network ID),
剩余的部分是子网内的 主机号(host ID,当然,这个名字小有问题,因为现在有IP的可不仅仅是主机,暂且这么称呼吧),

特殊的IP地址段:
127.x.x.x
这是大家最熟悉不过的本地loopback地址,在windows和linux上等价于localhost。
我们习惯于使用127.0.0.1,实际上,
如果你在命令行下ping 127.0.0.1-127.255.255.254之间的任意地址,结果都是一样的,它们是等价的。

正常的网络包从ip层进入链路层,然后发送到网络上,
而发向loopback地址的包,直接在IP层短路了,也就是发到IP层的包直接被IP层接收了,不再向下发送。

私网地址段:
10.x.x.x、192.168.x.x、172.16.x.x~172.31.x.x、169.254.x.x
这些私网地址段是不允许出现在Internet上的,主用保留用于企业内部组网使用,
这可以在一定程度上缓解IP地址不够用的问题。
大型企业的OA网用10地址段的比较多,因为这是一个A类地址段,包含的IP很多。
小公司用192.168.0地址段的比较多。
而169.254则主要是分配给DHCP服务使用的。

保留地址段:
128.0.x.x、191.255.x.x、192.0.0.x、233.255.255.x
这些地址被保留起来,不做分配且没有明确的用途。

其它特殊IP:
255.255.255.255是全局广播地址,
主机号全部为1的地址是子网广播地址,如:192.168.1.255
主机号全部为0的地址是代表该子网的网络地址,如:192.168.1.0


一个非常特殊的IP:0.0.0.0
这个IP相当于java中的this,代表当前设备的IP。
我们在java编程中使用ServerSocket做网络侦听,通常只需要如下代码:

ServerSocket serverSock=new ServerSocket(8888);
serverSock.accept();

假如我的主机ip为:10.10.152.8,
用以上代码做侦听,127.0.0.1:8888或者10.10.152.8:8888都可以连上,
但大家有没有想过过,这个ServerSocket到底使用哪个IP在做侦听?

如果我们将以上代码改成显式绑定:

ServerSocket ss=new ServerSocket();
String ip
="10.10.152.8";
int port=8888;
InetSocketAddress addr
=new InetSocketAddress(ip,port);
ss.bind(addr);
ss.accept();



你会发现,127.0.0.1:8888是无法访问的,
而如果将ip改成127.0.0.1,那么10.10.152.8:8888是无法访问的。

实际上,背后的秘密就在与0.0.0.0这个IP,他可以代表本机的所有IP地址,
但这个IP并不是真是存在的,我们ping不通它,如果将ip改成0.0.0.0:  

ServerSocket ss=new ServerSocket();
String ip
="0.0.0.0";
int port=8888;
InetSocketAddress addr
=new InetSocketAddress(ip,port);
ss.bind(addr);
ss.accept();



我们会发现,这和默认行为是一样的,127.0.0.1:8888或者10.10.152.8:8888都可以连上。


---

网络方面实在不算精通,这是最近给手下的实习生解决跟IP相关问题的时候总结的,
有不足和遗漏之处,敬请专家们批评指正。

转载于:https://www.cnblogs.com/wsns/articles/1516100.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/363147.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

具有Akka反应流的反应队列

反应性流是最近宣布的一项计划,旨在在JVM上为具有内置背压的异步流处理创建标准。 该工作组由Typesafe,Red Hat,Oracle,Netflix等公司组成。 早期的实验性实现之一是基于Akka的 。 预览版0.3包括演员生产者和消费者,这…

灰盒测试—提高篇

灰盒测试是要运用一些开发知识的,大家都认为要去学习开发知识。网上很多论坛也有人说做测试之前,最好要有一、二年的开发经验就比较好。做为黑盒测试人员,如果会当然好,但是大部分黑盒测试人员是没有开发经验,这里我谈…

Django框架下报的版本问题

报错环境 python3.6.5,django2.2,PyMySQL0.9.3 …… django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3. 解决方法: Django连接MySQL时默认使用MySQLdb驱动,但MySQLdb不支持…

CSS选择器总结

选择器   优先级 实例ID选择器   100类选择器    10伪类选择器     10 :link :visited :focus :hover :actived :lang  UI元素状态伪类          E:enabled{}匹配所有用户界面&#xff08…

C# 实体转为json字符串

C# 实体转为json字符串 Catalog cata new Catalog(); cata.C_platformid 0; cata.C_isnav 0; cata.C_isvalid 1; string strJson JsonConvert.SerializeObject(cata); 转载于:https://www.cnblogs.com/woniucode/p/10684214.html

Gradle入门:简介

Gradle是一种构建工具,可以使用基于Groovy编程语言的内部DSL替换基于XML的构建脚本。 最近它吸引了很多关注,这就是为什么我决定仔细研究一下。 这篇博客文章是我的Gradle教程的第一部分,它有两个目标: 帮助我们安装Gradle 描…

JS中的间歇(周期)调用setInterval()与超时(延迟)调用setTimeout()相关总结

超时调用需要使用window.setTimeout(code,millisec)方法 它接受两个参数:要执行的代码和以毫秒表示的时间(即在执行代码前需要等待多少毫秒)。其中第一个参数可以是一个包含JS代码的字符串(就和在eval()函数中使用的字符串一样&a…

损失函数_分类

通常机器学习每一个算法中都会有一个目标函数,算法的求解过程是通过对这个目标函数优化的过程。 在分类或者回归问题中,通常使用损失函数(代价函数)作为其目标函数。 损失函数用来评价模型的预测值和真实值不一样的程度&#xff0…

首页回顾功能

公司要弄一个首页回顾的功能,可以查看以往某个时间的首页。程序每天自动在上午和下午分别抓取一个页面,生成地址为http://xxx.com/review/channel20090715am.html 的形式。 这个功能用到了jQuery UI 的 datepicker日历插件,但是主要的还是通过…

多表关联更新字段

update jdjc_cy gset g.ypmc(select w.cymc from jdjc_spjdcy w where w.cydzjg.zj) where g.cydh020-JLSP14001转载于:https://www.cnblogs.com/zhuyeshen/p/10685220.html

使对易失性字段的操作原子化

总览 易失字段的预期行为是,它们在多线程应用程序中的行为应与在单线程应用程序中的行为相同。 禁止它们表现相同的方式,但不能保证它们表现相同的方式。 Java 5.0中的解决方案是使用AtomicXxxx类,但是这些类在内存(它们添加标头…

浏览器内核总结

一般来讲,浏览器分为外壳部分和渲染部分。外壳部分就是用户看得见摸得到的外观和操作界面;而渲染部分则包括了浏览器内核和JS引擎,其中JS引擎主要负责执行javascript语言实现网页上的动作,而内核则负责渲染网页,把数据变成用户可以…

SDHelper module加密系统解密

电脑上运行了SDHelper module,文档修改就会被加密,无法在别的电脑打开,工作中无意中发现的方法可以避开加密 1:可以通过打开文档并登录你的office,生成分享链接出去可以避免加密 2:本地起一个vue的项目&…

nehe教程混合这一节需要注意的两个地方

//glDepthFunc(GL_LESS); //glEnable(GL_DEPTH_TEST);///关掉深度测试,否则没效果,原因是后画的物体通不过测试,当然也就不能混合了 glDepthRange(0.0, 1.0); glClearDepth(1.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClearColor(0.0, 0.0, 0.0, …

Kubernetes CRD开发模式及源码实现深入剖析-Kubernetes商业环境实战

专注于大数据及容器云核心技术解密,可提供全栈的大数据云原生平台咨询方案,请持续关注本套博客。如有任何学术交流,可随时联系。留言请关注《数据云技术社区》公众号。 1 CRD资源扩展 CRD 即CustomResourceDefinition,是 kubernet…

禁止浏览器缓存

近期在改页面的时候看到了页面中有response.setHeader("Pragma","No-cache"); 这样的语句,不知道是做什么的,经查得知原来是禁止浏览器缓存的,现把Html,Asp,Php,Jsp4种语言禁止浏览器缓…

Spring @Transactional实际如何工作?

在本文中,我们将深入探讨Spring事务管理。 我们将讨论Transactional在Transactional如何真正工作。 其他即将发布的帖子将包括: 如何使用传播和隔离等功能 主要陷阱是什么以及如何避免它们 JPA和事务管理 重要的是要注意,JPA本身不提供任何…

python3-开发进阶-RESTful 软件架构风格

一. 什么是RESTful REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移”REST从资源的角度类审视整个网络,它将分布在网络中某个节点的资源通过URL进行标识&#x…

mysql卸载重装总是卡在starting server这一选项

因为自己不小心把msyql给下载了,重装了一个5.7版本的可是在安装时卡在starting server这一部分,运行不下去。重写卸载重装仍然不成功,还是卡在starting server.无法继续下面的安装,查看日志也没有报错信息。 问题分析:…

两款开源Web功能测试工具

参考自:http://www.ibm.com/developerworks/cn/web/wa-aj-testing/twill:官网:http://twill.idyll.org/安装:easy_install twill运行:twill-sh文档:http://twill.idyll.org/windmill安装:easy_install wind…