基础知识部分 1、TCP/IP协议的系统网络模型TCP/IP是由一系列协议组成的协议组,其名字是由这些协议的两个协议组成的,即传输控制协议(Transmision Control Protocol——TCP)和网间协议(Internet Protocol——IP)。TCP/IP与国际标准化组织ISO指定的开放系统互连参考模型OSI相类似,TCP/IP也采用层次化结构,共分四层,如图1-2-1所示:
图1-2-1 传输层:提供应用程序端到端的通信。主要包括TCP(传输控制协议)和UDP(用户数据报协议)协议。 传输层的主要功能为: 格式化信息流,提供可靠传输。传输层采用接受确认、出错重发的通信机制。每一个分组中都带有校验和接收端以次来校验接收分组的正确性。 不同应用程序间的识别。为了区别不同的应用程序,传输层在每个分组总增加识别信源和信宿应用程序的信息。不同的应用程序具有不同的端口编号。 网间网层:负责相邻计算机之间的通信。它负责向传输层提供统一的数据报,屏蔽各种物理网络的数据格式的差别。网间网层协议包括IP、ICMP、ARP、RARP等。网间网层的主要功能如下: 数据格式的转换。接收来自传输层的呼叫请求,将呼叫请求分组装入IP数据报,填充报头,选择去往目的地址的路径,然后将数据报发往适当的网络端口; IP地址功能 寻址。接收来自网络的数据报,检查其合法性,然后寻找路由——如果数据报已到达目的地(本机),则曲调报头,将剩下的分组交给传输层上适当的传输协议;如果该数据报还未到达目的地,则转发该数据报。 寻径。 处理ICMP报文,“Internet Control Message Protocol”(Internet控制消息协议)的缩写,处理路径、控制、拥塞等问题。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。我们在网络中经常会使用到ICMP协议,只不过我们觉察不到而已。比如我们经常使用的用于检查网络通不通的Ping命令,这个“Ping”的过程实际上就是ICMP协议工作的过程。还有其他的网络命令如跟踪路由的Tracert命令也是基于ICMP协议的。 网络接口层:负责接收数据报,通过网络向外发送,或者从网络上接收物理帧,抽出IP数据报,交给IP层。 TCP/IP协议的组成 TCP/IP协议是由一组庞大的协议群组成,其中常用的协议及其所在的层次说明如下。 (一)、地址解析协议ARP/RARP ARP实现IP地址到物理地址的转换,RARP实现物理地址到IP地址的转换。他们起着屏蔽物理地址的重要作用。物理地址,即为通常所说的MAC地址。MAC地址长48位(12个十六进制数字),IEEE定义了前6个十六进制数字表示制造商,后6个十六进制数字表示接口数或其他有用信息。末端设备一般只有一个MAC地址。Router和其它连网设备通常有多个MAC地址。 (二)、网间互连协议IP IP协议是INTERNET网上最重要的协议软件之一。它详细规定了INTERNET网上的计算机进行通信时应当遵守的规则。IP负责在网络上传诵由TCP或UDP生成的数据段。IP协议对网络上的设备使用统一的网间网地址,即IP地址,并且根据IP地址确定路由和目的主机。 IP是网络层协议(第三层),它包括地址访问信息和路由数据包的控制信息。RFC791中有IP的详细说明,IP是Internet协议簇中的主要网络层协议,它与传输控制协议(TCP)一起,代表了Internet协议的核心。IP有两个主要功能,一是提供通过互联网络的无连接和最有效的数据报分发;二是提供数据的分组和重组,以支持最大传输单元(MTU)不同的数据链路。 IP数据包格式 IP数据包格式如下图所示。下面对图中的IP数据包格式做几点说明: 版本:标识现在使用的IP版本。 IP报头长度(IHL):在一个32位的字节中指示数据报头的长度。 服务类型:指定高层协议希望处理的当前数据报的方式,并设置数据报的重要性级别。 总长度:指定整个IP数据包以字节计数的长度,包括数据和报头。 标识:包含标识当前数据报的整型值,该域可帮助将数据报组合在一起。 标志:由一个3位的域构成,其中两个低位(权值最小)控制分段,最低位标识数据包是否可被分段,中间位标识该数据包是否是一系列数据包中的最后一个。第三位或最高位没有使用。 段位移:指示该段中的数据相对于原始数据报中数据起点的位置,以便目的地IP进程可以正确地重组原始数据报。 生命期:维护一个逐步减小到0的计数器,0时丢弃数据报。这样可以防止数据包无休止地循环。 协议:指示当IP进程结束后,哪一个高层协议接收收到的数据包。 头校验和:帮助保证IP头的完整性。 源地址:标识发送节点。 目的地址:标识接收节点。 选项:允许IP支持多种选项,如安全。
(四)、传输控制协议TCP TCP的目的是保证可靠数据传输,提供无差错的通信服务。它把从上层应用程序传来的数据装配成标准的数据报,保证数据的正确传输。TCP是一种可靠的、面向连接的协议,并可以实现流控和差错控制。TCP提供的可靠性是利用一种称为“重传肯定确认(PAR)”机制来实现的。TCP是面向连接的,它在两个通信主机之间建立一个逻辑的端对端连接,通过握手来实现。TCP的流控是通过窗口来实现。 TCP提供IP环境下的数据可靠传输。TCP对应OSI参考模型的传输层(第四层)。TCP提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。 使用数据流传送,TCP发送以序列号标识的非结构化比特流。这种服务给应用带来了便利,因为它们不必在将数据传给TCP之前对数据进行分块。TCP将它们分组,并传给IP发送。 通过面向连接、端到端和可靠的数据包发送,TCP提供互联网络数据包传输的可靠性。TCP通过使用转发确认号对字节排序来实现可靠性,确认号将源节点希望接收的下一个字节指示给目的节点。在一段指定时间内,没有确认的字节将重新发磅。TCP的可靠性机制允许设备处理丢失、延迟、重复或错读数据包。超时机制允许设备检测丢失的数据包并请求重新传输。 TCP提供有效的流控,这表示当向源节点发送确认时,接收TCP进程指示它们可以接收而不会引起其内部缓冲区溢出的最高序列号。 全双工操作表示TCP进程可以同时进行发送和接收。 最后,TCP的多路复用表示大量高层对话可以同时通过一个单独的连接发送出去。 建立TCP连接: 为了使用可靠的传输服务,TCP主机之间必须建立面向连接的会话。连接是通过使用“三路握手”机制建立的。 通过使两边使用相同的起始序列号,三路握手机制可同步一个连接的两端。这个机制也保证两边都为传输数据作好准备,并知道另一边已准备好要传输的数据。这样,在会话建立期间和会话结束后,数据包都不会被传送或重新传送。 每个主机都随机选择一个序列号,并用它跟踪正在发送和接收的数据流中的字节。然后,三路握手进行下面的动作: 第一个主机(主机A)通过发送一个请求连接数据包初始化连接,该数据包带有初始序列号(X)和SYN位组。第二个主机(主机B)接收SYN,记录序列号X,并通过确认SYN(使用一个ACK=X+1)来应答。主机B含有其自己的初始化序列号(SEQ=Y)。SYN=20表示主机已经收到了0 – 19字节,希望接收字节20。这个技术叫作前向确认。然后,主机A通过前向确认,指示主机A希望接收的下一个字节(ACK=Y+1),并确认主机B发送的所有字节。 我们来看看这三次对话的简单过程:主机A向主机B发出连接请求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收,协调工作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”,这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步,经过三次“对话”之后,主机A才向主机B正式发送数据。 数据传输开始。 确认和重传输(PAR): 一个简单的传输协议可能会提供可靠的流控技术,使用该技术,源节点发送一个数据包,启动定时器,然后在发送新的数据包之前等待一个确认消息。如果在定时器归0之前还没有收到确认消息,源节点就重新传输该数据包。这种技术就叫确认和重传输。 通过给每个数据包设备一个序列号,主机可用PAR跟踪丢失或重复的数据包。重复数据包可能是因网络延时而过早重传输引起的。该序列号在确认消息中发回,因此可被跟踪。 PAR是对带宽的一种低效使用方法,因为主机在发送一个新的数据包之前,必须等待一个确认消息,并且在同一时间只能发送一个数据包。 TCP滑行窗口: 与PAR相比,TCP滑行窗口提供了对网络带宽更有效的使用方法,它使主机在等待一个确认消息的同时,可以发送多个字节组或数据包。 在TCP中,接收者在每个数据包中指定当前窗口大小。因为TCP提供面向比特流的连接,窗口大小以字节数表示。这意味着窗口就是发送者在等待确认消息的同时可发送的数据字节数。在连接建立阶段即可指定初始窗口大小,但它随着发送数据变化,以提供流控,例如一个0大小的窗口表示“没有数据发送”。 在TCP滑行窗口操作中,发送者有一系列字节(序列号为1到10)要发送给接收者,而接收者的滑行窗口大小为5。那么发送者将围绕前五个字节设置一个窗口,并将它们同时发送。然后等待一个确认消息。 接收者会使用ACK=6响应,指示它已经接收到节字1 – 5,正等待第6个字节。同样,接收者将指示窗口大小为5。发送者将滑行窗口向右移动5个字节,发磅字节6 – 10。接收者使用ACK=11响应,指示它们期望接收序列号为11的字节。在这个数据包中,接收者可能指示其窗口大小为0(如果其内部缓冲区已满)。这时,发送者就不能再发送任何字节,直到接收者发送另一数据包,其中的窗口大小比0大。 TCP数据包格式: 下图给出了一个TCP数据包的基本格式。 32位
TCP数据包的基本格式 下面对图所示的TCP数据包基本格式做几点说明: 源端口和目的端口:标识高层源和目的进程接受TCP服务的点。 序列号:通常指当前消息中的数据第一个字节中设置的数值。在连接建立阶段,这个域也用于标识在要进行的传输中使用的初始化序列号。 确认号:包含数据包的发送者希望接收的数据中的下一个字节的序列号。 数据偏移:指向TCP头中的一个32位的数值。 保留:用于将来使用。 标志:携带各种控制信息,包括用于建立连接的SYN和ACK位及用于结束连接的FIN位。 窗口:指定发送者的接收窗口大小(也就是可用于接收数据的缓冲区空间)。 校验和:指示头在传输是否被破坏。 紧急指针:指向数据包中的第一个紧急数据字节。 选项:指定TCP的各种选项。 数据:包含上层信息。 IP地址结构与表示 |
|