[TOC] # 网络传输模型 ## OSI 七层模型 OSI(Open System Interconnect)的缩写,意为开放式系统互联包括 物理层、数据链路层、物理层、传输层、会话层、表示层、应用层; 第一层:物理层(PhysicalLayer) 规定通信设备的机械的、电气的、功能的和过程的特性,用以建立、维护和拆除物理链路连接。在这一层,数据的单位称为比特(bit)。属于物理层定义的典型规范代表包括:EIA/TIA RS-232、EIA/TIA RS-449、V.35、RJ-45等 第二层:数据链路层(DataLinkLayer): 在物理层提供比特流服务的基础上,建立相邻结点之间的数据链路,通过差错控制提供数据帧(Frame)在信道上无差错的传输,并进行各电路上的动作系列。数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。在这一层,数据的单位称为帧(frame)。数据链路层协议的代表包括:SDLC、HDLC、PPP、STP、帧中继等。 第三层是网络层 在 计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路,也可能还要经过很多通信子网。网络层的任务就是选择合适的网间路由和交换结点, 确保数据及时传送。网络层将数据链路层提供的帧组成数据包,包中封装有网络层包头,其中含有逻辑地址信息- -源站点和目的站点地址的网络地址。地址解析和路由是3层的重要目的。网络层还可以实现拥塞控制、网际互连等功能。在这一层,数据的单位称为数据包(packet)。网络层协议的代表包括:IP、IPX、RIP、OSPF等。 第四层是处理信息的传输层 第4层的数据单元也称作数据包(packets)。但是,当你谈论TCP等具体的协议时又有特殊的叫法,TCP的数据单元称为段 (segments)而UDP协议的数据单元称为“数据报(datagrams)”。这个层负责获取全部信息,因此,它必须跟踪数据单元碎片、乱序到达的 数据包和其它在传输过程中可能发生的危险。第4层为上层提供端到端(最终用户到最终用户)的透明的、可靠的数据传输服务。所为透明的传输是指在通信过程中 传输层对上层屏蔽了通信传输系统的具体细节。传输层协议的代表包括:TCP、UDP、SPX等。 第五层是会话层 这一层也可以称为会晤层或对话层,在会话层及以上的高层次中,数据传送的单位不再另外命名,而是统称为报文。会话层不参与具体的传输,它提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制。如服务器验证用户登录便是由会话层完成的。 第六层是表示层 这一层主要解决用户信息的语法表示问题。它将欲交换的数据从适合于某一用户的抽象语法,转换为适合于OSI系统内部使用的传送语法。即提供格式化的表示和转换数据服务。数据的压缩和解压缩, 加密和解密等工作都由表示层负责。 第七层应用层 应用层为操作系统或网络应用程序提供访问网络服务的接口。应用层协议的代表包括:Telnet、FTP、HTTP、SNMP等。 ## TCP/IP模型 TCP/IP(Transmission Control Protocol/Internet Protocol 传输控制协议/网际协议)模型共分为四层:应用层、传输层、网络层、数据链路层(网络接口层) 第一层:数据链路层 对应OSI的数据链路层、物理层,负责接收IP数据包并通过网络发送,或者从网络上接收物理帧,抽出IP数据包,交给IP层;常见的接口层协议有: Ethernet 802.3、Token Ring 802.5、X.25、Frame relay、HDLC、PPP ATM等 第二层:网络层: 负责相邻计算机之间的通信。其功能包括三方面。 处理来自传输层的分组发送请求,收到请求后,将分组装入IP数据报,填充报头,选择去往信宿机的路径,然后将数据报发往适当的网络接口。 处理输入数据报:首先检查其合法性,然后进行寻径--假如该数据报已到达信宿机,则去掉报头,将剩下部分交给适当的传输协议;假如该数据报尚未到达信宿,则转发该数据报。 处理路径、流控、拥塞等问题。 第三层:传输层 提供应用程序间的通信。其功能包括:一、格式化信息流;二、提供可靠传输。为实现后者,传输层协议规定接收端必须发回确认,并且假如分组丢失,必须重新发送,即耳熟能详的“三次握手”过程,从而提供可靠的数据传输。 传输层协议主要是:传输控制协议TCP(Transmission Control Protocol)和用户数据报协议UDP(User Datagram protocol)。 第四层:应用层 向用户提供一组常用的应用程序,比如电子邮件、文件传输访问、远程登录等。远程登录TELNET使用TELNET协议提供在网络其它主机上注册的接口。TELNET会话提供了基于字符的虚拟终端。文件传输访问FTP使用FTP协议来提供网络内机器间的文件拷贝功能。 应用层协议主要包括如下几个:FTP、TELNET、DNS、SMTP、NFS、HTTP。 # IP 地址简介 IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址。以下介绍了IP地址的相关信息: * IP地址范围 * IP地址的分类 * 特殊的IP地址 * 子网掩码组成 ## IP地址范围 以下分为IPV4版本的两种表达IP范围的方式,一种是计算机的实际工作原理二级制,另外是方便人们理解记忆十进制。 * 二进制,00000000.00000000.00000000.00000000 - 11111111.11111111.1111111.1111111 * 十进制,0.0.0.0 - 255.255.255.255 目前IPV4版本的地址,大约有43亿个IP地址(2^32次方)。 ## IP地址分类 国际互联网组织还将IPV4版本进行了分类,目前有五类: * A: 0.0.0.0 - 127.255.255.255 * B: 128.0.0.0 - 192.255.255.255 * C: 192.0.0.0.0 - 223.255.255.255 * D: 224.0.0.0 - 239.255.255.255 (组播) * E: 240.0.0.0 - 255.255.255.255 (科研) 根据RFC1918规定私有网络范围,以下私有网段不能在公网路由器中路由。 | RFC1918 规定区块名 | IP地址区段 | IP数量 | | --- | --- | --- | | 24位区块 | 10.0.0.0 – 10.255.255.255 | 16,777,216 | | 20位区块 | 172.16.0.0 – 172.31.255.255 | 1,048,576 | | 16位区块 | 192.168.0.0 – 192.168.255.255 | 65,536 | **腾讯子网规范** * A:腾讯云私网保留位 10.0.0.0 - 255.255.0.0 (cidr16-28) * B:腾讯云私网保留位 172.16.0.0 - 255.255.0.0 (cidr16-28) * C:腾讯云私网保留位 192.168.0.0 - 255.255.0.0 (cidr16-28) ## 特殊的IP地址 在IPV4版本分类网段的基础上,还保留了特殊的IP地址,如下: * 127.0.0.0 - 127.255.255.255 网络回环的测试地址 * 0.0.0.0 * 255.255.255.255 ## 子网掩码组成 子网掩码的作用主要是区分网络地址与主机地址。譬如IP:192.168.0.0 ,子网掩码255.255.255.0 ,cidr表示 8 (主机位),主机位于网络位的计算方式如下: * 网络位 32-8 =24 * 主机位 32-24= 8 ,2的8次方-2 = 254 ## 如何计算子网掩码 了解了基础知识后,我们通过以下两个个案例来分别看一下它的应用: * 案例1:存放100个IP,那么CIDR表示法应该是多少 * 案例2:存放1000个IP,那么CIDR表示法应该是多少 **案例1** 问题:我存放 100个IP,CIDR表示法应该是多少,计算的过程是? 解题:192.168.0.0/24,其中24为网络位,用32(总共长度)-24(网络位)=8 (主机位), 2的8次方=256,再减去2,254 > 100 ,所以网络位24可以存放下这100个IP。所以CIDR为24。 **案例2** 问题:我存放1000个IP,那么CIDR表示法应该是多少?计算过程是? 阶梯:192.168.1.0/22(网络位),主机位(10) , 地址 2^10 -2 = 1024-2 =1022 > 1000 个IP。所以CIDR为22。 # TCP/IP ## TCP报文 ![](https://img.kancloud.cn/71/58/7158e8f5468b9237c71ed9f99df76e4f_613x207.png) 以下为TCP的报文标志位: * URG:指示报文中有紧急数据,应尽快传送(相当于高优先级的数据) * PSH:为1表示是带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队 * RST:TCP连接中出现严重差错(如主机崩溃),必须释放连接,在重新建立连接 * FIN:发送端已完成数据传输,请求释放连接 * SYN:处于TCP连接建立过程 (Synchronize Sequence Numbers) * ACK:确认序号标志,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段 ## 建立连接 ![](https://img.kancloud.cn/66/1d/661d956ca45a70a2aa2d3235b9d61e2b_1102x501.png) 介绍一下建立连接的三次握手过程: * 客户端向服务器发送请求,其首部中的同步比特 SYN 应置为1,并选择序号 x,表明传送数据时的第一个数据字节的序号是 x(设置初始段序号SEQ = x ,例如SEQ = 26500) * 服务器接收到客户端的请求,如同意,则发回确认SYN,ACK(ACK 26501) * B 在确认报文段中应将 SYN 置为 1,其确认号ACK应为 x + 1(ACK 26501),同时也给出自己的选择序号 y(设置初始段序号SEQ = y ,例如SEQ = 29010)。 * A 收到此报文段后,向 B 给出确认,其确认号应为 y + 1(ACK = 29011)。 * A 的 TCP 通知上层应用进程,连接已经建立。 当运行服务器进程的主机 B 的 TCP 收到主机 A 的确认后,也通知其上层应用进程,连接已经建立。 由于客户对报文段进行了编号,它知道哪些序号是期待的,哪些序号是过时的。当客户发现报文段的序号是一个过时的序号时,就会拒绝该报文段,这样就不会造成重复连接。 ## 关闭连接 ![](https://img.kancloud.cn/1f/33/1f33ed29b1d7b3597288a5875e2367c3_943x532.png) 介绍一下关闭连接的四次挥手过程: * 客户端进程发出连接释放报文,并且停止发送数据。释放数据报文首部,FIN=1,其序列号为seq=u(等于前面已经传送过来的数据的最后一个字节的序号加1),此时,客户端进入FIN-WAIT-1(终止等待1)状态。 TCP规定,FIN报文段即使不携带数据,也要消耗一个序号。 * 服务器收到连接释放报文,发出确认报文,ACK=1,ack=u+1,并且带上自己的序列号seq=v,此时,服务端就进入了CLOSE-WAIT(关闭等待)状态。TCP服务器通知高层的应用进程,客户端向服务器的方向就释放了,这时候处于半关闭状态,即客户端已经没有数据要发送了,但是服务器若发送数据,客户端依然要接受。这个状态还要持续一段时间,也就是整个CLOSE-WAIT状态持续的时间。 * 客户端收到服务器的确认请求后,此时,客户端就进入**FIN-WAIT-2(终止等待2)**状态,等待服务器发送连接释放报文(在这之前还需要接受服务器发送的最后的数据)。 * 服务器将最后的数据发送完毕后,就向客户端发送连接释放报文,FIN=1,ack=u+1,由于在半关闭状态,服务器很可能又发送了一些数据,假定此时的序列号为seq=w,此时,服务器就进入了**LAST-ACK(最后确认)**状态,等待客户端的确认。 * 客户端收到服务器的连接释放报文后,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时,客户端就进入了TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。 * 服务器只要收到了客户端发出的确认,立即进入CLOSED状态。同样,撤销TCB后,就结束了这次的TCP连接。可以看到,服务器结束TCP连接的时间要比客户端早一些。 # 单位换算