一、传输层最重要的协议就是TCP和UDP。TCP协议复杂,是面向连接的传输协议且传输可靠;而UDP协议简单,是面向无连接的传输协议,传输速度快但传输不可靠。可以将UDP协议看作IP协议暴露在传输层的一个接口。
UDP协议同样以数据报(datagram)的方式进行数据传输,而且UDP协议提出了端口(port)的概念。IP协议进行的是IP地址到IP地址的传输。但是每台计算机有多个通信通道,并将多个通信通道分配给不同的进程(例如QQ、WEB等),这样一个端口就代表一个通信通道。UDP协议实现了端口到端口的数据传输服务,UDP的数据报也是被封装成“应用层-UDP-IP”的形式进行传输的。
二、UDP的数据报:UDP数据包分为头部(header)和数据(payload)两部分。UDP是传输层的协议,这意味着UDP数据包需要经过IP协议的封装,然后通过IP协议传输到目的电脑。随后UDP数据包在目的电脑上进行拆封,并将信息送到对应的端口缓存中。应用层则可以根据socket等编程接口获取相关端口的数据包信息,用于上层的进一步应用。
如上图所示为UDP协议数据的头部信息,包括源端口(可选的,端口不用置0即可)、目的端口、报文长度、校验和(其覆盖UDP的头部信息和数据信息,在IPV4中,checksum可以为0;IPV6中必须进行校验)。其中报文长度用来指定UDP数据报包括数据部分的长度(最小值为8字节,且包括IP头等数据)。UDP传输协议相比于TCP协议有以下优点:①当使用广播或多播时,一般使用UDP协议而不是TCP协议。②UDP协议是面向无连接的,协议实现简单且速度较快。
三、IP的数据报:IP协议是不可靠且无连接的网络层传输协议。所有的TCP、UDP等数据都是以IP数据报的形式进行传输的。IP协议通过IP地址进行目的电脑的识别与连接。待传输的数据经过UDP头部信息的封装后,还需进一步经过IP头部信息的封装,进而通过IP协议传输到目的电脑。
4位版本信息:IPv4为0100,IPv6为0110。
4位首部长度:用于标识首部的长度(单位为4字节),所以首部的最大长度为15*4字节=60字节。
8位服务类型:包括3位优先权字段,4位TOS字段,1位始终为0。
16位总长度(字节数):整个IP数据报的长度。IP数据报中的数据长度=IP数据报总长度-IP首部长度。
16位标识:唯一地标识主机发送的每一份数据。
3位标志:用于IP数据报分片,第1位未用;第二位是DF位,DF=1表明IP不对该数据报分片;第3位是MF位,当对数据报分片时,除了最后一片外,其他每个数据报片都要将此位设1。
13位偏移:用于IP数据报分片。单位为8字节,表明该片相对于原始数据报开始处的位置,能表示的最大偏移为。
8位生存时间(TTL):设置数据报可以经过的最多路由器的数量,每经过一个路由器,该值就减去1,当该值为0时,数据报被丢弃,通常设置为32或64。
8位协议:表示上层传输层所用的协议类型,1表示ICMP协议,2表示IGMP协议,3表示TCP协议,17表示UDP协议。
16位首部校验和:用于对IP首部的正确性进行校验,但是并不包括数据部分,这与TCP/UDP的首部校验和有所区别。
32位源IP地址:发送端的32位IP地址。
32位目的IP地址:接收端的32位IP地址。
选项(如果有):可变长度的可选信息,若IP首部不包括这个可选部分,则IP首部长度为20字节。
四、IP首部校验和的计算:
①发送端对IP首部校验和的计算步骤:
Ⅰ将IP数据报首部的校验和字段置为0。
Ⅱ把IP数据报的首部看成16位为单位的数字组成,依次进行二进制反码求和,然后将求和结果取反。
Ⅲ将得到的2个字节数据存入首部校验和位置即可。
②接收端对IP首部校验和的校验步骤:
Ⅰ把首部看成16位为单位的数字组成,依次进行二进制反码求和,然后将求和结果取反。
Ⅱ如果结果为0,则表示校验和校验通过,否则校验失败。