3.4 TCP/IP体系结构各层协议
3.4 TCP/IP体系结构各层协议
3.4.1 网络接口层
TCP/IP模型的基层是网络接口层。负责数据帧的发送和接收,即将帧放到网上,或从网上把帧取下来。网络接口层包括那些能使TCP/IP与物理网络进行通信的协议,并且对应着OSI模型的物理层和数据链路层。
TCP/IP模型的网络接口层实际上并没有规定任何具体协议,各物理网络可以使用自己的物理层协议和数据链路层协议,这种灵活性旨在适应各种网络类型。数据链路层不是TCP/IP协议的一部分,但它是各种通信网和TCP/IP之间的接口,包括多种广域网(Internet和X.25公用数据网等),也包括各种局域网。一般情况下,各物理网络不需要在数据链路层上设置专门的协议,TCP/IP一般通过Internet串行线路协议(SLIP)或点对点协议(PPP)在串行线上进行数据传送。
3.4.2 网络层
1.互联网协议IP
互联网协议IP不仅为各个互连的网络提供统一的数据包格式,而且还提供寻址、路由选择、数据的分段和重组等功能,能将数据包从一个网络转发到另一个网络。
IP协议以包为单位传输数据,称为IP数据报,各个IP数据报之间是相互独立的,提供不可靠的点对点无连接的数据报传输机制。
(1)IP数据报
IP数据报是一个可变长度的包,最小长度为20字节,最大长度65536字节。它由头部和数据两部分组成,如图3-8所示。头部长度为20-60字节,下面对头部中各字段的作用做简单介绍。
图3-8 IP数据报格式
版本 | 头长度 | 服务类型 | 分组长度 | |
重装标识 | 标志 | 段偏移 | ||
生存期 | 协议号 | 校验和 | ||
源IP地址 | ||||
目的IP地址 | ||||
选项 | ||||
数据 |
• 版本号:表示IP的版本,目前多用的版本是IPv4,占4比特;
• 头部长度:定义报文头部的长度,单位是4字节,例如,该部分表示的值是5(0110),则表示头部长度为5×4=20字节,占4比特;
• 服务类型:定义数据报的优先级、控制时延、处理能力和可靠性服务类型。占8比特;
• 分组长度:也叫数据报总长度,占16比特,包括头和数据部分,最大长度为65535字节;
• 重装标识:是数据报编号,用于识别同一报文的各个分段,便于重装,报文的每个分段都有标识,属于同一个数据报的分段其标识也相同,占16比特;
• 标志:占3比特,有一位备用。
• 段偏移:它表示数据报是否可以被分段,如果分段则指明本分段在数据报中的位置,占13比特。由于一个数据报中的各分段到达顺序可能与发送顺序不一致,通过标志使接收的报文能完整。单段和多段数据报的第1个分段的段偏移为0,每个数据报最多可分8192个分段。
• 生存期:定义了数据报被丢弃前可以传输的跳数,占8比特。源节点在创建数据报时,设置一个初始值,在传输过程中,数据报每经过一个路由器,生存期减1,当生存期为0时,该数据报将被丢弃,主要是避免数据报在路由器之间无休止地循环传输;
• 协议号:定义了封装在数据报中是哪一种上层协议(TCP,UDP等),占8比特。当前定义和分配了协议号的协议大约有50种,其中ICMP为1号,TCP为6号。
• 检验和:是IP报头的校验和,用于检查报文头部的完整性,占16比特。
• 选项:选项字段是任选的由一些长度可变的不同代码组成,占32比特,当报头的长度不是32比特的整数倍时,加填充位至32比特的整数倍。它为IP数据报提供了更多的功能,用来控制路由、时序、管理和定位等。
网络号 | 主机号 | 地址类型 | 举例 | 用途 |
全0 | 全0 | 本机地址 | 0.0.0.0 | 启动时使用 |
任意 | 全0 | 网络号 | 61.0.0.0 | 标识一个网络 |
任意 | 全1 | 直接广播地址 | 129.21.255.255 | 在特定网上广播 |
全1 | 全1 | 有限广播地址 | 255.255.255.255 | 在本网段上广播 |
第一段为127 | 任意 | 回送地址 | 127.0.0.1 | 测试 |
A类私有地址 | 10.0.0.1~10.255.255.254 | 保留的内部地址 | ||
B类私有地址 | 172.16.0.1~172.31.255.254 | 保留的内部地址 | ||
C类私有地址 | 192.168.0.1~192.168.255.254 | 保留的内部地址 |
(3)子网和子网掩码
①子网编址
10101010 01011111 11000000 000000000(170.95.192.0)
图3-10 子网示意图1
图3-11 子网示意图2
②子网掩码
子网掩码的特性有:
• 子网掩码必须是由一串连续的1,再跟上一串连续的0所组成。
• A、B、C三种网络所对应的子网掩码分别为:
A类:255.0.0.0
B类:255.255.0.0
C类:255.255.255.0
③子网规划与划分
4个机房,每个房间有25台机器,那就是需要4个子网,每个子网下面最少25台主机。
注意:在做网络规划时要考虑扩展性,对于这个例题,一般机房能容纳机器数量是固定的,建设好之后向机房增加机器的情况较少,增加新机房(新子网)情况较多。
我们依据子网内最大主机数来确定借几位。
使用公式 2n -2 ≥主机数
在本例题中是主机数是25,即2n-2 ≥ 25。
所以主机位数n为5,相对应的子网需要借3位,如图3-12所示。
图3-12 子网示意图3
图3-13 子网示意图4
11000000 10101000 00001010 00100000 = 192.168.10.32
11000000 10101000 00001010 01000000 = 192.168.10.64
11000000 10101000 00001010 01100000 = 192.168.10.96
11000000 10101000 00001010 10000000 = 192.168.10.128
11000000 10101000 00001010 10100000 = 192.168.10.160
11000000 10101000 00001010 11000000 = 192.168.10.192
子网掩码:11111111 11111111 11111111 11100000 = 255.255.255.224
子网1:192.168.10.32
主机IP:192.168.10.33 ~ 192.168.10.62
子网2:192.168.10.64
主机IP:192.168.10.65 ~ 192.168.10.94
子网3:192.168.10.96
主机IP:192.168.10.97 ~ 192.168.10.126
子网4:192.168.10.128
主机IP:192.168.10.129 ~ 192.168.10.158
子网5:192.168.10.160
主机IP:192.168.10.161 ~ 192.168.10.190
子网6:192.168.10.192
主机IP:192.168.10.193 ~ 192.168.10.222
子网掩码都是:255.255.255.224
在这个例题里只要取出前面的4个子网就可以完成题目了。
①IPv6 分组
IPv6分组由头部和负载两个部分组成。
图3-14 IPv6分组及基本头部格式
和跳段数限制(8位,生存时间)。后面是负载,至少1280字节长,或者在可变MTU(最大传输单元)大小环境中这个值为1500字节,负载在标准模式下最大可为65535字节。
IPv6分组的基本头部是一个固定长度的报头,共有8个字段,长度是40字节,其基本格式如图3-14所示。
③IPv6与IPv4互通技术
IPv6已被认为是下一代互联网络协议核心标准之一。但是,一种新的协议从诞生到广泛应用需要一个过程,尤其是对于IPv4仍然很好的支撑着的Internet而言。在IPv6的网络流行于全球之前,总是有一些网络首先使用IPv6协议栈并希望能够与当前的Internet正常通信。为达到这一目的,研究者们必须开发出IPv4 / IPv6互通技术以保证IPv4能够平稳过渡到IPv6,同时还要保证对信息传递的高效。
目前解决过渡问题基本技术主要有三种:双协议栈、隧道技术和NAT-PT。
• 双协议栈 ( Dual Stack)
• 隧道技术 ( Tunnel)
隧道技术提供了一种以现有IPv4路由体系来传递IPv6数据的方法:将IPv6的分组作为无结构意义的数据,封装在IPv4数据报中,被IPv4网络传输。根据建立方式的不同,隧道可以分成两类:(手工)配置的隧道和自动配置的隧道。隧道技术巧妙地利用了现有的IPv4网络,它的意义在于提供了一种使IPv6的节点之间能够在过渡期间通信的方法,但它并不能解决IPv6节点与IPv4节点之间相互通信的问题。
2.网际控制报文协议(Internet Control Message Protocol, ICMP)
在主机资源不足的情况下,IP可能丢弃某些数据报,同时IP也不检查数据链路层遗失或丢弃的报文,因此,IP提供的是一种不可靠的无连接报文分组传送服务,同时IP数据报在传送时可能会出现差错、故障和发生拥塞等。为此,在TCP/IP的网络层专门设计了网际控制报文协议ICMP。当路由器发现传输错误时,立即向信源主机发送ICMP报文,报告出错情况,以便信源主机采取相应的纠正措施。ICMP是IP正式协议的一部分,其数据报是通过IP送出。
ICMP报文本身是利用IP数据报承载的,因此,它的头部还是IP数据报的头部,其格式如图3-15所示。
图3-15 ICMP报文的格式
ICMP数据包结构
• 类型:表示ICMP数据包类型,占8位。
• 代码:表示指定类型中的一个功能。如果一个类型中只有一种功能,代码域置为0,占8位。
• 检验和:数据包中ICMP部分上的一个16位检验和,占16位。
3.地址解析协议(Address Resolution Protocol, ARP)
4.反向地址解析协议(Reverse Address Resolution Protocol, RARP)
3.4.3 运输层
网络层可以做到将数据从源主机传到目的主机。运输层的最终目标是向用户(应用程序)的进程提供有效、可靠的服务。传输服务是通过建立连接的两个传输实体之间所采用的传输协议来实现的。
TCP/IP的传输层主要有TCP和UDP两个协议,当需要可靠的端到端的传输服务时,就需要使用TCP。
1.传输控制协议 (Transmission Control Protocol, TCP)
传输控制协议TCP是一个面向连接的协议,提供有序可靠全双工虚电路传输服务。它通过认证、重传机制等方式确保数据的可靠传输。TCP可以在众多的网络上工作,在一个分组可能发生丢失、破坏、重复、延迟或失序情况下,TCP服务可提供一种可靠的进程间通信机制,可以自动纠正各种差错。
(1)TCP提供的服务
TCP提供的服务有以下特征:
• 面向连接:一个应用程序在通信前要先建立连接,数据传输完后要释放连接。
• 点对点通信:每个TCP连接是两个端点间的点到点的通信。
• 高可靠性:确保数据的正确性,不会发生数据丢失和乱序。
• 全双工通信。
• 采用字节流方式:如果字节流太长,可将其分成独立报文交给网络层进行发送。
(2)TCP的段格式
由于TCP主要是应用在大流量数据传输的情况,所以需要将长的数据流分段,其段结构如图3-16所示。
图3-16 TCP段格式
(3)TCP的端口号
TCP的段格式中的端口号占16位,可表示的范围为0~65535。对于这些端口号的使用有以下规定:
• 端口号小于256的为常用端口号,服务器一般都是通过常用端口号来识别的。任何TCP/IP实现所提供的服务都用1~1023之间的端口号。这些端口号由Internet端口号分配机构来管理。
• 客户端口号一般都是临时端口号,所以客户端对其使用的端口号并不关心,只需保证该端口号在本机器上的唯一性。
• 多数客户端被分配的临时端口号范围在1024~5000之间,大于5000的端口号是给Internet上并不常用的服务。
常用的TCP协议所使用的端口如表3-3所示。
(4)TCP的工作流程
在TCP协议中,需要传输的报文由上层应用程序生成,然后从高层传输到TCP。传输层的TCP接收字节并把它们组合为TCP分组,同时加上分组的头部信息。
传输开始前需要在发送端和接收端间建立连接。首先,TCP的发送软件向接收端发出建立连接的请求,请求报文中有一个套接口。接收端的TCP软件指定它自己唯一的套接口号,并将它发送回源计算机。在传输期间,这两个套接口定义了两台计算机之间的连接。
表3-3 常用的TCP协议所使用的端口
协议名称 | 协议内容 | 所使用的端口号 |
---|---|---|
FTP(控制) | 文件传输服务 | 21 |
FTP(数据) | 20 | |
TELNET | 远程登录 | 23 |
HTTP | 超文本传送协议 | 80 |
GOPHER | 菜单驱动信息检索 | 70 |
SMTP | 简单邮件传送协议 | 25 |
POP3 | 接收邮件(与SMTP对应) | 110 |
连接建立后,TCP将数据段传输到IP,IP将其作为数据报通过网络发送。IP可以对数据段做任意的修改,包括分段和重组,这些修改过程对TCP是完全透明的。经过网络传输过程后,接收端的IP将收到的数据分组传输到接收端的TCP,TCP对此数据处理后,将它传到上面的应用程序。
当报文包含多个TCP数据段,接收端根据每个数据报头标中的序号将报文重组。如果数据段丢失或损坏,TCP将该段传输错误的报文发送到发送端,发送端再重新发送这一段。
TCP协议在传递数据前要先建立逻辑连接,数据传输结束后还要释放连接。这种建立、数据传输和释放的过程就是连接管理。
①建立连接:建立连接使用三次握手方式,如图3-17所示。
图3-17 TCP建立连接三次握手过程
第一次握手是A进程向B进程发出连接请求,包含A端的初始序号为X;第二次握手是B进程收到请求后,发回连接确认,包含B端的初始序号Y和对A端的初始序号X的确认;第三次握手是A进程收到B进程的确认后,向B进程发送X+1号数据,包括对B进程初始序号Y的确认。
建立连接时,需要指定一些直到连接释放前都有效的特性,如优先权值、安全性值等,这些特性在连接的双方都是同意的。
②数据传输:数据传输时,A进程的TCP从它的上层协议接收数据后,以递增序号的方式将数据分段封装并发送到B进程。B进程通过将序号加1的确认数据报来确认该报文。
③释放连接:释放连接同样是使用三次握手方式,一方发出释放请求后并不立即断开连接,而是等待对方确认,对方收到请求后,发回确认报文,并释放连接,发送方收到确认后才拆除连接。
2.用户数据报协议UDP
用户数据报协议(UDP)是最简单的传输层协议,它和IP一样提供面向无连接、不可靠的数据报传输服务,唯一与IP不同的是提供协议的端口号来保证进程间的通信。它可以区分一台计算机上的多个接收者,从而使UDP软件可以把报文传送给正确的接收者。UDP这种扩充,使得在两个用户进程之间传送数据报成为可能。
(1)UDP提供的服务
UDP提供的服务有以下特征:
• 无连接。一个应用如果有数据报要发送就直接发送。
• 不对数据报进行检查与修改。
• 不需要等待对方应答,效率高。
• 可靠性差。会出现分组丢失、重复、乱序,适用于无需应答并且通常一次只传送少量数据的情况。对应只有一个请求和一个响应的情况,采用UDP可以避免建立和释放连接的麻烦。
(2)UDP的段格式
UDP功能简单,其端格式也简单,如图3-18所示。
图3-18 UDP数据报格式
图318 UDP数据报报文封装
(3)UDP的端口号
UDP的端口号与TCP相同。常用端口号如表3-4所示。
表3-4 常用的UDP协议的端口号
协议名称 | 协议内容 | 所使用的端口号 |
---|---|---|
DNS | 域名解析服务 | 53 |
SNMP | 简单网络管理协议 | 161 |
OICQ | 聊天软件 | 8000 |
TFTP | 简单文件传输协议 | 69 |
(4)UDP工作流程
在发送端,UDP先构造一个用户数据报,将它交给IP,UDP就完成了工作,它没有建立连接等三次握手过程。在接收端,UDP先判断所收到的数据报的目标端口号是否与当前使用的某个端口匹配,如果是,则将数据报接收,否则抛弃该数据报,并向发送端发送标识错误的报文。有时,端口号虽然匹配,但相应端口的缓冲区已满,UDP也会抛弃该数据报。UDP传输数据报时也没有确认和重传机制。
3.4.4 应用层
TCP/IP的应用层协议是网络和用户之间的接口,即网络用户是通过不同的应用协议来使用网络的。应用层协议向用户提供各种实际的网络应用服务,随着网络技术的发展,应用层服务的功能还在不断的改进和增加。
因特网上使用最广泛的应用层协议主要包括:超文本传输协议HTTP、文件传输协议FTP、电子邮件协议SMTP和远程登陆协议Telnet、域名系统DNS等,关于它们的具体说明和其它应用层协议将在第六章介绍。