TCP/IP four-storey model

--网络接口层

MAC地址:准确的说他必须在一个LAN内是唯一的。他又48位的十六进制组成,前24位是厂商表示,后24位 是厂商自定义的序列号。有时候 MAC地址就是表示了一个设备的位置。

--网际层

子网掩码

1、子网掩码决定的是一个子网的计算机数目计算机公式是2的m次方,其中,我们可以把m看到是后面的多少颗0。如255.255.255.0转换成二进制,那就是11111111.11111111.11111111.00000000,后面有8颗0,那m就是8,255.255.255.0这个子网掩码可以容纳2的8次方(台)电脑,也就是256台,但是有两个IP是不能用的,那就是最后一段不能为0和255,减去这两台,就是254台。

2、子网掩码2进制中的“1”对应的IP地址部分是网络地址,“0”对应的部分是主机地址,计算一个IP地址的网络地址、主机地址、广播地址就是根据子网掩码确定。  

3、划分子网后必然会采用特殊的子网掩码,因此IP地址的网络地址、主机地址、广播地址就不能按照缺省的子网掩码来计算

(比如C类地址缺省子网掩码是255.255.255.0,但是采用特殊的子网掩码后应该按照新的子网掩码来计算,比如255.255.255.192)。
实例1:IP地址192.168.1.200,子网掩码是255.255.255.224,要求计算其网络地址、主机地址和广播地址。    
分析:把子网掩码换算成2进制,1对应的部分是网络地址,0对应的部分是主机地址,把主机地址各位全部变成1就是广播地址。  
因此首先把255.255.255.224换算成2进制,就是11111111.11111111.11111111.11100000,然后把IP地址也换算成2进制,就是11000000.10101000.00000001.11001000,因此可以得到网络地址就是11000000.10101000.00000001.11000000,即192.168.1.192;主机地址就是00001000,即8;而广播地址就是11000000.10101000.00000001.11011111,即192.168.1.223。

首先用2的8次方既256-224(子网掩码最后一位得出子网中得到所容纳的IP地址)=32 那么我们现在要找到小于200又是32的倍数得出是192。 所以得出了网络地址,要得到广播地址则下一个网络的网络地址减1既是224-1=223既得出广播地址192.168.1.223

computational formula: 广播地址 =网络地址 | (~子网掩码)
|:位或运算; ~:按位取反

IP地址由四段数字组成

在此,我们先解一下3类常用的IP

  A类IP段 0.0.0.0 到127.255.255.255
  B类IP段 128.0.0.0 到191.255.255.255
  C类IP段 192.0.0.0 到223.255.255.255

  
XP默认分配的子网掩码每段只有255或0
  A类的默认子网掩码 255.0.0.0 一个子网最多可以容纳1677万多台电脑
  B类的默认子网掩码 255.255.0.0 一个子网最多可以容纳6万台电脑
  C类的默认子网掩码 255.255.255.0 一个子网最多可以容纳254台电脑
  
  要想在同一网段,只要子网掩码网络标识相同。那255.255.248.0这个子网掩码最多容纳多少台电脑?首先要做的是把每段的IP转换为二进制。(有人说,我不会转换耶,没关系,我们用Windows自带计算器就行。打开计算器,点查看>科学型,输入十进制的数字,再点一下“二进制”这个单选点,就可以切换至二进制了。)
  计算方法:
  把将其转换为二进制的四段数字(每段要是8位,如果是0,可以写成8个0,也就是00000000)
  11111111.1111111.11111000.00000000
  然后,数数后面有几颗0,一共是有11颗,那就是2的11次方,等于2048,这个子网掩码最多可以容纳2048台电脑。
  一个子网最多可以容纳多少台电脑你会算了吧,下面我们来个逆向算法的题。
  一个公司有530台电脑,组成一个对等局域网,子网掩码设多少最合适?
  首先,无疑,530台电脑用B类IP最合适(A类不用说了,太多,C类又不够,肯定是B类),但是B类默认的子网掩码是255.255.0.0,可以容纳6万台电脑,显然不太合适,那子网掩码设多少合适呢?我们先来列个公式。
  2的m次方=560
  首先,我们确定2一定是大于8次方的,因为我们知道2的8次方是256,也就是C类IP的最大容纳电脑的数目,我们从9次方一个一个试2的9次方是512,不到560,2的10次方是1024,看来2的10次方最合适了。子网掩码一共由32位组成,已确定后面10位是0了,那前面的22位就是1,最合适的子网掩码就是:11111111.11111111.11111100.00000000,转换成10进制,那就是255.255.252.0。

网络地址

