UDP数据包的简单分析

2019-08-14  本文已影响0人  李die喋

UDP报文头

image

UDP的报文头结构比较简单。

UDP校验和

UDP中的校验和是不必要的,即使数据段校验和不通过也没办法通知对端发送数据。但效率比TCP高。

UDP头部报文代码解析

public class UDPacket {

    public static final int SOURCE_PORT_BIT = 0;
    public static final int DESTINATION_PORT_BIT = 2;
    public static final int TOLAL_LENGTH_BIT = 4;
    public static final int CHECK_SUM_BIT = 6;

    public byte[] m_Data;
    public int m_Offset;

    public UDPacket(byte[] data,int offset){
        this.m_Data = data;
        this.m_Offset = offset;
    }

    public int getSourcePort(){
        return Packet.readShort(m_Data,m_Offset + SOURCE_PORT_BIT);
    }

    public int getDestinationPort(){
        return Packet.readShort(m_Data,m_Offset + DESTINATION_PORT_BIT);
    }

    public int getTotalLength(){
        return Packet.readShort(m_Data,m_Offset + TOLAL_LENGTH_BIT);
    }
    
    public int getCheckSum(){
        return Packet.readShort(m_Data,m_Offset + CHECK_SUM_BIT);
    }
    
    public void setSourcePort(int port){
        Packet.writeShort(m_Data,m_Offset + SOURCE_PORT_BIT,(short) port);
    }
    
    public void setDestinationPort(int port){
        Packet.writeShort(m_Data,m_Offset + DESTINATION_PORT_BIT,(short) port);
    }
}

UDP相较于之前的IP头、TCP头的代码解析就相对简单了许多,在会这些之前会位运算是很重要的。加油啊!!!

上一篇 下一篇

猜你喜欢

热点阅读