此系列博客,图片文字观点均是来自《图解 TCP/IP》,仅作为学习用途。
5、其他传输层协议
在互联网中,很长一点时间主要使用TCP、UDP,还有几个协议从实验步入了实用阶段。
5.1 UDP-Lite
UDP-Lite(轻量级用户数据报协议)是扩展UDP机能的一种传输层协议。
5.2 SCTP
SCTP流控制传输协议
5.3 DCCP
数据报拥塞控制协议
6、UDP首部格式
下图为UDP的首部格式,除去数据部分正是UDP的首部。
*源端口号
表示发送端端口号,字段长16位,该字段是可选项,有时可能不会设置源端口号。没有源端口号的时候该字段的值为0。
*目标端口号
表示接收端口号,字段长度为16位。
*包长度
该字段保存了UDP首部的长度跟数据的长度之和。单位为8。
*校验和
校验和是为了提供可靠的UDP首部和数据而设计,在计算校验和,如下图所示,附加在UDP伪首部和UDP数据报之前,通过在最后一位增加一个0,将全长增加16倍,此时将UDP首部的校验和字段设置为0,然后以16比特为单位进行1的补码和,并将所得到的1的补码和写入校验和字段。
接收主机在收到UDP数据报以后,从IP首部获取IP地址信息,构造UDP伪首部,再进行校验和计算。检验和字段的值是校验和字段以外剩下部分的1的补码和。因此包括校验和字段在内的所有数据之和结果为16位全部为1时,才被认为所接收到数据是正确的。UDP中也可以不用校验和,此时校验和字段填入0。
7、TCP首部
下图为TCP的首部。
TCP中没有表示包长度和数据长度的字段。可由IP层获知TCP的包的长度,由TCP的包长可知数据的长度。
*源端口号
表示发送端端口号,字段长16位。
*目标端口号
表示接收端端口号,16位。
*序列号
字段长32位,序列号是指发送数据的位置,每发送一次数据就累加一次该数据字节数据的大小。序列号不会从0或1开始,而是建立在连接时由计算机生成的随机数作为其初始值,通过SYN包传送给接收端主机,然后再将每转发的字节数累加到初始值上表示数据的位置,此外,在建立连接和断开连接时发送SYN包和FIN包虽然不携带数据,但是也会作为一个字节增加对应的序列号。
*确认应答号
确认应答号字段长度32位,指下一次应该收到的数据序列号,实际上它是指已收到确认应答号减一为止的数据。发送端接收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。
*数据偏移
该字段表示,TCPP所传输的数据部分应该从TCP包的哪个位开始计算,当然也可以认为这就是TCP首部的长。该字段长4位,单位为4字节(32位),不包括选项字段的话,首部为20字节,则该字段设为5,意思是,TCP包最一开始到20字节为止都是TCP首部,余下部分是TCP数据。
*保留
该字段主要是为以后扩展用。长度为4。一般设为0。
*控制位
字段长8位,每一位从左到右分别为CWR、ECE、URG、ACK、PSH、RST、SYN、FIN。这些控制标志也叫控制位,当他们对应位上的值位1时,具体含义如下:
*CWR
CWR标志与后面的ECC标志都用于IP首部的ECN字段,ECE标志为1则通知对方将拥塞窗口缩小。
*ECE
ECE 表示ECN-Echo,置1会通知通信对方,从对方到这边的网络有拥塞,在收到数据包的IP首部中ECN为1时将TCP中的ECE设为1。
*URG
该位为1时,表示包中有紧急处理的数据。
*ACK
该位为1时,确认应答的字段变为有效,TCP规定除了最初建立连接时的SYN包之外该位必须设置为1。
*PSH
该位为1时,表示需要将收到的数据立刻上传给上层应用协议,为0则不需要立即传而先进行缓存。
*RST
该位为1表示TCP连接中出现异常必须强制断开连接。
*SYN
用于建立连接,SYN为1时表示希望建立连接,并在其序列号的字段进行序列号初始值的设定。
*FIN
该位为1,表示今后不会有数据发送,希望断开连接。当通信结束希望断开连接时,通信双方的主机之间就可以相互交换FIN位置为1的TCP段,每个主机又对对方的FIN包进行确认应答,以后就可以断开连接。
*窗口大小
该字段长16位,用于通知从相同TCP首部的确认应答号所指位置开始能接收的数据大小(8字节),TCP不循序发送超过此处所示大小的数据,不过窗口若为0,则表示可以发送串口探测,以了解最新窗口大小。
*校验和
TCP校验和UDP检验类似,但是不能关闭。使用伪TCP首部,伪首部如图所示,
首先将TCP校验和字段设为0,再以16位为单位进行1的补码和计算,再将它们总和的1的补码和放入校验和字段。
接收端收到TCP数据后,从IP首部获取IP地址构造TCP伪首部,再进行校验和计算,由于校验和字段里保存着除本字段以外其他部分的和的补码值,因此如果计算校验和字段在内的所有数据的16位和以后,得到的结果是16位全为1,说明所收到的数据是正确的。
*紧急指针
该字段长为16位,只有在URG为1时有效,该字段数值表示本报文中紧急数据的指针,正确来讲,从数据部分的首位到紧急指针所指示的位置为紧急数据。
*选项
选项字段用于提高TCP传输性能,因为根据数据偏移(首部长度)进行控制,所以最大长度为40字节。选项字段尽量调整为32位的倍数。
类型2的MSS选项用于建立连接时决定最大段长度的情况,用于大部分操作系统。
类型3的窗口扩大,是用来改变TCP吞吐量的选项。
类型8时间戳字段选项,用于高速通信中对序列号的管理。用于区分新老序列号。
类型4、5用于选择确认应答,确认应答一般只有1个字段,如果数据段总以豁牙子状态(指数据时不时丢失,接收到的数据序号不连续)到达的话会严重影响网络性能,有了这个选项可以允许最大4次豁牙子状态确认应答。因此在避免无用重发的同时,还能提高重发的速度,从而提高网络的吞吐量。
上公式表示一个TCP连接,所能传输的最大吞吐量为5.2Mbps。如果建立两个以上连接同时进行传输时,这个公式计算结果则表示每个连接的最大吞吐量。也就是说,在TCP中与其使用一个连接传输数据,使用多个连接传输数据会达到更高的网络吞吐量。在Web浏览器中一般建立4个连接来提高吞吐量。