議:從中文PDF到真實(shí)信令的避坑指南)
簡介這份技術(shù)文檔源自大唐移動(dòng)標(biāo)準(zhǔn)開發(fā)部是中文版無線資源控制協(xié)議說明系統(tǒng)闡述了該協(xié)議在長期演進(jìn)與第五代移動(dòng)通信網(wǎng)絡(luò)中的功能、流程與接口適合網(wǎng)絡(luò)優(yōu)化工程師、協(xié)議測(cè)試人員及通信專業(yè)學(xué)生閱讀。資源為單個(gè)PDF文件體積約852KB目錄結(jié)構(gòu)完整依次介紹范圍、參考文獻(xiàn)、定義與縮略語、協(xié)議概述、對(duì)高層與低層提供的服務(wù)、協(xié)議功能與協(xié)議過程等內(nèi)容并重點(diǎn)說明了系統(tǒng)消息廣播、連接建立與釋放等關(guān)鍵流程其中系統(tǒng)消息廣播部分給出了起始條件與終端接收處理方式。文檔依據(jù)第三代合作伙伴項(xiàng)目規(guī)范翻譯整理幫助不懂英文的用戶快速理解移動(dòng)終端與基站之間的信令交互、無線資源分配以及移動(dòng)性管理機(jī)制可減少大量查閱原版標(biāo)準(zhǔn)的時(shí)間也便于在培訓(xùn)或項(xiàng)目開發(fā)中隨時(shí)查閱。目前已有200人學(xué)習(xí)使用尤其適合配合實(shí)際網(wǎng)絡(luò)信令日志進(jìn)行對(duì)照分析對(duì)協(xié)議級(jí)排障和系統(tǒng)設(shè)計(jì)工作具有實(shí)用參考價(jià)值。1. 拿到RRC協(xié)議中文版PDF不是終點(diǎn)讀懂層三信令才是不少剛轉(zhuǎn)協(xié)議棧的工程師、路測(cè)分析的新人和做終端適配的開發(fā)者第一件事就是搜“RRC協(xié)議中文版.pdf”下載一份幾百頁的文檔打算從頭啃到尾。但現(xiàn)實(shí)往往是打開第一章“范圍”就合上了或者翻到ASN.1部分直接犯困。RRC是無線資源控制協(xié)議Radio Resource Control在LTE和NR里都屬于層三的控制面核心負(fù)責(zé)UE和基站之間的連接建立、移動(dòng)性管理、測(cè)量配置、承載釋放等。中文版PDF確實(shí)能降低英文障礙可它終究是一份靜態(tài)規(guī)范。讀它的目標(biāo)是當(dāng)你拿到一條真實(shí)信令時(shí)能說出“這條RRC消息為什么這么填”出問題時(shí)能定位到具體IE和配置項(xiàng)。本文按實(shí)際操作順序來先確立RRC在協(xié)議棧里的位置再學(xué)會(huì)用PDF對(duì)照真實(shí)信令最后給出避坑清單。適合三類人做協(xié)議棧開發(fā)的、在信令分析中查接入失敗的工程師以及剛?cè)胄邢胂到y(tǒng)建立協(xié)議感的在校生。2. 先定位RRC在協(xié)議棧里的位置狀態(tài)機(jī)、承載與術(shù)語表2.1 RRC在LTE/NR協(xié)議棧中的位置與接口RRC位于無線接口協(xié)議棧的層三控制面從上到下依次是NAS、RRC、PDCP、RLC、MAC、PHY。NAS負(fù)責(zé)核心網(wǎng)側(cè)的認(rèn)證和移動(dòng)性管理RRC則負(fù)責(zé)空口側(cè)的所有控制信令包括連接建立、安全激活、重配置、釋放和測(cè)量上報(bào)。RRC下層是PDCP通過信令無線承載SRB0、SRB1、SRB2傳遞RRC PDU用戶面的數(shù)據(jù)無線承載DRB也由RRC負(fù)責(zé)配置管理。換句話說RRC消息并不是它自己直接上空氣口的而是被封裝在PDCP/RLC/MAC層里最終復(fù)用物理層資源發(fā)出去。因此你抓包時(shí)看到的RRC消息已經(jīng)是下層逐層剝離之后的完整信令不是原始比特流。RRC與下層之間的交互依賴服務(wù)接入點(diǎn)SAP。比如RRC要配置PDCP層參數(shù)就通過PDCP SAP下發(fā)PDCP-Config要配置MAC層調(diào)度參數(shù)就通過MAC-SAP下發(fā)MAC-MainConfig物理層的資源配置也是一樣。很多中文版PDF把SAP翻譯成“服務(wù)訪問點(diǎn)”讀起來生硬但記住一點(diǎn)就能通RRC只負(fù)責(zé)生成配置和解析UE上報(bào)不負(fù)責(zé)傳輸。這樣一來那些大段大段的配置列表就不難理解它們本質(zhì)上是“給下層看的參數(shù)集合”。2.2 RRC狀態(tài)機(jī)從RRC_IDLE到RRC_INACTIVELTE里的RRC狀態(tài)只有兩個(gè)RRC_IDLE和RRC_CONNECTED。NR在R15引入了第三個(gè)狀態(tài)RRC_INACTIVE。這張狀態(tài)圖是RRC協(xié)議的骨架所有流程最終都在推動(dòng)狀態(tài)遷移。狀態(tài)核心特征典型場景RRC_IDLE無專用承載UE監(jiān)聽尋呼做PLMN選擇和小區(qū)重選開機(jī)待機(jī)、業(yè)務(wù)結(jié)束后RRC_CONNECTED建立SRB和DRB可傳用戶數(shù)據(jù)支持切換和測(cè)量電話、數(shù)據(jù)業(yè)務(wù)進(jìn)行中RRC_INACTIVEUE上下文保留在基站和核心網(wǎng)空口資源釋放5G低功耗、高頻小包業(yè)務(wù)查看中文版PDF的狀態(tài)遷移圖時(shí)注意每個(gè)箭頭旁邊都標(biāo)了事件名比如“RRCSetupComplete”“RRCResume”等。這些事件就是你要重點(diǎn)學(xué)習(xí)的流程。很多新手直接讀流程卻不知道當(dāng)前處于哪個(gè)狀態(tài)結(jié)果消息看了半天也不知道為什么這個(gè)字段合法、那個(gè)字段不該出現(xiàn)。我的習(xí)慣是先花半小時(shí)把狀態(tài)圖默畫一遍再開始看消息定義。2.3 先翻術(shù)語表和縮寫表不要從正文開始中文版PDF一般在正文前列出縮寫詞RRC、NAS、PDCP、RLC、MAC、IE、ASN.1、SRB、DRB、PLMN等。我建議先把這份縮寫表掃描一遍重點(diǎn)記住流程類關(guān)鍵詞的譯法例如“establishment”譯成“建立”、“reconfiguration”譯成“重配置”、“release”譯成“釋放”、“measurement”譯成“測(cè)量”。如果只記住中文名后面跟Wireshark里的英文協(xié)議樹對(duì)應(yīng)時(shí)會(huì)慢半拍。一個(gè)更切實(shí)的做法是自建中英對(duì)照表。許多工程師在閱讀過程中頻繁翻車就是因?yàn)椤伴T限”和“閾值”混用、“小區(qū)”和“蜂窩”混用。我的對(duì)照表長這樣英文常見中文譯法備注Cell小區(qū)不要譯成“蜂窩”Threshold門限有的譯“閾值”統(tǒng)一為門限Reestablishment重建不要譯成“重建連接”還是“重建”混淆Setup建立有的版本用“設(shè)置”已過時(shí)Release釋放在版本語境下是“版本”有了這張表再往后讀協(xié)議正文遇到術(shù)語歧義就查一下。這一步能省掉后期排查時(shí)的大量“翻譯記憶混亂”。3. 從中文版PDF到真實(shí)信令三種流程怎么對(duì)照著讀3.1 從PDF目錄抓出RRC流程骨架建立、重配、重建、釋放、測(cè)量中文版PDF的目錄一般按功能劃分并不直接按“流程”組織例如36.331里會(huì)有“RRC連接建立”、“RRC連接重配置”、“RRC連接重建”、“RRC連接釋放”、“測(cè)量”等章節(jié)。新手容易順著目錄一頁頁讀讀完整本仍不知道這些消息如何串成一次通話。我更推薦先翻目錄把核心流程和消息名列成一張表成為后續(xù)閱讀的骨架。流程UE側(cè)消息網(wǎng)絡(luò)側(cè)消息常見觸發(fā)場景初始接入RRCSetupRequest / RRCConnectionRequestRRCSetup / RRCConnectionSetup開機(jī)附著、響應(yīng)尋呼安全與初始上下文RRCSetupComplete后續(xù)下發(fā)的RRCReconfiguration核心網(wǎng)建立UE上下文重配置RRCReconfigurationCompleteRRCReconfiguration建DRB、修改MAC/PHY、切換重建RRCReestablishmentRequestRRCReestablishment無線鏈路失敗后的恢復(fù)測(cè)量上報(bào)MeasurementReportRRCReconfiguration含measConfigUE上報(bào)鄰區(qū)信號(hào)質(zhì)量有了這張表你讀PDF就可以“跳”著讀先知道每個(gè)流程用哪個(gè)消息再針對(duì)該消息找到對(duì)應(yīng)章節(jié)和ASN.1定義。不要試圖一次性全部讀透每個(gè)流程本身留在后續(xù)業(yè)務(wù)中反復(fù)對(duì)照。3.2 先啃RRCSetup消息一個(gè)必須背下來的消息結(jié)構(gòu)以NR里的RRCSetup為例消息結(jié)構(gòu)看起來是這樣的RRCSetup :: SEQUENCE { rrc-TransactionIdentifier RRC-TransactionIdentifier, criticalExtensions CHOICE { rrcSetup RRCSetup-IEs, criticalExtensionsFuture SEQUENCE {} } } RRCSetup-IEs :: SEQUENCE { radioResourceConfigDedicated RadioResourceConfigDedicated, ... }這個(gè)結(jié)構(gòu)代表兩層意思首先是消息外殼包含一個(gè)事務(wù)標(biāo)識(shí)符rrc-TransactionIdentifier用來關(guān)聯(lián)請(qǐng)求和響應(yīng)其次是criticalExtensions這是一個(gè)CHOICE類型意味著消息體可以沿用舊格式也可以走未來的擴(kuò)展。CHOICE是ASN.1的關(guān)鍵概念如果你不理解后頭看R15/R16新增特性時(shí)會(huì)一頭霧水。再看RRCSetup的核心IE——radioResourceConfigDedicated這是個(gè)容器里面裝著SRB1配置、MAC配置、物理信道配置甚至包括初始的DRB配置。真正到代碼層協(xié)議棧會(huì)根據(jù)這個(gè)IE實(shí)例化PDCP、RLC、MAC實(shí)體。所以讀這條消息的時(shí)候你不能只看中文翻譯最好逐字段對(duì)照英文。我最常做的操作是把消息拆成“配置對(duì)象”如srb-ToAddModList、mac-MainConfig、physicalChannelConfig然后把每個(gè)對(duì)象對(duì)應(yīng)到下層原語這樣消息就有畫面了。3.3 用Wireshark/tshark把信令和PDF對(duì)應(yīng)起來假設(shè)你手里有一份空口抓包或仿真日志可以用Wireshark直接過濾RRC消息。命令行方式更快tshark -r 空口采集.pcap -Y rrc -T fields -e frame.number -e rrc.msgType -e rrc.rrcSetup這里-Y rrc是顯示過濾器只保留RRC消息-T fields表示按字段輸出-e rrc.msgType打印消息類型-e rrc.rrcSetup直接打印RRCSetup的完整協(xié)議樹。如果沒有現(xiàn)成抓包可以用srsRAN或OpenAirInterface這類開源仿真平臺(tái)它們會(huì)生成帶RRC日志的pcap文件供你練習(xí)。拿到抓包后我習(xí)慣把Wireshark的協(xié)議樹窗口和PDF里的ASN.1并排擺。先看消息名再在PDF里搜索該消息的ASN.1定義然后逐字段對(duì)比。你會(huì)發(fā)現(xiàn)很多字段是OPTIONAL真實(shí)信令里沒出現(xiàn)不說明協(xié)議不支持只是網(wǎng)絡(luò)側(cè)認(rèn)為當(dāng)前場景不需要下發(fā)。這個(gè)“協(xié)議有、實(shí)際沒有”的差異恰恰是好多新手排查半天找不到字段的原因。4. 通讀中文版RRC協(xié)議的有效順序術(shù)語、流程與版本并進(jìn)4.1 為什么中文版容易讓你誤解版本和翻譯的雙重陷阱中文版PDF的主要風(fēng)險(xiǎn)不在翻譯質(zhì)量而在兩個(gè)地方術(shù)語不一致和版本混亂。同一本PDF里“Threshold”一會(huì)兒譯成“門限”一會(huì)兒譯成“閾值”“Cell”時(shí)而“小區(qū)”時(shí)而“蜂窩”“Release”在版本場景下是“版本”在流程場景下是“釋放”這些都會(huì)造成理解偏差。版本混亂更致命。市面上流傳的中文版很多源自LTE 36.331的某個(gè)早期版本甚至有人拿R8文檔去對(duì)照NR 38.331的代碼。36.331和38.331的目錄結(jié)構(gòu)、消息命名、狀態(tài)機(jī)都不同混著看必然出問題。我一般拿到PDF先翻版權(quán)頁或第一頁確認(rèn)規(guī)范編號(hào)和版本號(hào)36.331是LTE38.331是NR版本號(hào)形如v15.3.0。如果版本缺失就要小心。4.2 按流程分段閱讀而不是按頁碼順序最好的通讀順序不是從頭翻到尾而是圍繞核心流程分批推進(jìn)。我常用的四遍讀法第一遍只讀“范圍”“定義”和“狀態(tài)遷移”半小時(shí)內(nèi)建立全局地圖第二遍讀連接建立、安全激活和重配置重點(diǎn)理解承載建立過程第三遍讀切換在重配置里常體現(xiàn)為mobilityControlInfo字段和連接重建第四遍讀測(cè)量配置與測(cè)量上報(bào)。每讀完一個(gè)流程畫兩張示意圖一張是信令順序圖另一張是狀態(tài)遷移局部圖。畫圖暴露的理解斷點(diǎn)比讀十遍文字都管用。具體安排上可以每天只處理一類流程。例如周一專門看連接建立從UE發(fā)起的RRCSetupRequest開始到網(wǎng)絡(luò)下發(fā)RRCSetup、UE反饋RRCSetupComplete周二處理重配置周三做切換周四處理重建和失敗恢復(fù)周五集中看測(cè)量報(bào)告里的事件A1/A2/A3/A4/A5。每一類流程不要貪多查透一個(gè)消息的IE列表就足夠。4.3 版本差異36.331 vs 38.331對(duì)比項(xiàng)LTE 36.331NR 38.331狀態(tài)機(jī)RRC_IDLE / RRC_CONNECTED增加RRC_INACTIVE連接建立消息RRCConnectionSetupRRCSetup去掉Connection重配置消息RRCConnectionReconfigurationRRCReconfiguration特殊特性沒有條件切換、沒有非活動(dòng)態(tài)條件切換、UE輔助信息、NTN等NR的消息命名普遍去掉了“Connection”這是一個(gè)容易忽略的坑。如果你在Wireshark里看到RRCReconfiguration卻在36.331里搜不到那很正常因?yàn)樗蠷RCConnectionReconfiguration。中文版PDF如果寫著“RRC連接重配置”基本可以判斷為LTE版本在NR的上下文里它叫“RRC重配置”。通讀時(shí)也要留意新版本新增的流程。例如NR的RRC_INACTIVE相關(guān)流程包含RRCResume和RRCRelease帶suspendConfig這在LTE里完全沒有。用版本號(hào)和流程名連環(huán)定位能少走很多彎路。5. 避坑指南中文版RRC協(xié)議PDF最常見的5個(gè)坑5.1 消息名稱對(duì)不上RRCSetup還是RRCConnectionSetup現(xiàn)象在做NR協(xié)議棧時(shí)代碼里看到的是RRCSetup可手里的中文版PDF寫的是“RRC連接建立RRCConnectionSetup”搜索不到對(duì)應(yīng)結(jié)構(gòu)以為代碼出了問題。原因PDF翻譯自LTE 36.331而NR 38.331已經(jīng)改名。消息名從RRCConnectionSetup變成了RRCSetup類似的重配置消息也是如此。解決先確認(rèn)PDF封底的規(guī)范編號(hào)。如果是36.331就當(dāng)LTE資料用不要套到NR需求上。如果是38.331再對(duì)照你使用的協(xié)議棧代碼版本看是哪一側(cè)命名習(xí)慣不一致。代碼里是38.331風(fēng)格就以規(guī)范英文名為準(zhǔn)。5.2 ASN.1語法看著像天書無法定位字段現(xiàn)象打開消息定義全是SEQUENCE、CHOICE、OPTIONAL、ENUMERATED幾十行堆在一起根本不知道從哪里開始讀。原因ASN.1是一種形式化描述語言沒有基本語法概念直接讀當(dāng)然難。解決先花一小時(shí)搞懂SEQUENCE有序結(jié)構(gòu)體、CHOICE多選一、OPTIONAL可缺省、INTEGER整數(shù)、ENUMERATED枚舉這五個(gè)概念。再看一個(gè)例子比如LTE里的RRCConnectionSetup把外層SEQUENCE拆成“消息頭”和“協(xié)議IE”一層層剝進(jìn)去。多數(shù)中文版PDF結(jié)尾有ASN.1的符號(hào)說明可以提前翻出來看避免硬啃。5.3 重配置消息和協(xié)議棧代碼里看到的新IE對(duì)不上現(xiàn)象日志里出現(xiàn)了rrcReconfiguration帶conditionalReconfiguration字段PDF里卻沒有這個(gè)字段懷疑自己拿錯(cuò)文檔。原因協(xié)議版本迭代頻繁。R16新增了條件切換CHO老版本PDF里自然沒有。不止CHONR的UE輔助信息、NTN、邊鏈路等也都是后加的。解決直接在文檔目錄頁或頁腳看規(guī)范版本號(hào)。更可靠的辦法是查找該規(guī)范的Change Request記錄里面逐條列出哪個(gè)版本增加了哪些IE。你不需要讀完整CR只需要搜索消息名加版本號(hào)例如“RRCReconfiguration R16 conditionalReconfiguration”就能定位到對(duì)應(yīng)IE的最新定義。5.4 下載的PDF缺頁、掃描版、無法復(fù)制文字現(xiàn)象打開PDF只能翻看不能搜索內(nèi)容還缺了“測(cè)量”章節(jié)嚴(yán)重阻礙檢索。原因流傳的掃描件OCR不完整或者原掃描版本身就缺頁。解決優(yōu)先找純文字版驗(yàn)證方法是用pdfgrep或直接CTRLF搜一個(gè)常用詞比如“RRCConnectionSetup”。搜不到就要考慮PDF轉(zhuǎn)文本工具。即便用OCR轉(zhuǎn)出來也要注意文字錯(cuò)漏。最穩(wěn)妥的做法是把中文版當(dāng)輔助保留一份英文原版做關(guān)鍵字段對(duì)照避免在掃描件上花時(shí)間。5.5 只看PDF不會(huì)抓信令分析遇到異常抓瞎現(xiàn)象把協(xié)議背得差不多但拿到一條實(shí)際信令比如RRCSetupComplete里的selectedPLMN-Identity不知道去PDF哪里查甚至不知道這是什么意思。原因看協(xié)議是“應(yīng)然”真實(shí)網(wǎng)絡(luò)是“實(shí)然”。網(wǎng)絡(luò)側(cè)不一定嚴(yán)格按PDF的默認(rèn)配置下發(fā)真實(shí)抓包里有大量OPTIONAL字段缺失、異常分支和廠商自定義IE只看書很難積累敏感度。解決配合仿真或真實(shí)抓包學(xué)習(xí)。用srsRAN或OpenAirInterface起一個(gè)極簡網(wǎng)絡(luò)觸發(fā)一次RRC連接建立把抓包存成pcap然后回到PDF逐字段比對(duì)。如果抓不到現(xiàn)場至少用公共測(cè)試平臺(tái)的日志樣例練習(xí)。關(guān)鍵是形成“看到消息名→猜主要IE→回PDF驗(yàn)證→記錄差異”的循環(huán)。6. 進(jìn)階把RRC協(xié)議文檔變成排查問題的隨手工具6.1 把PDF轉(zhuǎn)成可檢索文本用grep定位IE和字段紙質(zhì)閱讀習(xí)慣容易讓人忽略一個(gè)重要技巧協(xié)議文檔是可以被當(dāng)成數(shù)據(jù)庫來查的。先把中文版PDF轉(zhuǎn)成純文本# 安裝poppler-utils后執(zhí)行 pdftotext -layout RRC協(xié)議中文版.pdf rrc.txt # 搜索某個(gè)消息名稱帶行號(hào)輸出 grep -n RRCReconfiguration rrc.txt-pdftotext會(huì)保留目錄和正文的排版結(jié)構(gòu)轉(zhuǎn)出來的txt可以配合grep快速定位。搜索時(shí)建議先搜英文消息名再搜IE名。如果中文版翻譯把消息名改了就搜中英文共同的關(guān)鍵字比如“重配置 安全”。這個(gè)方法在排查現(xiàn)場時(shí)相當(dāng)省時(shí)間不用翻幾百頁P(yáng)DF。要注意的是掃描版PDF轉(zhuǎn)出來是亂碼得先用OCR處理或者干脆換回文字版。6.2 手工制作IE速查表日常排障里最拖速度的就是“我記得這個(gè)IE在但找不到”。所以我會(huì)針對(duì)自己常碰的消息做一張IE速查表字段結(jié)構(gòu)如下消息關(guān)鍵IE方向用途備注RRCSetupradioResourceConfigDedicated網(wǎng)絡(luò)→UE配置SRB1、MAC、PHY建立消息RRCReconfigurationradioResourceConfigDedicated網(wǎng)絡(luò)→UE修改承載、切換、測(cè)量可帶measConfigRRCReconfigurationmeasConfig網(wǎng)絡(luò)→UE配置測(cè)量對(duì)象、上報(bào)事件A1/A2/A3等MeasurementReportmeasResultsUE→網(wǎng)絡(luò)上報(bào)鄰區(qū)測(cè)量結(jié)果攜帶RSRP/RSRQ/SINRRRCSetupCompleteselectedPLMN-IdentityUE→網(wǎng)絡(luò)告訴網(wǎng)絡(luò)UE選了哪個(gè)PLMN還帶registeredAMF等制作這個(gè)表不必全量只要把你工作場景里出現(xiàn)過的消息和IE填進(jìn)去。每次在抓包里看到新消息就補(bǔ)一行。三個(gè)月后這張表就是你個(gè)人的協(xié)議速查手冊(cè)。6.3 驗(yàn)證你有沒有真讀懂用手工方式解析一條消息讀協(xié)議最終要落到解析。你可以手動(dòng)挑一條短消息比如RRCSetupComplete用文本編輯器或腳本抽取它內(nèi)部的IE名稱和值再和Wireshark解析結(jié)果比對(duì)。比如抓包里有一條rrc.rrcSetupComplete.selectedPLMNIdentity 1那么你該能立刻反應(yīng)這個(gè)值對(duì)應(yīng)RRCSetupComplete里的selectedPLMN-Identity語義是UE宣告自己選擇了PLMN列表中的第一個(gè)PLMN。如果你需要翻五分鐘才能找到說明你的IE定位還要加強(qiáng)。更進(jìn)階的做法是自己寫腳本解析ASN.1編碼的數(shù)據(jù)但實(shí)際工作中Wireshark已經(jīng)幫你做了你真正需要訓(xùn)練的是“從字段名反查協(xié)議定義”的速度。我做協(xié)議排障這些年最后悔的就是剛?cè)腴T時(shí)拿到中文版PDF后從頭硬啃浪費(fèi)了快一個(gè)月。后來改成“術(shù)語表打底、流程主線、抓包對(duì)照、速查表沉淀”這條路效率才起來。每一次踩坑不管是消息名不符還是字段對(duì)不上都值得記回速查表里。中文版PDF是很好的敲門磚但別讓它成為唯一依賴。你最終要能閉上眼在腦子里畫出狀態(tài)機(jī)和信令流程睜開眼能在Wireshark和代碼間來回定位。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取