1、TCP/IP 协议栈及 OSI 参考模型详解OSI 参考模型OSI RM:开放系统互连参考模型(open systeminterconnection reference model)OSI 参考模型具有以下优点: 简化了相关的网络操作; 提供设备间的兼容性和标准接口; 促进标准化工作; 结构上可以分隔; 易于实现和维护。20 世纪 60 年代以来,计算机网络得到了飞速增长。各大厂商为了在数据通信网络领域占据主导地 位,纷纷推出了各自的网络架构体系和标准,如 IBM 公司的 SNA,Novell IPX/SPX 协议,Apple公司的 AppleTalk 协议,DEC 公司的 DECnet,以及
2、广泛流行的 TCP/IP 协议。同时,各大厂商针对自己的协议生产出了不同的硬件和软件。各个厂商的共同努力促进了网络技术的快速发展和网络设备种类的迅速增长。但由于多种协议的并存,也使网络变得越来越复杂;而且,厂商之间的网络设备大部分不能兼容,很难进行通信。为了解决网络之间的兼容性问题,帮助各个厂商生产出可兼容的网络设备,国际标准化组织 ISO 于1984 年提出了 OSI RM(OpenSystem Interconnection Reference Model,开放系统互连参考模型)。OSI 参考模型很快成为计算机网络通信的基础模型。在设计 OSI 参考模型时,遵循了以下原则:各个层之间有清晰
3、的边界,实现特定的功能;层次的划分有利于国际标准协议的制定;层的数目应该足够多,以避免各个层功能重复。OSI 分层通常 OSI 参考模型第一层到第三层称为底层(lower layer),又叫介质层(media layer),底层负责数据在网络中的传送,网络互连设备往往位于下三层,以硬件和软件的方式来实现。OSI 参考模型的第五层到第七层称为高层(upper layer),又叫住几层(host layer),高层用于保障数据的正确传输,以软件方式来实现。OSI 七层功能:TCP/IP 协议栈由于 OSI 模型和协议比较复杂,所以并没有得到广泛的应用。而 TCP/IP(transfer contr
4、ol protocol/internet protocol,传输控制协议/网际协议)模型因其开放性和易用性在实践中得到了广泛的应用,TCP/IP 协议栈也成为互联网的主流协议。TCP/IP 模型各个层次分别对应于不同的协议。 TCP/IP 协议栈是数据通信协议的集合 ,包含许多协议。其协议栈名字来源于其中最主要的两个协议 TCP(传输控制协议)和 IP(网际协议)。TCP/IP协议栈负责确保网络设备之间能够通信。它是一组规则,规定了信息如何在网络中传输。TCP/IP 模型的层间通信与数据封装TCP/IP 每一层都让数据得以通过网络进行传输,这些层之间使用 PDU(协议数据单元)彼此交换信息,确
5、保网络设备之间能够通信。A. 传输层数据中加入 TCP 报头后得到 PDU 被称为 segment(数据段);B. 数据段被传递给网络层,网络层添加 IP 报头得到的 PDU 被称为 packet(数据包);C. 数据包被传递到数据链路层,封装数据链路层报头得到的 PDU 被称为 frame(数据帧);D. 帧被转换为比特,通过网络介质传输。这种协议栈向下传递数据,并添加报头和报尾的过程称为封装,数据被封装并通过网络传输后,接收设备将删除添加的信息,并根据报头中的信息决定如何将数据沿协议栈上传给合适的应用程序,这个过程称为解封装。不同设备的对等层之间依靠封装和解封装来实现相互间的通信。物理层物
6、理层功能: 规定介质类型、接口类型、信令类型; 规范在终端系统之间激活、维护和关闭物理链路的电气、机械、流程和功能等方面的要求; 规范电平、数据速率、最大传输距离和物理接头等特征。物理层标准规定了物理介质和用于将设备与物理介质相连的接头。如上图,局域网常用的物理层标准有 IEEE 指定的以太网标准 802.3、令牌总线标准 802.4、令牌环网标准 802.5 以及美国国家标准组织 ANSI 的 X3T9.5 委员会制订的光缆标准 FDDI(fiber distributed data interface,光纤分布式数据接口)等。广域网常用的物理层标准有电子工业协会和电信工业协会 EIA/TI
7、A 制定的公共物理层接口标准 EIA/TIA-232(即 RS-232)、国际电信联盟ITU 制定的串行线路接口标准 V.24 和 V.35、以及有关各种数字接口的物理和电气特性的标准G.703 等。物理层介质和物理层设备:物理层介质: 同轴电缆(coaxical cable) 双绞线(twisted pair) 光纤(fiber) 无线电波(wireless raido)同轴电缆:同轴电缆是一种早期使用的传输介质,同轴电缆的标准分为两种,10BASE2 和 10BASE5.这两种标准都支持 10Mbps 的传输速率,最长传输距离分别为 185 米和 500 米。10BASE5 和 10BAS
8、E2 的同轴电缆使用的同轴电缆的直径分别为 9.5mm 和 5mm,所以前者又称为粗缆,后者又称为细缆。一般情况下,10BASE2 同轴电缆使用 BNC 接头,10BASE5 同轴电缆使用 N 型接头。目前,10Mbps 的传输速率早已不能满足目前企业网络需求,因此同轴电缆在目前企业网络中很少应用。双绞线:双绞线采用了一对互相绝缘的金属导线互相绞合的方式来抵御一部分外界电磁波干扰。把两根绝缘的铜导线按一定密度互相绞在一起,可以降低信号干扰的程度,每一根导线在传输中辐射的电波会被另一根线上发出的电波抵消,“双绞线”的名字也是由此而来的。与同轴电缆相比双绞线(twistedpair)具有更低的制造
9、和部署成本,因此在企业网络中被广泛应用。双绞线可分为屏蔽双绞线(shieldedtwisted pair,STP)和非屏蔽双绞线(unshieldedtwisted pair,UTP)。屏蔽双绞线在双绞线与外层绝缘封套之间有一个金属屏蔽层,可以屏蔽电磁干扰。双绞线有很多种类型,不同类型的 双绞线所支持的传输速率一般也不相同。例如,3 类双绞线支持10Mbps 传输速率;5 类双绞线支持 100Mbps 传输速率,满足快速以太网标准;超 5 类双绞线及更高级别的双绞线支持千兆以太网传输。双绞线线序:568A 线序:1-绿白,2-绿,3-橙白,4-蓝,5-蓝白,6-橙,7-棕白,8-棕568B 线
10、序:1-橙白,2-橙,3-绿白,4-蓝,5-蓝白,6 绿,7-棕白,8-棕根据网线两端连接网络设备的不同,网线又分为直通线(平行线)和交叉线两种。直通线(平行线)就是按照前面介绍的 568A 标准或 568B 标准制作(即双绞线两端的线序一样,568A 的线序不常用,现主流用的都是 568B 的线序)交叉线的一端保持原来的线序,另一端把 1 和 3 对调,2 和 5 对调。直通线和交叉线的应用:1. 同种类型设备之间使用交叉线连接,不同类型设备之间使用直通线连接;2. 路由器和 PC 属于 DTE(DataTerminal Equipment,数据终端设备)类型设备,交换机和 HUB数据 DC
11、E(Data Circuit-terminatingEquipment,数据通信设备)类型设备。光纤双绞线和同轴电缆传输数据时使用的是电信号,而光纤传输数据时使用的是光信号。光纤支持的传输速率包括 10Mbps,100Mbps,1Gbps,10Gbps,甚至更高。根据光纤传输光信号模式的不同,光纤又可分为单模光纤和多模光纤。单模光纤只能传输一种模式的光,不存在模间色散,因此适用于长距离高速传输。多模光纤允许不同模式的光在一根光纤上传输,由于模间色散较大而导致信号脉冲展宽严重,因此多模光纤主要用于局域网中的短距离传输。光纤连接器种类喝多,常用的连接器包括 ST,FC,SC,LC 连接器。串口电缆
12、网络通信中常常会用到各种各样的串口电缆。常用的串口电缆标准为 RS-232,同时也是推荐的标准。但是 RS-232 的传输速率有限,传输距离仅为 6 米。其他的串口电缆标准可以支持更长的传输距离,例如 RS-422 和 RS-485 的传输距离可达 1200 米。RS-422 和 RS-485 串口电缆通常使用 V.35 接头,这种接头在上世纪 80 年代已经淘汰,但是现在仍在帧中继、ATM 等传统网络上使用。V.24是 RS-232 标准的欧洲版。 RS-232 本身没有定义接头标准,常用的接头类型为 DB-9 和 DB-25。现在,RS-232 已逐渐被 FireWire、USB 等新标准
13、取代,新产品和新设备已普遍使用 USB 标准。冲突域如图是一个 10BASE5 以太网,每个主机都是用同一根同轴电缆来与其它主机进行通信,因此,这里的同轴电缆又被称为共享介质,相应的网络被称为共享介质网络,或简称为共享式网络。共享式网络中,不同的主机同时发送数据时,就会产生信号冲突的问题,解决这一问题的方法一般是采用载波侦听多路访问/冲突检测技术( carrier sense multiple access/collisiondetection)。CSMA/CD 的基本工作过程如下:1. 终端不停地检测共享线路的状态。如果线路空闲,则可以发送数据;如果线路不空闲,则等待一段时间后继续检测(延时
14、时间由退避算法决定)。2. 如果有另一个设备同时发送数据,两个设备发送的数据会产生冲突。3. 终端设备检测到冲突之后,马上停止发送自己的数据,并发送特殊阻塞信息,以强化冲突信号,使线路上其他站点能够尽早检测到冲突。4. 终端设备检测到冲突后,等待一段时间之后再进行数据发送(延时时间由退避算法决定)。CSMA/CD 的工作原理可简单总结为:先听后发,边发边听,冲突停发,随机延迟后重发。物理层设备:中继器和集线器数据链路层数据链路层又分为 MAC 子层和 LLC 子层MACSub-layer:media access controlsub-layer 介质访问控制子层MAC 子层负责指定数据如何通
15、过物理线路进行传输,并向下与物理层通信,它定义了物理编址、网络拓扑、线路规范、错误通知、按序传递和流量控制等功能。LLCSub-layer:logic link control sub-layer 逻辑链路控制子层LLC 子层负责识别协议类型并对数据进行封装以便通过网络进行传输。LLC 子层主要执行数据链路层的大部分功能和网络层的部分功能。如帧的收发功能,在发送时,帧由发送的数据加上地址和CRC 校验等构成,接收时将帧拆开,执行地址识别、CRC 校验,并具有帧顺序控制、差错控制、流量控制等功能。此外,它还执行数据报、虚电路、多路复用等部分网络层的功能。数据链路层协议数据链路层协议规定了数据链路
16、层帧的封装方式。局域网常用的数据链路层协议有 IEEE802.2 LLC 标准。广域网常用的数据链路层协议有: HDLC(high-level data link control,高级数据链路控制) PPP(point-to-point protocol,点到点协议) FR(frame relay,帧中继)数据链路层-以太网地址(MAC 地址)网络设备的 MAC 地址是全球唯一的。MAC 地址由 48 个二进制位组成,通常我们用十六进制数字来表示。其中前 6 位十六进制数字由 IEEE 统一分配给设备制造商,后 6 位十六进制数字由厂商自行分配。网络层 功能:在不同的网络之间转发数据包 提供逻
17、辑地址,如果数据跨网络传递,则需要使用逻辑地址来寻址。 路由:将数据报文从一个网络转发到另一个网络。 设备:路由器、三层交换机网络层协议常用网络层协议有: IP(Internet Protocol):IP 为网络层最主要的协议,其功能即为网络层的主要功能,一是提供逻辑编址,二是提供路由功能,三是报文的封装和解封装。ICMP、ARP、RARP 协议辅助 IP工作。 ICMP(Internet Control Message Protocol)是一个管理协议并为 IP 提供信息服务,ICMP消息承载在 IP 报文中。 ARP(Address Resolution Protocol)实现 IP 地址
18、到硬件地址的动态映射,即根据已知的 IP地址获得相应的硬件地址。 RARP(Reverse Address Resolution Protocol)实现硬件地址到 IP 地址的动态映射,即根据已知的硬件地址获得相应的 IP 地址。网络层地址:网络地址在网络层唯一标识一台网络设备。网络地址包含两部分:网络 ID+主机 ID(下节主要内容)传输层主要功能: 分段上层数据; 建立端到端连接; 将数据从一端主机传送到另一端主机; 保证数据按序、可靠、正确传输。传输层协议:传输层协议主要包含传输控制协议 TCP(transfer control protocol)和用户数据报文协议UDP(user da
19、tagram protocol)TCP 提供面向连接的、可靠的字节流服务。面向连接意味着使用 TCP 协议作为传输层协议的两个应用之间在相互交换数据之前必须建立一个 TCP 连接。TCP 通过确认、校验、重组等机制为上层应用提供可靠的传输服务。但是 TCP 连接的建立以及确认、校验等机制都需要耗费大量的工作并且会带来大量的开销。UDP 提供简单的、面向数据报的服务。UDP 不保证可靠性,即不保证报文能够到达目的地。 UDP适用于更关注传输效率的应用,如 SNMP、Radius 等,SNMP 监控网络并断续发送告警等消息,如果每次发送少量信息都需要建立 TCP 连接,无疑会降低传输效率,所以诸如
20、 SNMP、Radius 等更注重传输效率的应用程序都会选择 UDP 作为传输层协议。另外,UDP 还适用于本身具备可靠性机制的应用层协议。应用层功能 为用户提供接口、处理特定的应用; 数据加密、解密、压缩、解压缩; 定义数据表示的标准。应用层协议应用层有许多协议,以下协议可以帮助您使用和管理 TCP/IP 网络: FTP(File TransferProtocol) 文件传输协议。用于传输独立的文件,通常用于交互式用户会话。 HTTP(HypertextTransfer Protocol)超文本传输协议。 用于传输那些构成万维网上的页面的文件。 TELNET :远程终端访问。用于传送具有 T
21、ELNET 控制信息的数据。它提供了与终端设备或终端进程交互的标准方法,支持终端到终端的连接及进程到进程分布式计算的通信。 SMTP(Simple MessageTransfer Protocol)简单邮件传输协议 和 POP3(Post OfficeProtocol)邮局协议用于发送和接收邮件。 DNS(Domain NameServer)是一个域名服务的协议,提供域名到 IP 地址的转换,允许对域名资源进行分散管理。 TFTP(Trivial FileTransfer Protocol)简单文件传输协议。设计用于一般目的的、高吞吐量的文件传输。 RIP(RoutingInformation
22、 Protocol)路由器用来在 IP 网络上交换路由信息的协议。 SNMP(Simple NetworkManagement Protocol)用于收集网络管理信息,并在网络管理控制台和网络设备(例如路由器、网桥和服务器)之间交换网络管理信息。 Radius(RemoteAuthentication Dial In User Service)拨号接入远端认证协议完成接入用户的认证、授权、计费功能的协议。TCP/IP 协议栈的封装过程以传输层采用 TCP 或者 UPD、网络层采用 IP、链路层采用 Ethernet 为例,可以看到 TCP/IP 中报文的封装过程如上图所示。用户数据经过应用层协
23、议封装后传递给传输层,传输层封装 TCP 头部,交给网络层,网络层封装 IP 头部后,再交给数据链路层,数据链路层封装 Ethernet 帧头和帧尾,交给物理层,物理层以比特流的形式将数据发送到物理线路上。TCP SegmentTCP 协议概述:TCP 为应用程序提供一种面向连接的、可靠的服务。TCP 的可靠性: 面向连接的传输 最大报文段长度 传输确认机制 首部和数据的检验和 流量控制TCP 首部格式TCP 使用 IP 作为网络层协议,TCP 数据段被封装在一个 IP 数据包内。TCP 数据段由 TCP Head(头部)和 TCP Data(数据)组成。TCP 最多有 60 个字节的首部,如
24、果没有任选字段,正常的长度是 20 字节。TCP Head 如上图标识的一些字段组成,这里列出几个常用的字段。 16 位源端口号:TCP 会为源应用程序分配一个源端口号。 16 位目的端口号:目的应用程序的端口号。每个 TCP 段都包含源和目的端的端口号,用于寻找发端和收端应用进程。这两个值加上 IP 首部中的源端 IP 地址和目的端 IP 地址可以唯一确定一个 TCP 连接。 32 位序列号:用于标识从 TCP 发端向 TCP 收端发送的数据字节流。 32 位确认序列号:确认序列号包含发送确认的一端所期望收到的下一个序号。确认序列号为上次成功收到的数据序列号加 1。 4 位首部长度:表示首部
25、占 32bit 字的数目。因为 TCP 首部的最大长度为 60 字节。 16 位窗口大小:表示接收端期望接收的字节,由于该字段为 16 位,因而窗口大小最大值为65535 字节。 16 位检验和:检验和覆盖了整个 TCP 报文段,包括 TCP 首部和 TCP 数据。该值由发端计算和存储并由接收端进行验证。TCP 的三次握手(建立连接)和四次挥手(断开连接)TCP 连接的建立是一个三次握手的过程。如图所示:1、请求端(通常也称为客户端)发送一个 SYN 段表示客户期望连接服务器端口,初始序列号为a。2、服务器发回序列号为 b 的 SYN 段作为响应。同时设置确认序号为客户端的序列号加 1(a+1
26、)作为对客户端的 SYN 报文的确认。3、客户端设置序列号为服务器端的序列号加 1(b+1)作为对服务器端 SYN 报文段的确认。这三个报文段完成 TCP 连接的建立。TCP 连接的建立是一个三次握手的过程,而 TCP 连接的终止则要经过四次握手。如图所示:1、请求端(通常也称为客户端)想终止连接则发送一个 FIN 段,序列号设置为 a。2、服务器回应一个确认序号为客户端的序列号加 1(a+1)的 ACK 确认段,作为对客户端的 FIN报文的确认。3、服务器端向客户端发送一个 FIN 终止段(设置序列号为 b,确认号为 a+1)。4、客户端返回一个确认报文(设置序列号为 b+1)作为响应。以上
27、四次交互完成双方向的连接的关闭。TCP 滑动窗口机制:TCP 滑动窗口技术通过动态改变窗口大小来调节两台主机间的数据传输。每个 TCP/IP 主机支持全双工数据传输,因此 TCP 有两个滑动窗口:一个用于接收数据,另一个用于发送数据。TCP 使用肯定确认技术,其确认号指的是下一个所期待的字节。如图中所示以数据单方向发送为例,介绍滑动窗口如何实现流量控制。服务器端向客户端发送 4 个大小为 1024 字节的数据段,其中发送端的窗口大小为 4096,客户端到以 ACK4097 响应,窗口大小调整为 2048,表明客户端(即接收端)缓冲区只能处理 2048 个字节的数据段。于是发送端改变其发送速率。
28、发送接收端能够接收的数据段大小 2048 的数据段。UDP 协议概述 UDP 为应用程序提供面向无连接的服务。传输数据之前源端和目的端不需要建立连接。 不需要维持连接状态,收发状态等,因此服务器可同时向多个客户端传输相同的消息。 UDP 适用于对传输效率要求高的运用。UDP 首部格式UDP 和 TCP 一样都使用 IP 作为网络层协议, TCP 数据报被封装在一个 IP 数据包内。由于 UDP 不象 TCP 一样提供可靠的传输,因此 UDP 的报文格式相对而言较简单。整个 UDP 首部有如下标识: 16 位源端口号:为源端应用程序分配的一个源端口号。 16 位目的端口号:目的应用程序的端口号
29、16 位 UDP 长度:是指 UDP 首部和 UDP 数据的字节长度。该字段的最小值为 8。 16 位 UDP 检验和:该字段提供与 TCP 检验和同样的功能,只不过在 UDP 协议中该字段是可选的。TCP VS UDPIP packet网络层收到传输层的 TCP 数据段后会再加上网络层 IP 头部信息。普通的 IP 头部固定长度为 20 个字节(不包含 IP 选项字段)。IP 报文头主要由以下字段组成:报文长度是指头部占 32 比特字的个数,包括任何选项。由于它是一个 4 比特字段,24=16,除掉全 0 项共有 15 个有效值比特字段,其中最大值也为 15,表示头部占 15 个 32 比特
30、。因此 32*15/8=60 字节,头部最长为 60 字节。版本号(Version)字段标明了 IP 协议的版本号,目前的协议版本号为 4。下一代 IP 协议的版本号为 6。8 比特的服务类型(TOS,Type of Service)字段包括一个 3 比特的优先权字段(COS,Class of Service),4 比特 TOS 字段和 1 比特未用位。 4 比特 TOS 分别代表最小时延、最大吞吐量、最高可靠性和最小费用。总长度(Total length)是整个 IP 数据报长度,包括数据部分。由于该字段长 16 比特,所以 IP 数据报最长可达 65535 字节。尽管可以传送一个长达 65
31、535字节的 IP 数据报,但是大多数的链路层都会对它进行分片。而且,主机也要求不能接收超过 576 字节的数据报。UDP 限制用户数据报长度为 512 字节,小于 576 字节。而事实上现在大多数的实现(特别是那些支持网络文件系统 NFS 的实现)允许超过 8192 字节的 IP 数据报。标识符(Identification)字段唯一地标识主机发送的每一份数据包。通常每发送一份报文它的值就会加1。生存时间(TTL,Time to Live)字段设置了数据包可以经过的路由器数目。一旦经过一个路由器,TTL 值就会减 1,当该字段值为 0 时,数据包将被丢弃。协议字段确定在数据包内传送的上层协议
32、,和端口号类似,IP 协议用协议号区分上层协议。 TCP 协议的协议号为 6,UDP 协议的协议号为 17。报头校验和(Head checksum)字段计算 IP 头部的校验和,检查报文头部的完整性。源 IP地址和目的 IP 地址字段标识数据包的源端设备和目的端设备 IP 地址信息。Ethernet frame以太网头部由三个字段组成:DMAC:表示目的终端 MAC 地址。SMAC:表示源端 MAC 地址。LENGTH/TYPE 字段:根据值的不同有不同的含义:当 LENGHT/TYPE 1500 时,代表该数据帧的类型(比如上层协议类型)常见的协议类型有: 0X0800 IP 数据包 0X0806 ARP 请求/ 应答报文 0X8035 RARP 请求/应答报文。当 LENGTH/TYPE 1500 时,代表该数据帧的长度。案例分析如上图所示,通过例举出的 TELNET 协议的抓包实例,进一步加深对报文封装的理解。上图为 AR1 使用 TELNET 协议远程登录 AR2 进行的 TCP 三次握手过程。