网络操作基础知识

一、IP 地址和端口号

  • 1) IP 地址用于在网络中唯一标识一台机器(通信实体),是一个 32 位整数,通常 用 4 个 0-255 的十进制数标识;
  • 2) 端口号用于唯一标识通信实体上进行网络通讯的程序,同一台机器上不能有两个程序占用同一个端口的情况;

端口号是一个 16 位整数,共有 3 类;

  1. 公认端口:0-1023,它们紧密绑定一些特定的服务(比如 TCP/IP 通信协 议程序的端口);

  2. 注册端口:1024-49151,它们松散绑定一些特定服务,其余可以随意使 用,应用程序用的最多端口号来自于这个范围;

  3. 动态/私有端口:49152-65535,这些端口一般是应用程序运行时临时地、 动态地占用,可以说是一种竞争资源吧,应用程序本身不会和这些端口绑 定,一般会将其作为资源利用;

  • 3)真正参与网络通信的对象是计算机上的程序(网络通信程序),IP 地址是它的街 道门牌,而端口是它的房间号;

二、阻塞(blocking)与非阻塞(non-blocking)IO

IO 的阻塞、非阻塞主要表现在一个 IO 操作过程中,如果有些操作很慢,比如读操 作时需要准备数据,那么当前 IO 进程是否等待操作完成,还是得知暂时不能操作后先 去做别的事情?

一直等待下去,什么事也不做直到完成,这就是阻塞

抽空做些别的事情,这是非阻塞

非阻塞 IO 会在发出 IO 请求后立即得到回应,即使数据包没有准备好,也会返回 一个错误标识,使得操作进程不会阻塞在那里。操作进程会通过多次请求的方式直到数

据准备好,返回成功的标识。

想象一下下面两种场景:

情景A 小明和小刚两个人都很耿直内向,一天小明来找小刚借书:“小刚啊,你那本XXX 借我看看”。 于是小刚就去找书,小明就等着,找了半天找到了,把书给了小明。

情景B 小明和小刚两个人都很活泼外向,一天小明来找小刚借书:“嘿小刚,你那本 XXX

借我看看”。 小刚说:“我得找一会”,小明就去打球去了。过会又来,这次书找到了, 把书给了小明。

结论:A 是阻塞的,B 是非阻塞的。

从 CPU 角度可以看出非阻塞明显提高了 CPU 的利用率,进程不会一直在那等待。 但是同样也带来了线程切换的增加。增加的 CPU 使用时间能不能补偿系统的切换成 本需要好好评估。

三、同步(synchronous)与异步(asynchronous)IO

判断同步和异步的标准在于:

一个 IO 操作直到完成,是否导致程序进程的阻塞。 如果阻塞就是同步的,没有阻塞就是异步的

这里的 IO 操作指的是真实的 IO 操作, 也就是数据从内核拷贝到系统进程(读)的过程

继续前面借书的例子,异步借书是这样的:

情景C 小明很懒,一天小明来找小刚借书:“嘿小刚,你那本 XXX 借我看看”。 小刚 说:“我得找一会”,小明就出去打球了并且让小刚如果找到了就把书拿给他。小刚是个负责任的人,找到了书送到了小明手上。

A 和 B 的借书方式都是同步的,有人要问了 B 不是非阻塞嘛,怎么还是同步?

前面说了 IO 操作的 2 个步骤:准备数据和把数据从内核中拷贝到程序进程

映射到这个 例子,书即是准备的数据,小刚是内核,小明是程序进程,小刚把书给小明这是拷贝数据。

在 B 方式中,小刚找书这段时间小明的确是没闲着,该干嘛干嘛,但是小刚找到 书把书给小明的这个过程也就是拷贝数据这个步骤,小明还是得乖乖的回来候着小刚把 书递手上。所以这里就阻塞了,根据上面的定义,所以是同步。

在涉及到 IO 处理时通常都会遇到一个是同步还是异步的处理方式的选择问题。

同步能够保证程序的可靠性,而异步可以提升程序的性能

小明自己去取书不管等着不 等着迟早拿到书,指望小刚找到了送来,万一小刚忘了或者有急事忙别的了,那书就没 了。

