十二月二十四日巳時,鮮卑人飽餐一頓後,在白登山腳結成陣勢,六萬人的隊伍分成五列,他們同時下山進軍,從北往南以此排列是:置鞬莫羅、日律推臣、宴荔遊孤迄侯、沒鹿回竇賓、副伏羅去賓,而拓跋詰汾率一萬人馬,駐留在白登山上總攬全域性。
漢軍此時正要用膳,櫛比的軍營裡升起裊裊炊煙,臨近年關,今日諸軍加飯,士兵們都頗為高興,他們忽而遠見鮮卑人從山間前來,不由大為掃興,只能先擱置飯食,回到營房中拿出甲冑兵器。這時漢軍以為鮮卑人只是故技重施,大概嘗試一陣便會退軍,但等鮮卑人距離鹿角僅五里時,他們才發現此次大為不同,鮮卑人全軍壓進,一看便要在此地一決生死。
軍司馬顧益看見山間、林間俱是鮮卑的人馬,地上的砂石也隨之躍動,他大為緊張,忙派使者去帥營通報情形,而後又下令敲響戰鼓,鼓聲震耳,士兵們也自覺列陣在鹿角之後,等待鮮卑人的第一輪衝鋒。
近兩月交戰下來,雙方對對方的戰術都算熟稔了。此次鮮卑的前鋒不再是甲騎具裝,而是推著木楯的甲士,他們用麻布包著武靴,踏足在薄冰上,頂著漢軍的箭雨一直向前,目標赫然是漢軍在丘陵處突出的部分鹿角。
但漢軍也做過準備,鮮卑上次突襲之後,顧益也感到此處防禦薄弱,他便在丘陵上設定了三座望樓,且圍著望樓和鹿角再挖了兩圈壕溝,但缺陷在於,他也未料想到鮮卑軍會在此地決戰,以決戰而言,這些佈置顯然遠遠不夠。這些最前列的鮮卑甲士抬著一丈二尺的木楯,一直走到壕溝前,後方的鮮卑射手不斷遠射箭矢,掩護他們將木楯架在壕溝上,此地的漢軍與鮮卑人兵力懸殊,即使以長矛拼命戳刺,也不過拖延了兩刻鐘。不少鮮卑甲士跳入壕溝內,頂著木楯駕上對岸,如此駕成十三座小橋後,鮮卑大軍便成功湧入到鹿角之內,與漢軍進行肉搏廝殺。
顧益在中軍的望樓內遠望這幅場景,心中畏懼到極點,他遙望四周想:傳令計程車兵還未回來嗎?但眼中浮現的是更為可怖的景象。在平城之西,漢軍佈置有兩陣一萬兩千人,佔據著長約四里的戰線,一丈內有三四人而已,而此時鮮卑人全線猛攻,每名漢軍都要阻擋四倍於己的敵人,在顧益看來,敵我的對比就如同溪流與狂濤,但即使想向臨近的令狐淵陣求援,令狐淵也無援兵可派了。
他又指揮軍隊勉力阻擋了兩刻,但前線計程車卒到底力不從心,壕溝間逐漸湧出越來越多的破口,而丘陵上的望樓都支撐不住,被鮮卑軍攻下後又推倒了,散為一地的滾木。這時後背處傳來一陣粗獷的角聲,平城的城門大開,步度根眼看拓跋詰汾的援軍卓有成效,當即號令城中所有能戰的部民盡數出戰,向顧益部背部發起衝擊,但他們首先也要跨過對內的壕溝,這給了顧益最後的反應時間。顧益也別無選擇,他當即用旗語下令,讓全軍向他靠攏結陣,放任鮮卑大軍突破工事。
拓跋詰汾見漢軍放棄工事,認為這是決定勝負的大好時機,便要將最後的軍隊也壓上去,他對隨他初陣的兒子拓跋力微說:“你母親說你是陰山之子,我也一直當你是壯大我族的驕子,此次你初戰,跟在我身後恐怕遭族人非議,這次衝陣,你就到最顯眼的地方,讓諸部看你殺敵的英姿吧。”拓跋力微時年十六,他非常年輕,身材孔武,更勇於表達自己的意見:“我觀此時局勢,諸部已佔據主動,若是任由戰局發展,便是沒有我部,也能大獲全勝,但敵人尚有八陣未動,如何變陣,實是難以預料的事,不如稍等片刻,看漢人後續手段再說罷。”拓跋詰汾聞言大為訝異,他思慮一番,覺得兒子的意見頗有道理,便讓手下人馬繼續駐留山上,觀察漢軍的變動。
鮮卑人下山時,城南的劉備與陳沖都站在望樓上,遠遠便看見鮮卑人如狼群的攻勢,但他並沒有令諸陣動作,便是顧益軍使到來求救,中郎將也沒有援助,反而是說:“先讓所有的騎士上馬,然後再等一等。”眾人都不明白緣由,等到望樓上望見城東大開城門,步度根率眾殺出時,劉備才再次下令說:“可以破陣了。”陣中計程車卒們迅速往壕溝中推土,很快就在壕溝中推出一條兩丈寬的道路來,全軍有一萬騎士,劉備分給張飛四千,讓他們就從此處出發,先去進攻內側出擊的步度根部。而後又分給關羽六千騎士,讓他從城北出陣,繞擊白登山部的鮮卑人。其餘漢軍則盡數開拔,陳沖到城北去,領楊奉、郭大、胡才部襲擊鮮卑人右翼,城西的赫連凡莫、且渠智牙斯、劉宣部隨劉備一齊襲擊鮮卑人左翼。
鮮卑人對此也做過打算,若是剩下的漢軍來援,大概是襲擊左右兩翼,等主攻的日律推臣、宴荔遊孤迄侯、沒鹿回竇賓三部攻入陣中後,置鞬莫羅、副伏羅去賓兩部就地掩護兩翼,拖延時間,只要主攻三部鑿穿漢陣,與單于匯合一處,便可驅逐潰兵,將漢軍圍城的陣勢徹底衝散。
但單于遇了些問題,步度根率城民衝到漢軍陣前,竟無法衝過內側壕溝,這是因為內側的壕溝比外側寬上兩丈的緣故,挖壕溝的泥土被漢軍堆在陣中,因此漢軍能快速推出土道,而單于只能用笨辦法,在一邊挖土往壕溝中填,只是這樣顯然太慢了,張飛為追趕時間,令部下都著輕甲驅馬,單于不過填了兩刻鐘,便見張飛驅馬快速接近。
張飛部身披輕甲,單于部也沒有多少重甲,最大的戰力便是身前五百甲騎具裝,張飛見狀吩咐說:“不要與甲騎纏鬥,我們殺潰大眾,此戰便是勝了。”於是他們繞過甲騎,直接殺入無馬的鮮卑大眾中,老者們盡力射了些弓矢,橫跨就被近身的漢軍衝散踩死,女人們試圖以血肉阻擋,到底比不過刀劍,而甲騎果真追不上漢軍輕騎,只能眼看張飛部在人群中殺入又殺出,如同裁刀劃過織布,很快步度根部就徹底崩潰。
新單于不甘心就此回城,令甲騎脫下重甲,他看向這些騎士,見他們都面帶汗水與不甘,心中暗自嘆說:若是樹洛於齊光在身旁便好了。但他面色不變,只對隨從說:“男兒怎能死在女人的哭聲中呢?讓我們一同浴血罷。”騎士們都為此言激勵,手持斫刀振臂高呼,而後跟隨單于向張飛殺去。但這些騎士身披重甲久了,體力頗為疲累,最終沒能改變戰局,都為漢軍殺了,而步度根對上張飛,他的氣力不強,斫刀與蛇矛撞了四五下,手臂便麻得沒有知覺,隨即被蛇矛捅穿喉嚨。
城內的鮮卑殘部就此被張飛徹底解決,鮮卑人在漢軍陣中廝殺,也把這些都收入眼底,他們不知單于已死,只是議論說:得不到城中支援,接下來將如何作戰呢?鮮卑諸帥也沒有備案,他們只能傳令說,只要殺潰眼前的漢軍,總是能勝的,但顧益與令狐淵都收攏一團,利用軍營逼仄的地形與鮮卑軍鬥爭,雖然節節敗退,但終究無法被吃下。
這時兩翼的漢軍援軍也都到了,拓跋詰汾見到被夾擊的形勢,不再能再在山上觀望,他當即決定先下山增援右翼,打算先擊潰較為薄弱的陳沖部。這實在是個錯誤的抉擇,因為他們沒能注意到關羽,關羽部輕裝從城北處出陣,繼而繞了一個大圓到山陰處,他們隱藏身形,快步向白登山前進,只是這條路選得太遠,雖是與張飛同時行動,但在拓跋詰汾下山近一個時辰後,他才佔據白登山,這時兩軍廝殺已久,很多兵卒都疲累了,作戰最久的顧益與令狐淵兩部已處在崩潰的邊緣。
算算時間,兩軍廝殺近四個時辰,從午前一直戰到黃昏,日光都要散盡了。此時關羽從白登山奔下,令將士們都高舉火炬,照亮他甲冑外的深綠罩袍,苦戰的漢軍們見關羽進入戰場,都興奮地高呼狂嘯,而鮮卑人忽見一支不知數目的騎兵出現在身後,膽氣都落盡了,拓跋詰汾與沒鹿回竇賓嘆說:“他們竟也有援軍嗎?”於是都放棄戰鬥,也不管前線繼續廝殺的兵卒,向東方散亂又竭力地奔跑。
漢軍都戰累了,也沒有繼續追趕,四方的戰陣繼續合圍,將不及逃走的鮮卑士卒們圍困在一處,他們殺了片刻,鮮卑人抵擋了片刻,隨即誰也不想動手了,剩下的鮮卑人中一個小帥請求投降,漢軍也就停了手去通報劉備,劉備也就痛快地應允了,令他們放下武器甲冑,安置在原本的漢軍營地中。
另一邊張飛已殺入平城內,城內百姓得知單于戰死的訊息,也請求投降,唯一的請求是允許他們安葬單于。張飛本不願允許,又在城中多殺了一個時辰,等陳沖得知訊息,急令魏延叫停張飛,又將步度根整理遺容後,將屍體還給鮮卑人,他們也就如約投降。
如此一來,歷時三月的平城之戰終於告一段落,鮮卑近兩代人披荊斬棘,才有壓制漢軍的大好局面,竟被劉備陳沖一戰摧毀,漠南、雲中、五原、代郡的鮮卑諸部都為之震撼。但他們將何去何從,尚不是陳沖劉備所關心的,破城的第三日,漢軍恢復訊息,陳沖這才得知天下形勢已天翻地覆。
此時眾人正在用膳,劉備邊翻看張楊的傳信,邊嚼著剛出鍋的胡餅,他將書信遞給關羽後,皺眉問陳沖道:“你怎麼打算?”