从图4中可以看出,一个数据报首部由和数据两部分组成。首部的前20字节是固定部分,后一部分则是可变部分。
数据报首部的固定部分中的各字段
。版本 占4bit,指 的版本。通信双方使用的 协议的版本必须一致。 。首部长度
占4bit,可表示的最大数值是15个单位(每个单位为4字节),因此IP的首部长度的最大值是60 字节。当IP分组的首部长度不是4字节的整数倍的时开始,这样在实现起来会比较方便。首部长度的限制为60 个字节的缺点是有时(如采用源站选路的时)不够用。但这样的用意是要用户尽量减少额外开销。 。服务类型
占8bit用来获得更好的服务,其意义见图一的上面部分所示。服务类型字段的前三个比特表示优先级,它可使数据报具有8个有限级中的一个。 第四个比特是D比特,表示要求有更低的时延。 第五个比特是T比特,表示要求有更高的吞吐量。
第六个比特是R比特,表示要求有更高的可靠性,即在数据报传送的过程中,被节点交换机丢弃的概率比较更小一些。
第七个比特是C比特,是新增加的,表示要求选择费用更低廉的路由。
最后一个字节目前尚未使用。 。总长度
总长度指首部和数据之和的长度,单位为字节。
总长度字段为16bit,因此数据报的最大长度为65535字节。这在目前是够用的。
当很长的数据报要分片记性传送时,“总长度”不是指 数据报长度,而是指分片后的首部长度和数据长度的总和。 。标识
标识字段是为了使分片后的各数据报最后能准确地重装成为原来的数据报。请注意:这里的“标识”并没有顺序号的意思,因为IP是无连接服务,数据报不存在按序接受的问题。 。标志
占3bit 。目前只有前两个比特有意义。
标志字段中的最低位记为MF(More Fragment)。MF=1即表示后面还有分片的数据报。MF=0表示这已是若干数据报片中的最后一个。
标志字段中间的一位记为DF (Don't Fragment).只有当MF=0时才允许分片。 。片偏移
片偏移指出:较长的分组在分片后,某个片在原分组中的相对位置。也就是说,相对于用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。 。寿命
寿命字段记为TTL(Time To Live), 其单位为秒,建议寿命值为32秒。 。协议
占8bit,协议字段指出此数据报携带的运输层的数据是使用何种协议以便目的主机的IP层知道应将此数据报上交给哪个进程。常用的协议和相应的协议字段值是:UDP(17),TCP(6),ICMP(1),GGP(3)。 。首部检验和
此字段只检验数据报的首部不包括数据部分。IP检验和的计算方法是:将 数据报首部看成为16bit字的序列。先将检验和字段置零,将所有的16bit字相加后,将和的二进制反码写进检验和字段。收到数据报后,将首部的16bit
字的序列再相加一次,若首部未发生任何变化,则和必全为1,否则即认为出错,并将数据报丢弃。
IP数据报首部的可变部分主要用来进行网络测试或调试,可选项是变长的,定义了5种选项:即安全性、严格路由选择、宽松路由选择、路由记录、时间标记。
2.4 Internet控制报文协议ICMP
ICMP主要由网际网中的主机和路由器使用,用来交换支持数据报传输的信息。通常ICMP路由问题而引起的差错报告,但是同ICMP一起使用的有十一种不同类型的报文。主要分成为两种类型,即ICMP差错报文和ICMP询问报文。
在ICMP差错报文中,改变路由报文使用的最多,它用于更新主机的路由表。ICMP源站抑制报文用于控制网络拥塞,解决速率较高的源主机向速率较低的目的主机发送数据报时的匹配问题。 询问报文主要有:
(1) Echo请求报文:用于测试目的站是否可达到,及其有关状态。 (2) 时间戳请求报文:可用来进行时钟同步和测量时间。
(3) 地址掩码请求报文:可使主机向子网掩码服务器得到某个接口的地址掩
码
3.1 TCP运输层协议概述
从通信和信息处理的角度看,运输层属于面向通信部分的最高层。但从网络功能或用户功能来划分,则运输层又属于用户功能中的最低层。运输层向高层用户屏蔽了下面通信子网的细节,使用户看不到实现通信功能的物理链路是什么,看不见数据链路采用的是什么协议。TCP协议提供的是面向连接服务,是在不可靠的网络服务上提供端到端的可靠字节流。 3.2 端口及套接字
端口是应用层与运输实体进行交互的接口。端口号是一个16bit的地址,不同的应用进程用 不同的端口号来标识。端口号分为两类,一类是专门分配给一些最常用的应用程序,这叫熟知端口(well—known port),数值为0-1023。 “熟知”就表示这些端口号是TCP/IP体系确定并公布的;另外一类则是一般的端口号,用来随时分配给请求通信的客户进程。
套接字即是IP地址与端口号的组合,TCP的一个连接就是以一对套接字来标
识的,所以在运输层通信的一对套接字必须是唯一的。 3.3 TCP报文的格式
下图是TCP报文格式图:
。源端口和目的端口
各占两个字节。端口是运输层与高层的服务接口,16bit 的端口, 32bit的IP地址,构成了相当于运输层服务访问点TSAP的地址(总共是48bit)。 。序列号
占四个字节,是本报文段所发送的数据部分第一个字节的序号。在 TCP传送的数据流中每一个字节都有一个序号。 。确认序号
占四个字节,是期望收到对方下次发送的数据的第一个字节的序号,也就是期望收到的下一个报文段的首部中的序号。由于序号字段有32bit长,可对4GB的数据进行编号,这样就可以保证序号重复使用时旧序号的数据早已在网络中消失了。 。数据偏移量
占4bit,这是TCP报文段首部的长度,用于指出数据开始的地方离TCP报文段的起始处有多远。“数据偏移”的单位是32bit字, 。保留位 6bit,这些位必须是0; 。控制位
占6bit,各比特意义如下:紧急比特URG,当URG=1时,表明此报文段应尽快发送而不要按原来的排队来传送,应与紧急指针字段配合使用;确认比特
ACK,当ACK=1时确认序号字段才有意义;急迫比特PSH,当PSH=1时,表明请求远地TCP将本报文段立即传送给其应用层,而不等到整个缓冲区满后再向上交付;重建比特RST,当RST=1时,表明出现严重错误,必须释放连接,然后重新建立运输连接;同步比特SYN,当SYN=1而ACK=0时,表明这是一个连接请求报文段,若对方同意建立连接,则应在发回的报文段中使SYN=1且ACK=1;终止比特FIN,当FIN=1时,表明发送的字节串已经发送完毕,并要求释放运输连接。 。窗口 占两字节,是报文段发送方的接受窗口,单位为字节。 。检验和
占两字节,检验的范围包括首部和数据两部分,在计算检验和时,首先要在TCP报文段的前面加上一个12字节的伪首部,然后接收端在计算检验和时仍然要加上伪首部。 。选项
长度可变。TCP的规定一种选项即最长报文段MSS用于告诉对方的TCP:本地的缓冲区所能接收的报文段的最大长度。 。填充
不定长,填充的内容必须为0,它是为了保证包头的结合和数据的开始 处偏移量能够被32整除; 3.4 差错控制
TCP不是按传送的报文段来编号。TCP将所要传送的整个报文看成一个个字节组成的数据流,然后对每一个字节编一个序号。在连接建立时双方要商定初始序号。TCP就将每一次传送的报文段中的第一个数据字节的序号,放在TCP首部的序号字段中。TCP的确认是对收到的数据的最高序号表示确认。但返回的确认序号是以收到的数据的最高序号加1。也就是说确认序号表示希望下一次收到的第一个数据字节的序号。
若发送方在规定的设置时间内没有收到确认,又要将未被确认的报文段重新发送。接受方若收到有差错的报文段,则丢弃此报文段(不发送否认息)。 若收到重复的报文段,也要将其丢弃,但要发送确认信息。若收到的报文段无差错,只是未按序号,那么应该如何处理?TCP对此未做明确规定,而是让TCP的实现者来自行确定。或者将不按序的报文段丢弃,或者先将其暂存于接收缓冲区内,待所缺序号的报文段收齐后再一起上交应用层。采用后一种策略对网