android进阶3step2:Android App通信 ——端口号IP等网络基础知识扫盲相关推荐

  1. Android 进阶8:进程通信之 Binder 机制浅析

    读完本文你将了解: IBinder Binder Binder 通信机制 Binder 驱动 Service Manager Binder 机制跨进程通信流程 Binder 机制的优点 总结 Than ...

  2. 【Android 进阶】开发APP常见的错误

    科技日益发展,现在创建一款移动App的时间远远的低于以前,这并不稀奇:因为目前超过一半的网络流量都是来源于移动设备.当用户不在电脑旁时,可以通过专用应用程序无缝开始移动体验.令人惋惜的是,许多缺乏经验 ...

  3. 【Android 进阶】Android优秀框架

    根据上图我们依次说明: 1,DiskLruCache 硬盘缓存最佳方案(Google提供的一套硬盘缓存的解决方案:DiskLruCache(非Google官方编写,但获得官方认证)) DiskLruC ...

  4. android支持ipv6 mate9,APP兼容IPV6以及搭配IPv6网络环境

    1.不建议使用底层的网络API.蓝色部分的API是不存在兼容性问题的,平时使用的第三方的网络库也都是用的蓝色部分. 2.不要使用IP地址,使用域名. 以前Reachability库中SCNetwork ...

  5. APP——功耗测试(耗电测试)——基础知识

    adb 查看电池状态信息 手机连接上电脑.输入adb命令:adb shell dumpsys battery Current Battery Service state:   ####当前电池服务状态 ...

  6. 收藏:通信网络基础知识

    什么是通信网络 我们周围无时无刻不存在一张网,如电话网.电报网.电视网.计算机网络等:即使我们身体内部也存在许许多多的网络系统,如神经系统.消化系统等.最为典型的代表即计算机网络,它是计算机技术与通信 ...

  7. (chap1 网络基础知识)通信类型

    网络通信当中,根据接收端数量及其后续的行为对通信进行分类. 单播(Unicast) 字面上,"Uni"表示"1","Cast"意为" ...

  8. 通信网络基础知识01

    文章目录 1. 简单了解 1.1 OLT(光线路终端): 1.2 ODN(分光器): 1.3 ONU(光网络单元) 2.OAN(光纤接入网) 2.1 分类 2.2 PON(Passive Optica ...

  9. L022-老男孩Linux高端运维课程-linux系统网络基础知识及配置实战精讲

    01001100:第2,5,6位为1对应的数是64,8,4.那么它对应的十进制数是64+8+4=76 224=11100000(二进制数)方法:224-128=96,96-64=32,32-32=0. ...

最新文章

  1. 一文解决图片数据集太少的问题:详解KerasImageDataAugmentation各参数
  2. 微服务架构之「 容器技术 」
  3. 机器人教练SWOT分析_学车没人教,包头这个驾校机器人教练已上岗,再也不怕被教练骂了...
  4. 类的继承定义一个computer类在此基础上派生出两个子类(继承与多态绑定)
  5. 机器学习资料合计(二)
  6. java+boolean+属性,java – 从属性中获取int,float,boolean和string
  7. 计算机应用的时间地点意义,计算机应用在教学中的作用
  8. 可以在python3下面用的pyh
  9. C语言的源代码文件、目标文件和可执行文件
  10. java中加权滤波怎么用_方向加权中值滤波算法-The Directional Medial Filtering with Weights...
  11. visio中画细箭头
  12. 如何汉化eclipse
  13. 部队室内靶场有哪些硬件设备和强制性存在的系统
  14. 始终从最不易改变的方面开始
  15. Jenkins使用问题记录
  16. 招生难、管理难!教育如何实现零流失、高增长?教育行业如何玩转“私域流量”?...
  17. 基于参考辐射源/定标的校正算法
  18. DNA旋转特效 html+css
  19. L1 Cache、L2 Cache、L3 Cache说明
  20. matlab曲面拟合的算法,Matlab三维节点拟合出平滑曲面,并求拟合曲面与底部投影形成的体积以及投影面积...

热门文章

  1. IDEA自动导包设置(洒洒水)
  2. 【省内训练2018-11-23】Graph
  3. Yii2 ajax的post请求Csrf验证失败
  4. 【Unity入门】12.MonoBehaviour事件函数
  5. WordPress主题_Mancink垂钓渔具爱好者英文网站
  6. access 数据分组
  7. Hbuilder,HbuilderX 打包发布 ios 应用
  8. table表格单元格合并,(自定义)
  9. 基于matlab的线性调频信号(lfm)脉冲压缩仿真
  10. [HBZ分享] 小米手机如何解BL锁