TCP、UDP、IP报文格式
整体构造:
IPv4报文格式
版本:指IP协议的版本
首部长度:首部的长度
服务类型:如下图:
其中优先级用来区别优先级别不同的IP报文。
- D表示要求有更低的时延。
- T表示要求有更高的吞吐量。
- R表示要求有更高的可靠性。
总长度:报文的长度。
标识:由于数据报长度超过传输网络的MTU(最大传输单元)而必须分片,这个标识字段的值被复制到所有数据报分片的标识字段中,使得这些分片在达到最终的目的地时可以依照标识字段的内容重新组成原先的数据报。
标志:最低位是MF,MF=1时,表示后面还有分片。
中间位的DF,DF=1时,表示不能分片。
片偏移: 和前面的数据分片相关,是本分片在原先数据报文中相对首位的偏移位。
生存时间:数据报在网络中存活的时间,所允许通过的路由器的最大数量,没通过一个路由器,该值自动减一,如果数值为0,路由器就可以把该数据报丢弃。
协议: 指出数据报携带的数据是使用何种协议,以便目的主机的IP层能知道次数据报上交到哪一个进程(不同协议有一个专门不同的进程处理)。
首部校验位和:对首部进行校验运算。
IP首部校验和的计算主要是两步:按位异或和取反,具体来说
对于发送方计算检验和:
- 初始计算校验和字段时该字段全部用0填充;
- IP头部以16位为一个单位,逐个模2加(相当于异或);
- 得到的结果取反,作为校验和放入校验和字段;
对于接收者来说,验证也很简单:
- 对于接收的IP报文头部以16位为单位逐个求和;
- 若结果为1,则校验正确,否则出错丢弃;
原理很简单,接收方的计算对象是A和A的反的异或,结果当然是1了!
源地址:发送数据报的节点地址。
目的地址:接受数据报的节点地址。
TCP报文格式
源端口: 数据发送方的端口号。
目的端口: 数据接受方的端口号。
序号:本数据报文中的的第一个字节的序号(在数据流中每个字节都对应一个序号)。
确认号:希望收到的下一个数据报文中的第一个字节的序号。
数据偏移:表示本报文数据段距离报文段有多远。
保留:顾名思义,用来保留给以后用的。
紧急比特URG:当值为1时表示次报文段中有需要紧急处理。
确认比特ACK:值为1时确认号有效,值为0时确认号无效。
复位比特RST:值为1时表示TCP连接存在严重的错误,需要重新进行连接。
同步比特SYN:值为1表示这是一个连接请求或连接接受报文。
终止比特FIN: 值为1表示要发送的数据报已经发送完毕,需要释放传送连接。
窗口字段:TCP连接的一端根据缓存空间的大小来确定自己接受窗口的大小,限制发送放的窗口上限。
检验和:用来检验首部和数据两部分的正确性。
紧急指针字段:本报文紧急数据的最后一个字节的序号。
UDP报文格式
源端口号和目的端口号如上和TCP的相同。
UDP长度:UDP报文的字节长度(包括首部和数据)。
UDP校验和: 检验UDP首部和数据部分的正确性。