《史記.匈奴列傳》:
是時漢初定中國,徙韓王信於代,都馬邑。
《史記.韓信盧綰列傳》:
韓王信者,故韓襄王孽孫也,長八尺五寸……明年春,上以韓信材武,所王北近鞏、洛,南迫宛、葉,東有淮陽,皆天下勁兵處,乃詔徙韓王信王太原以北,備御胡,都晉陽。信上書曰:「國被邊,匈奴數入,晉陽去塞遠,請治馬邑。」上許之,信乃徙治馬邑。
扼要言之,韓王信乃戰國七雄中韓國的後人。因手握勁兵,被漢高祖徙至太原以北對抗已然強大的匈奴。漢高祖最初想他以晉陽為主要據點,韓王信反對,提議用馬邑。據顧祖禹《讀史方輿紀要卷二.歷代州域形勢二》,馬邑位於今山西朔州東北。
「晉陽去塞遠」反映晉陽與長城的距離較遠,換言之,馬邑較接近與匈奴交鋒的前線。「數入」可見匈奴對北邊侵擾頻繁。隋末劉武周,以馬邑為根據地,旋即陷代踰勾注山而入晉陽 (《讀史方輿紀要卷四.歷代州域形勢四》),此地為南下入關的咽喉,極具戰略重要性。一場攻防戰看來一觸即發。
然而,局面出乎意料地逆轉,韓王信輾轉投降匈奴,更將馬邑拱手相讓。《史記.韓信盧綰列傳》:
秋,匈奴冒頓大圍信,信數使使胡求和解。漢發兵救之,疑信數閒使,有二心,使人責讓信。信恐誅,因與匈奴約共攻漢,反,以馬邑降胡,擊太原。
秋冬季節弓勁馬肥,匈奴騎兵數目眾多,根本無從抵擋。加上漢高祖猜疑韓王信心存反叛,多次派使者去匈奴斡旋解決紛爭,竟被視為與匈奴暗通款曲,落得被斥責。左右是死,韓王信選了一個較穩妥的保障,聯合兵力強大的匈奴倒戈漢王朝,其實無可厚非。
由漢高祖御駕親征,韓王信敗走匈奴,馬邑的投降乃是迫出來的,無詳細規劃。冒頓和韓王信未有協同作戰,令漢軍屢戰屢勝。《史記.韓信盧綰列傳》:
七年冬,上自往擊,破信軍銅鞮,斬其將王喜。信亡走匈奴……匈奴仗左右賢王將萬餘騎與王黃等屯廣武以南,至晉陽,與漢兵戰,漢大破之,追至于離石,復破之。匈奴復聚兵樓煩西北,漢令車騎擊破匈奴。匈奴常敗走,漢乘勝追北,聞冒頓居代谷,高皇帝居晉陽,使人視冒頓,還報曰「可擊」。上遂至平城。
不過,《史記.匈奴列傳》透露了一些重要訊息:
高帝自將兵往擊之。會冬大寒雨雪,卒之墮指者十二三,於是冒頓詳敗走,誘漢兵。漢兵逐擊冒頓,冒頓匿其精兵,見其羸弱,於是漢悉兵,多步兵,三十二萬,北逐之。
第一,當時已經是冬天,天氣嚴寒,雨雪交雜而至,竟致漢軍將士手指凍傷而脫落,所謂「墮指」,捷報背後暗藏隠憂。第二,漢軍得逞,是因為冒頓採誘敵深入之計,假裝戰敗,引漢軍深入,一旦補給線拉長,即可予以截斷,再施以包圍。漢高祖果然中計,領大軍北上,遂迎來白登山之圍。
清人楊守敬《水經注疏卷十三》概括白登山位置:
《正義》又引李穆叔《趙記》云,平城東七里,有土山,高百餘尺,方十餘里。而顏師古云,台在平城東山上,去平城十餘里,今其處猶存……如淳曰:平城旁之高地,若邱陵矣。
大約為平城以東一高地。平城即今日山西省大同市 (在馬邑以北)。《史記.匈奴列傳》:
高帝先至平城,步兵未盡到,冒頓縱精兵四十萬騎圍高帝於白登,七日,漢兵中外不得相救餉。匈奴騎,其西方盡白馬,東方盡青駹馬,北方盡烏驪馬,南方盡騂馬。高帝乃使使閒厚遺閼氏,閼氏乃謂冒頓曰:「兩主不相困。今得漢地,而單于終非能居之也。且漢王亦有神,單于察之。」冒頓與韓王信之將王黃、趙利期,而黃、利兵又不來,疑其與漢有謀,亦取閼氏之言,乃解圍之一角。於是高帝令士皆持滿傅矢外鄉,從解角直出,竟與大軍合,而冒頓遂引兵而去。漢亦引兵而罷,使劉敬結和親之約。
《史記.韓信盧綰列傳》有
匈奴復聚兵樓煩西北,漢令車騎擊破匈奴。匈奴常敗走,漢乘勝追北……上遂至平城。
結合起來看,白登山被圍的應該是漢高祖的先頭車騎部隊,步兵移動較慢,趕不上車騎部隊的行軍速度,於是給冒頓可乘之機。東西南北盡是優質戰馬組成的精良騎兵,共四十萬,人數上、機動性上,可謂遠超漢高祖部隊,發難突圍成不可能。慶幸漢高祖有智謀,派使者買通冒頓妻子幫忙說項,加上冒頓、韓王信聯軍內部傳出通漢謠言,冒頓才放過漢高祖一馬。