ISO/OSI七层模型
需要说明的是:当今互联网上使用的网络协议并不是建立在OSI的七层模型基础之上的,而是对应TCP/IP四层模型。也就是当今互联网真正使用的网络模型是TCP/IP四层模型,而OSI七层模型只是TCP/IP模型的基础,TCP/IP模型是由OSI模型演变而来,并做了优化。后续将会对TCP/IP
模型进行说明。
其中ISO表示的是国际标准化组织;OSI指的是开放系统互联模型。当然你可能会联想到IOS这一词,人们经常提到的IOS指的是苹果操作系统。而在计算机网络中,IOS是互联网操作系统,是思科公司为其网络设备开发的操作系统。
OSI七层模型,具体如下:
名称(由上到下) | 作用 |
---|---|
应用层 | 用户接口 |
表示层 | 数据的表现形式、特定功能的实现,如:压缩数据、加密等 |
会话层 | 对应用会话的管理、同步,确定是网络传输还是本地存储(如果是进行网络传输,则数据将进入下一层继续操作) |
传输层 | 可靠与不可靠的传输、传输前的错误检测、流控,确定协议 |
网络层 | 提供逻辑地址、选路,确定源IP地址和目标IP地址 |
数据链路层 | 成帧、用MAC地址访问媒介、错误检测与修正,确定MAC地址(发送方的MAC地址和接收方的MAC地址) |
物理层 | 设备之间的比特流的传输(数据转化成0和1组成的)、物理接口、电气特性 |
其中:
OSI七层模型的传输过程,具体如下:
层 | 主机A | 协议 | 主机B | 数据单位 |
---|---|---|---|---|
7 | 应用层 | <——应用层协议——> | 应用层 | APDU(应用协议数据单元) |
↑ | ↑ | |||
接口 | 接口 | |||
↓ | ↓ | |||
6 | 表示层 | <——表示层协议——> | 表示层 | PPDU(表示协议数据单元) |
↑ | ↑ | |||
接口 | 接口 | |||
↓ | ↓ | |||
5 | 会话层 | <——会话层协议——> | 会话层 | SPDU(会话协议数据单元) |
↑ | ↑ | |||
接口 | 接口 | |||
↓ | ↓ | |||
4 | 传输层 | <——传输层协议——> | 传输层 | TPDU(传输协议数据单元) |
↑ | ↑ | |||
接口 | 接口 | |||
↓ | ↓ | |||
3 | 网络层 | <——网络层协议——> | 网络层 | 报文 |
↑ | ↑ | |||
接口 | 接口 | |||
↓ | ↓ | |||
2 | 数据链路层 | <——数据链路层协议——> | 数据链路层 | 帧 |
↑ | ↑ | |||
接口 | 接口 | |||
↓ | ↓ | |||
1 | 物理层 | <——物理层协议——> | 物理层 | 比特 |
TCP/IP协议四层模型,具体如下:
层 | 名称 |
---|---|
4 | 应用层 |
3 | 传输层 |
2 | 网际互联层 |
1 | 网络接口层 |
TCP/IP模型是由OSI模型演变而来,并做了优化。TCP/IP模型与OSI模型的对应关系,如下:
TCP/IP四层模型 | 对应关系 | OSI七层模型 |
---|---|---|
应用层 | ||
应用层 | <——–> | 表示层 |
会话层 | ||
传输层 | <——–> | 传输层 |
网际互联层 | <——–> | 网络层 |
数据链 | ||
网络接口层 | <——–> | 路层(续上) |
物理层 |
TCP/IP协议四层模型的各层介绍:
arp -a
命令可以查看本机相关网络的IP地址与物理地址的对应关系。)ping
命令采用的即是ICMP协议。)TCP/IP三次握手
TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。参考:(TCP的三次握手(建立连接)和四次挥手(关闭连接))
(1)第一次握手:建立连接时,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认。
(2)第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态。
(3)第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据。
为什么进行三次握手,而不是两次握手或多次握手呢?
提到这样的问题,我们先来看一个经典的思想实验“两军问题”。该问题用来阐述在一个不可靠的通信链路上试图通过通信以达成一致是存在缺陷的和困难的。(参考:两军问题)
两军问题的描述大体如下:
两支军队(这里我们假设是A1和A2两支军队)都驻扎在城市旁边的两个不同的山谷里。两军之间隔着第三个山谷,而该山谷中驻扎着第三支军队(这里我们假设是B军队)。为了保证取胜,A1和A2必须同时发起攻击,否则任何单独发起攻击的军队都有可能全军覆没。A1和A2想要通讯的唯一方法就是穿过第三个山谷传送信件。问题是,第三个山谷被城市的守卫军占据,并且经此传送的信件可能会被守卫军截获。两军怎么做才能达成一致,正确地做出推断和决定呢?
为解决这样的问题,A1需要发送消息(如:x月x日x时x分发起进攻)给A2。发送消息后,A1并不知道A2是否收到消息,毕竟消息有可能被军队B截获,在这样的情况下,A1军队不敢贸然地发起进攻。因此,A2军队在收到A1的消息后,同样需要派人传送信件给A1:“我收到你的消息了,我会在x月x日x时x分对B发起进攻的。”同样地,A2军队也会犹豫A1军队是否收到了确认消息。因为,A1军队在没有收到确认消息的情况下,A1很有可能停止此次的攻击。为此,A1军队在收到A2的确认消息后,还需要发送一个确认消息用来说明:我知道你知道了。
这也是为什么不进行两次握手的原因。
尽管如此,最后的一次消息也不一定能得到确认,即多次握手也无法解决此问题。所以采用了三次握手。同样也证实了在一个不可靠的通信链路上试图通过通信以达成一致是存在缺陷的和困难的。两军问题是在计算机通信领域首个被证明无解的问题。
TCP/IP协议四层模型的数据封装过程
层 | 数据 | ||||
---|---|---|---|---|---|
应用数据 | 字节流(数据) | ||||
应用层 | FTP头 | 数据 | |||
传输层 | TCP头 | FTP头 | 数据 | ||
网络层 | IP头 | TCP头 | FTP头 | 数据 | |
数据链路层 | 以太帧头 | IP头 | TCP头 | FTP头 | 数据 |
网络类别 | 最大网络数 | IP地址范围 | 最大主机数(标准子网掩码下的) | 私有IP地址范围 |
---|---|---|---|---|
A | 126(2^7-2) | 1.0.0.0~126.255.255.255 | 2^24-2 | 10.0.0.0~10.255.255.255 |
B | 16384(2^14) | 128.0.0.0~191.255.255.255 | 2^16-2 | 172.16.0.0~172.31.255.255 |
C | 2097152(2^21) | 192.0.0.0~223.255.255.255 | 2^8-2 | 192.168.0.0~192.168.255.255 |
IP地址的说明
(参考:子网掩码)
摘录自百度百科:
子网掩码是一个32位地址,用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。
子网掩码的设定必须遵循一定的规则。与二进制IP地址相同,子网掩码由1和0组成,且1和0分别连续。子网掩码的长度也是32位,左边是网络位,用二进制数字“1”表示,1的数目等于网络位的长度;右边是主机位,用二进制数字“0”表示,0的数目等于主机位的长度。这样做的目的是为了让掩码与ip地址做按位与运算时用0遮住原主机数,而不改变原网络段数字,而且很容易通过0的位数确定子网的主机数(2的主机位数次方-2,因为主机号全为1时表示该网络广播地址,全为0时表示该网络的网络号,这是两个特殊地址)。只有通过子网掩码,才能表明一台主机所在的子网与其他子网的关系,使网络正常工作。
对于A类地址来说,默认的子网掩码是255.0.0.0;对于B类地址来说默认的子网掩码是255.255.0.0;对于C类地址来说默认的子网掩码是255.255.255.0。
利用子网掩码可以把大的网络划分成子网,即VLSM(可变长子网掩码),也可以把小的网络归并成大的网络即超网。
变长子网掩码及子网规划
如:
IP地址:172.16.2.121
子网掩码:255.255.255.0
分析:
从IP地址的第一个字节,我们可以知道该地址属于B类地址。并且其子网掩码为255.255.255.0,将IP地址前3位划分为网络位,最后一位为主机位,即不同IP地址前3位相同时,表示同属于同一网络;不同IP地址前3位相同,但最后一位不同,则表示同一网络下的不同IP地址。IP地址和子网掩码均转为二进制表示后进行按位与操作,可以得到网络地址。如下:
网络位 | 网络位 | 子网位 | 主机位 | |
---|---|---|---|---|
IP地址:172.16.2.121 | 10101100 | 00010000 | 00000010 | 01111001 |
子网掩码:255.255.255.0 | 11111111 | 11111111 | 11111111 | 00000000 |
网络地址:172.16.2.0 | 10101100 | 00010000 | 00000010 | 00000000 |
因此,网络地址为172.16.2.0;主机地址为172.16.2.1~172.16.2.254;广播地址为172.16.2.255。在这样的子网掩码下,IP地址前3位表示网络位,最后一位表示主机位。所以,172.16.1.121和172.16.2.121是属于不同网络的IP地址,而172.16.2.120和172.16.2.121是属于同一网络的的不同IP地址。
在TCP/IP模型中传输层的作用是确定使用的协议(TCP或者UDP),确定源端口和目标端口,此外,还有差错校验、流量控制等作用。这里提到了的”端口“起到了什么作用呢?IP地址确定了网络上的某一台计算机,而计算机中开启了一个或多个服务。当计算机A向计算机B发送数据时,计算机B需要接收数据。那么由计算机B的哪个服务接收数据呢?在这里目标端口就确定了由B中的哪个服务进行接收,精确到计算机的某一具体服务。
在传输层中确定协议后需要向上层数据中加入TCP协议包头或UDP协议包头。而在这样的包头中包含了源端口和目标端口。源端口和目标端口的长度均为16位。因此也确定了端口号的范围,即0~65535(2^16)。其中0~1023的端口被称为公认端口,这些端口号一般固定分配给一些服务。
常见端口
额外扩展
摘录自:
在计算机网络中,通过IP查询某一主机进行数据交互。IP对于我们来说并不直观,也不容易被人们记住。于是人们通过域名,建立起域名与IP的对应关系。其中帮助我们查询域名与IP映射关系的系统,称之为DNS,DNS是Domain Name System的缩写,即域名系统。查询域名对应的IP的过程,称为DNS解析。
当我们请求某个域名时,计算机会先查询本机中的hosts文件(该文件中记录着IP与域名的对应关系),将域名映射为IP。如果hosts文件中没有记录的话,将请求计算机配置的DNS服务器,通过DNS服务器查询得到域名对应的IP。计算机再通过IP请求对应的主机。(hosts文件的优先级高于DNS解析。)
hosts文件的位置
windows: C:\Windows\System32\drivers\etc
linux: /etc/hosts
单纯靠hosts文件解析域名存在着一些问题(如果将所有的域名同IP的映射关系放置在本机的hosts文件中,将导致):
1. 名称解析的效能下降(毕竟打开包含了所有的域名同IP的映射关系的hosts文件确实“不容易”);
2. hosts文件只能本机使用,主机维护困难。
因此设置了DNS服务,DNS将域名解析为IP地址。
1)客户机向DNS服务器发送域名查询请求;2)DNS服务器告知客户机Web服务器的IP地址;3)客户机与Web服务器通信。
(参考:DNS服务器-域名空间结构)
在DNS中,域名空间结构采用分层结构,包括:根域,顶级域,二级域和主机名称。域名空间的层次结构类似一个倒置的树状,在域名层次结构中,每一层称作一个域,每个域用一个点号”.”分开。(这样便于分级管理)
- 根域
- 顶级域
- |- 组织域
- |- 国家或地区域
- 二级域
- 主机名
根域
“.”表示根域名,根域名的服务器只有13台。在根域中保存了顶级域(一级域)这样一些域名。
顶级域
顶级域由域名分配组织ISO决定的。常见的顶级域分为组织域、国家或地区域。
顶级域 | 说明 |
---|---|
gov | 政府部门 |
com | 商业部门 |
edu | 教育部门 |
org | 民间团体组织 |
net | 网络服务机构 |
mil | 军事部门 |
顶级域 | 国家或地区 |
---|---|
cn | 中国 |
jp | 日本 |
uk | 英国 |
au | 澳大利亚 |
hk | 中国香港 |
二级域
顶级域之下就是二级域,二级域是由个人或企业向域名分配组织申请获取的。
三级域
接着二级域下是三级域,我们也叫主机名,常见的有www(用来代表网页服务)。三级域名是申请完二级域名后自己规定的。
三级域+二级域+顶级 域组成完整域名空间,并且域名全球唯一。
互联网中的域名是有结构有规划的。域名进行了分级(根域名是负责管理一级域名,一级域名负责管理自己的二级域名,二级域名负责管理自己的三级域名)
所有DNS服务器都知道全球的13台根DNS服务器的位置。
这里以请求”http://www.sina.com.cn/“为例,描述客户机请求DNS解析该地址的过程。
1. 客户机先请求本地域名服务器,如果该服务器中存在该域名同IP的映射关系,则返回对应的IP,否则继续执行下一步;
2. 本地域名服务器在不知道该域名的情况下,请求根DNS服务器,(所有DNS服务器都知道全球的13台根DNS服务器的位置。)根DNS服务器同样也不知道该域名对应的IP,但是它知道cn域名服务器的IP;
3. 于是本地域名服务器去请求cn域名服务器,询问该域名对应的IP,cn域名服务器同样也有可能不知道该域名对应IP,但是它知道com.cn域名服务器的IP;
4. 接着本地域名服务器又去请求com.cn域名服务器,询问该域名对应的IP,com.cn域名服务器同样也有可能不知道该域名对应的IP,但是它知道sina.com.cn域名服务器的IP;
5. 本地域名服务器又去请求sina.com.cn域名服务器,询问该域名对应的IP,该域名服务器当然知道该域名对应的IP(因为该域名就注册在该服务器下),最后将IP返回给本地域名服务器;
6. 本地域名服务器将查询到的IP,返回给客户机;
7. 客户机根据该IP地址去请求对应的Web服务器。
(1)从查询方式分
(2)从查询内容上分
网关的作用