Причина пометки необязательного поля в ASN.1
Глядя на модуль ASN.1 для 3GPP MAP ( http://www.3gpp.org/ftp/specs/archive/29_series/29.002/ASN.1/), я запутался в использовании [0]
тег для первого поля (imsi). Так как это не ДОПОЛНИТЕЛЬНОЕ поле, и его тип также известен (OCTET STRING), какова цель этого тега здесь?
sendAuthenticationInfo ОПЕРАЦИЯ::= { АРГУМЕНТНАЯ ПОСЛЕДОВАТЕЛЬНОСТЬ { imsi [0] IMPLICIT OCTET STRING (РАЗМЕР ( 3 .. 8)), numberOfRequestedVectors INTEGER ( 1 .. 5), сегментация запрещена NULL НЕОБЯЗАТЕЛЬНО, instantResponsePreferred [1] НЕОБХОДИМЫЙ NULL НЕОБЯЗАТЕЛЬНО, -- так далее. --
Стоит отметить, что поле imsi не интерпретируется напрямую как строка октетов, но содержит цифры IMSI в полуоктетном кодировании (например, BCD). Может ли это быть причиной того, что поле помечено?
1 ответ
В этом конкретном случае протокол MAP 3GPP указывает, что BER является правилом кодирования, которое должно использоваться, что означает, что теги включены в кодировки. Это означает, что, хотя в этом случае не обязательно менять тег строки октета по умолчанию для необязательного поля в этом контексте, поскольку нет никакой неоднозначности, это, скорее всего, сделано для целей документации, указывая на то, что содержимое этого поля не просто строка октетов.