网络地址是因特网协会的ICANN(the Internet Corporation for Assigned Names and Numbers)分配的,下有负责北美地区的InterNIC、负责欧洲地区的RIPENIC和负责亚太地区的APNIC 目的是为了保证网络地址的全球唯一性。主机地址是由各个网络的系统管理员分配。因此,网络地址的唯一性与网络内主机地址的唯一性确保了IP地址的全球唯一性。

computational formula : 将IP地址和子网掩码都换算成二进制,然后进行与运算,结果就是网络地址。

网关——实质上是一个网络通向其他网络的IP地址。

ARP(Address Resolution Protocol,地址解析协议)是一个位于TCP/IP协议栈中的网络层,负责将某个IP地址解析成对应的MAC地址

OSPF(Open Shortest Path First)是一个内部网关协议(Interior Gateway Protocol,简称IGP),用于在单一自治系统(autonomous system,AS)内决策路由

ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,是一种面向无连接的协议,用于在IP主机路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。

NAT协议:nat网络地址转换,是为了解决ipv4地址空间不足产生的,原理就是替换掉数据包中的源ip+端口或目标ip+端口,达到私有地址不能再公网上传播,或者是局域网中服务器的发布。实现方式大致分成静态NAT和动态NAT PAT(端口复用),一定程度上提高了局域网用户的安全性。

描述一下HSRP

热备路由协议 是Cisco私有的网关冗余协议。它是由一组路由器(最低2台)构成的一个热备组 作用是为用户提供一个不间断的网关ip,用户通过这个ip访问互联网,即使真实的网关设备DOWN掉一台,也不会影响客户的正常工作。

原理: 热备组中包含4中路由器的角色,

活跃路由器:负责承载发往虚拟ip地址的流量,是真正转发用户数据流量的路由器,

同时向UDP1985发送hello包 表明自己的状态,一个组中只有一台。

备份路由器:监听整个HSRP组的状态,是成为下一个活跃路由器之前的状态,一个组中只有一个 同时向组中发送

其他路由器:静听整个HSRP组的状态,是备份路由器的候选者

虚拟路由器:为客户端提供一个虚拟的ip和MAC  能够然活跃路由器转发。

当活跃路由器Down后 备份路由器收不到hello包 就会成为活跃路由器。而这个转换的过程用户是感觉不到的。

--运输层

这一层有两个重要的协议 TCP(三次握手)和UDP (不需要三次握手),还有端口概念,代表应用层协议

 io多路复用

io分为磁盘io和网络io,这里说的是网络io。我们知道计算机之间传输数据是流传输。一台计算机网络io只会有一个。

这里说单进程
在最基本的c/s demo中,send/recv就是在一条io通道收发数据,这就是基本的网络io,但是这种操作是不能“填满”io的,也就是说大部分io资源你没有用,仅仅有一个io操作,当然你可以开多进程或多线程,代价可想而知

此时出现了io多路复用,自己的话翻译一下,复用网络io从而有多个io操作能在网络io中执行。

linux下网络io使用socket套接字来通信,普通io模型只能监听一个socket,而io多路复用可同时监听多个socket

io多路复用避免阻塞在io上,原本为多进程或多线程来接收多个连接的消息变为单进程或单线程保存多个socket的状态后轮询处理

实现io多路复用需要函数来支持,就是你说的linux下的select/poll,epoll以及win下 iocp 和 BSD 的 kqueue

epoll

epoll是Linux内核为处理大批量文件描述符而作了改进的poll,是Linux下多路复用IO接口select/poll的增强版本,它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。另一点原因就是获取事件的时候,它无须遍历整个被侦听的描述符集,只要遍历那些被内核IO事件异步唤醒而加入Ready队列的描述符集合就行了。epoll除了提供select/poll那种IO事件的水平触发(Level Triggered)外,还提供了边缘触发(Edge Triggered),这就使得用户空间程序有可能缓存IO状态,减少epoll_wait/epoll_pwait的调用,提高应用程序效率。

简单说epoll和select/poll最大区别是
1.epoll内部使用了mmap共享了用户和内核的部分空间,避免了数据的来回拷贝
2.epoll基于事件驱动,epoll_ctl注册事件并注册callback回调函数,epoll_wait只返回发生的事件避免了像select和poll对事件的整个轮寻操作。

nginx中使用了epoll,是基于事件驱动模型的,由一个或多个事件收集器来收集或者分发事件,epoll就属于事件驱动模型的事件收集器,将注册过的事件中发生的事件收集起来,master进程负责管理worker进程
posted @ 2017-10-12 11:00  兰昌  阅读(327)  评论(0编辑  收藏  举报