本文比较长,有些没有详细介绍的将会拆分出来在新的博客中。
网络层次划分
OSI参考模型:
除了标准的OSI七层模型以外,常见的网络层次划分还有TCP/IP四层协议以及TCP/IP五层协议,它们之间的对应关系如下图所示:
OSI七层网络模型
- 物理层:关注一条通信信道上传输原始比特,设计问题主要是硬件方面。该层为上层协议提供了一个传输数据的可靠的物理媒体。
物理层重要设备:中继器(放大器)和集线器。
- 数据链路层:将一个原始的传输信息转变为一个没有漏检传输错误的线路。发送方将数据拆分成数据帧,顺序地发送给接收方,待接收方确认该服务真实后,返回确认帧给发送方。
数据链路层重点:
1为网络层提供可靠的数据传输;
2基本数据单位:帧;
3主要协议:以太网协议;
4重要设备:网桥和交换机。
- 网络层:控制子网地运行,解决如何将数据包从源端路由到接收方。
网络层中涉及众多的协议,最重要的协议是TCP/IP,核心协议——IP协议。
IP协议仅仅提供不可靠、无连接的传送服务。
IP协议的主要功能有:无连接数据报传输、数据报路由选择和差错控制。
网络层的重点:
1、负责对子网间的数据包进行路由选择。实现拥塞控制、网际互连等功能;
2、基本数据单位:IP数据报;
3、包含的主要协议:
IP协议(Internet Protocol,因特网互联协议);
ICMP协议(Internet Control Message Protocol,因特网控制报文协议);
ARP协议(Address Resolution Protocol,地址解析协议);
RARP协议(Reverse Address Resolution Protocol,逆地址解析协议)。
4、重要设备:路由器。
- 传输层:接收来自上层数据,分割更小的单元传递给网络层,是从端到端的层,指原机器的一个程序利用报文头和控制信息与目标机器进行会话。(1~3层是链式链接,3~7层是端到端连接)
网络层重点:
1、负责将上层数据分段并提供端到端的、可靠的或不可靠的传输以及端到端的差错控制和流量控制问题;
2、主要协议:
TCP协议(Transmission Control Protocol,传输控制协议)、
UDP协议(User Datagram Protocol,用户数据报协议);
3、重要设备:网关。
- 会话层:允许不同机器建立对话,提供各种服务包括:对话控制,令牌管理,同步功能。
- 表示层:关注传递信息的语法和语意,转换数据:数据的加密、压缩、格式转换等。
- 应用层:为操作系统或网络应用程序提供访问网络服务的接口。
会话层、表示层和应用层重点:
1、数据传输基本单位:报文;
2、主要协议:FTP(文件传送协议)、Telnet(远程登录协议)、DNS(域名解析协议)、SMTP(邮件传送协议),POP3协议(邮局协议),HTTP协议(Hyper Text Transfer Protocol)。
IP寻址
1)网络地址
IP地址 = 网络号(包括子网号)+ 主机号组成
规定首字节不能是127、0、255,主机各位不能同时为0和1。主机号全0表示网络号,主机号全1表示广播地址
A类地址:0开头。 网络号:第一个字节。 范围:1.0.0.0 ~ 127.255.255.255
B类地址:10开头。 网络号:前两个字节。 范围:128.0.0.0 ~ 191.255.255.255
C类地址:110开头。网络号:前三个字节。 范围:192.0.0.0 ~ 223.255.255.255
D类地址:1110开头。范围:224.0.0.0 ~ 239.255.255.255
E类地址:1111开头。范围:240.0.0.0 ~ 255.255.255.255。E类地址为保留地址,供以后使用。
只有A,B,C有网络号和主机号之分,D类地址和E类地址没有划分网络号和主机号。
2)广播地址
广播地址(直接广播地址),区分受限广播地址。
主机号为全1。当向某个网络的广播地址发送消息时,该网络内的所有主机都能收到该广播消息。
3)组播地址
D类地址作为组播地址,一对多的通信;
4)255.255.255.255
该IP地址是受限广播地址,只能用于本地网络,路由器不会转发以受限广播地址为目的地址的分组;广播地址(直接广播地址)能够通过某些路由器(不是所有的路由器),而受限的广播地址不能通过路由器。
5)0.0.0.0
常用于寻找自己的IP地址,例如在我们的RARP,BOOTP和DHCP协议中,若某个未知IP地址的无盘机想要知道自己的IP地址,它就以255.255.255.255为目的地址,向本地范围的服务器发送IP请求分组。
6)回环地址
127.0.0.0/8被用作回环地址,回环地址表示本机的地址,常用于对本机的测试,用的最多的是127.0.0.1。
7)A、B、C 类私有地址
私有地址(private address),私有路由不能对外直接提供信息
在 IPv4 规划时担心 IP 有不足的情况,而且为了应付某些企业内部的网络设定,于是有了私有 IP (Private IP) 。私有 IP 分别在 A, B, C 三个 Class 当中各保留一段作为私有 IP 网段:
Class A:10.0.0.0 - 10.255.255.255
Class B:172.16.0.0 - 172.31.255.255
Class C:192.168.0.0 - 192.168.255.255
地址解析协议——ARP/RARP协议
- 地址解析协议,ARP(Address Resolution Protocol)是根据IP地址获取物理地址的一个TCP/IP协议。(主机必须知道目的网络适配器的物理地址才能向它发送数据)
网段上每台主机保存ARP表或ARP缓存的表格,其中包含了网段上其他主机的IP地址与物理地址的对应关系。
ARP协议工作流程:
1、当主机向网段上的其他主机发送数据时,先查看ARP缓存上物理地址。ARP缓存是动态变化的
2、不在ARP缓存中,主机发送一个名为ARP请求帧的广播。ARP请求帧包含为解析的IP地址,还包含发送这个请求的主机的IP地址和物理地址。
3、网段上的其他主机收到请求,拥有这个未解析IP地址的主机向发出请求的主机发送自己的物理地址。这个新的IP地址与物理地址的对应关系就会添加到请求主机的ARP缓存中。
- 逆地址解析协议,RARP,在知道物理地址而不知道IP地址时,使用RARP。
RARP协议工作流程:
1、给主机发送一个本地的RARP广播,在此广播包中,声明自己的MAC地址并且请求任何收到此请求的RARP服务器分配一个IP地址;
2、本地网段上的RARP服务器收到此请求后,检查其RARP列表,查找该MAC地址对应的IP地址
子网划分和CIDR
IPv4的网络号占位太多,而主机号位太少,主机地址稀缺。为了有效地利用IP地址,通过对主机号的高位部分取作为子网号,从通常的网络位界限中扩展或压缩子网掩码,用来创建某类地址的更多子网。(创建更多子网时,每个子网上可用主机地址数目减少)
什么是子网?
子网划分可以利用IP地址系统把物理网络分解为更小的逻辑实体——子网。
子网的概念最早源自于地址分类系统,而且在ABC类地址中能够得到很好的展现。然而硬件厂商和internet社区建立了一种解析地址的新系统,名为无类别域间路由(CIDR),它不需要关心地址类别。
子网最显著的特征具有子网掩码。划分子网时需要注意:主机ID为全0时表示网络ID,全1时表示广播地址。
什么是子网掩码?
子网掩码:标志两个IP地址是否同属于一个子网,是32位二进制地址。1代表该位是网络位,0代表主机位。它和IP地址一样也是使用点式十进制来表示。
如果两个IP地址在子网掩码的按位与的计算下所得结果相同,即表明它们共属于同一子网中。
子网掩码不能单独存在,必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。
A类默认子网掩码 255.0.0.0 一个子网最多可以容纳1677万多台电脑
B类默认子网掩码 255.255.0.0 一个子网最多可以容纳6万台电脑
C类默认子网掩码 255.255.255.0 一个子网最多可以容纳254台电脑
一、通过子网掩码计算子网个数及每个子网中可使用的主机地址个数:
- 255.255.255.0 该子网掩码最多容纳多少台电脑?
1、转换成二进制:11111111.11111111.11111111.00000000,后面有8个0
2、2^8 -- 2 = 254台,(有两个IP不能用,最后一段不能为0和255)
若要把***.***.***.0/m划分为***.***.***.0/n(m<n<32),得到的子网个数为2^(n-m),去掉全0和全1,可用子网个数为2^(n-m) -- 2,每个子网中可使用的主机地址是2^(32-n) -- 2。
把网络117.15.32.0/23划分为117.15.32.0/27,得到的子网是 16 个,可用子网个数为14个,每个子网中可使用的主机地址是 30 个。
二、通过子网个数或主机地址个数计算子网掩码:
1)根据主机数计算子网掩码:
- 将B类地址168.195.0.0划分若干个子网,每个子网内主机700台,计算其子网掩码:
1、将主机数目转化为二进制来表示:700 = 1010111100
2、如果主机数小于或等于254(N<8)(注意去掉保留的两个IP地址),取该主机的二进制位数N 。如果大于254, N>8,说明主机地址占据不止8位。该二进制为十位数,N=10
3、使用255.255.255.255将该类IP地址的主机地址位数全部置1,然后从后向前的将N位全部置为 0,即为子网掩码值。
子网掩码一共由32位组成,确定后面10位是0,那前面的22位就是1,最合适的子网掩码:11111111.11111111.11111100.00000000,转换成10进制:255.255.252.0。
2)根据子网数计算子网掩码:
- 欲将B类IP地址168.195.0.0划分为27个子网,计算其子网掩码:
1、27-1=26,转化为二进制11010(--1因为计算机从0开始,到26才是27个)
2、该二进制的位数:N=5。B类地址的子网掩码255.255.0.0,将其主机地址前5位置1,即11111111.11111111.11111000.00000000=255.255.248.0。
注:将主机地址前5位置1,划分出2^5 -- 2=30个子网。(去掉全0和全1的子网)
IP地址的网段
- 例如: IP:192.168.0.1,子网掩码:255.255.255.0,求其网络标识与主机标识?
把IP的每一段转换为一个二进制数,192.168.0.1 = 11000000.10101000.00000000.00000001
IP 11000000.10101000.00000000.00000001
子网掩码 11111111.11111111.11111111.00000000
要想在同一网段,必需做到网络标识相同。各类IP的网络标识算法:A类只算第一段。B类只算第一、二段。C类算第一、二、三段。
将 IP 地址和子网掩码进行逻辑与运算
如:192.168.0.1, 255.255.255.0,先转换为二进制
IP 11000000.10101000.00000000.00000001
子网掩码 11111111.11111111.11111111.00000000
逻辑与结果 11000000.10101000.00000000.00000000
转换为十进制192.168.0.0,这就是网络标识
再将子网掩码取反:00000000.00000000.00000000.11111111,与IP逻辑与运算
得出结果00000000.00000000.00000000.00000001,转换为10进制,即0.0.0.1,
0.0.0.1就是主机标识。
- B类IP :188.188.0.111,188.188.5.222,子网掩码都为255.255.254.0,在同一网段吗?
先转换成二进制
188.188.0.111 = 10111100.10111100.00000000.01101111
188.188.5.222 = 10111100.10111100.00000101.11011010
255.255.254.0 = 11111111.11111111.11111110.00000000 (子网掩码)
分别将 IP 地址和子网掩码进行逻辑与运算,得
10111100.10111100.00000000.00000000
10111100.10111100.00000100.00000000
B类IP ,判断第一二段,网络标识一样,在同一网段。
TCP/IP协议
TCP/IP协议族,简称TCP/IP。该协议家族的两个核心协议:TCP(传输控制协议)和IP(网际协议)TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。IP给因特网的每台联网设备规定一个地址。
DNS及域名解析流程
DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。
详细参考维基百科:https://zh.wikipedia.org/wiki/域名系统
DNS域名查找流程
当用户在浏览器中输入域名,如:www.google.com,并按下回车后,DNS解析过程大体如下:
注:下面标题对应着序号
1、浏览器缓存检查(本机)
浏览器会首先搜索浏览器自身的DNS缓存(域名被缓存的时间可以通过TTL属性来设置,一般是1分钟,且只能容纳1000条缓存),如果自身的缓存中有www.google.com对应的条目,而且没有过期,则解析到此结束。
2、操作系统缓存检查(本机)+hosts解析(本机)
如果浏览器自身缓存里没有对应条目,浏览器去搜索操作系统自身的DNS缓存中是否有这个域名对应的DNS解析结果,如果找到且没有过期则停止搜索解析到此结束。
在Linux中可以通过/etc/hosts文件来设置域名解析的IP地址。浏览器会首先使用这个IP地址。当解析到这个域名时,操作系统会在自身的DNS缓存中缓存这个结果
3、本地区域名服务器解析(LDNS)
如果在hosts文件中没有找到对应的条目,浏览器会发起一个DNS的系统调用,向本地配置的首选DNS服务器(LDNS一般是电信运营商提供)发起域名解析请求。通过UDP协议向DNS的53端口发起递归请求,运营商的DNS服务器必须提供我们该域名的IP地址。
大约80%的域名解析都到这里就已经完成了,所以LDNS主要承担了域名的解析工作。运营商的DNS服务器首先查找自身的缓存,找到对应的条目,且没有过期,则解析成功。
4、请求根域名服务器(Root Server)
如果LDNS没有找到对应的条目,运营商的DNS发起一系列迭代DNS解析请求。首先向根域名服务器(根域名. 内置13个根域DNS的IP地址)发起请求。
5、根域名服务器向LDNS服务器返回所查询的主域名服务器地址
主域名服务器(gTLD),是国际顶级域名服务器(包含.com、.cn、.org等),全球只有13台。根域发现这是一个顶级域com域的一个域名,于是就告诉运营商的DNS我不知道这个域名的IP地址,但是我知道com域的IP地址,你去找它去。
6、本地域名服务器向主域名服务器发送请求。
于是运营商的DNS就得到了com域的IP地址,又向com域的IP地址发起了请求(请问www.google.com这个域名的IP地址是多少?),com域这台服务器告诉运营商的DNS我不知道www.google.com这个域名的IP地址,但是我知道google.com这个域的DNS地址,你去找它去。
7、gTLD服务器返回此域名对应的管理方域名服务器(Name Server)的地址
Name Server是你注册的域名服务器,你在某个域名服务提供商申请了域名,那么这个域名解析任务就由这个域名提供商完成。
8、Name Server域名服务器会查询存储的域名和IP的映射关系表,
正常情况下都根据域名得到目标IP记录,连同一个TTL值返回给DNS Server域名服务器。
于是本地区域名服务器的DNS又向google.com这个域名的DNS地址发起请求(请问www.google.com这个域名的IP地址是多少?)这个时候google.com域的DNS服务器一查,果真在我这里
9、返回该域名对应的IP和TTL值
Local DNS Server会缓存这个域名和IP的对应关系,缓存的时间由TTL值控制。
然后把找到的结果发送给运营商的DNS服务器
10、把解析的结果返回给用户
这个时候运营商的DNS服务器就拿到了www.google.com这个域名对应的IP地址。
用户根据TTL值缓存在本地系统缓存中,域名解析过程结束。
HTTP协议
超文本传输协议(英文:HyperText Transfer Protocol,缩写:HTTP)是一种用于分布式、协作式和超媒体信息系统的应用层协议。HTTP是万维网的数据通信的基础。
1、Get是从服务器上获取数据,Post是向服务器发送数据。
2、Get传送的数据量小,不能大于2KB;Post传送的数据量较大,一般被默认为不受限制。注:get本身是没有限制大小的,由于get的参数都是拼接在url上,因为浏览器的限制,才限制在2KB
3、根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。
- . 安全:指该操作用于获取信息而非修改信息。GET请求一般不应产生副作用,它仅仅是获取资源信息,像数据库查询,不修改或增加数据,不影响资源的状态。
- 幂等:对同一URL的多个请求应该返回同样的结果。
关于http协议,写起来又是一长篇巨著,待我日后有空补充。