為了防禦匈奴人的進攻,漢高帝劉邦便把韓王信封于代地。漢高帝六年(公元前201年),匈奴大舉進攻馬邑,韓王信不敵,于是索性投降匈奴。
當楚漢戰争正在如火如荼地進行之際,開始日益強大起來的北方遊牧部落匈奴在冒頓單于的帶領下,東破東胡,西攻月氏,北征丁零、堅昆等部,南滅樓煩、白羊,并重新占領了河套地區。待到西漢王朝建立時,強盛的匈奴部已擁有“控弦之士”近40萬,他們正虎視眈眈地對着中原,聲勢逼人。顯然,他們不久将要成為西漢王朝的一支勁敵。
高帝六年(前201年),冒頓單于發兵圍攻馬邑(今山西朔縣)。是年九月,早就同匈奴關系暧昧的韓王信放棄了抵抗,開始與匈奴勾結。次年,韓王信又與匈奴聯合進攻晉陽(今山西太原)。
高帝七年(前200年)十月,劉邦親率大軍30萬進剿韓王信,于銅鞮大破叛軍。韓王信公開逃往匈奴,與匈奴人及部下殘軍繼續同漢王朝為敵。匈奴左右賢王率萬餘騎兵在廣武、晉陽一帶不斷與漢軍周旋。時值天寒大雪,漢軍士卒多被凍傷,其中被凍掉了手指的人就占到了十分之二三。然而,冒頓單于為迷惑漢軍,故意隐匿其精兵,反将一千老弱士卒暴露在外。
劉邦被騙,于是親率漢軍主力向匈奴大肆進攻。當漢軍越過句注山時,奉春君劉敬覺察到敵軍有異常,他勸阻劉邦道:“如今兩國相鬥,應該首先把自己的優勢展現出來以令敵軍産生畏懼心理。現在,我卻隻看見敵方老弱病殘的士兵,想來這一定是他們引誘我們的法子。所以,我認為匈奴是不可以輕易攻打的!”然而,劉邦非但不聽勸阻,反而指責劉敬惑亂軍心,以至将其關押問罪。
劉邦率漢軍至平城,在步兵主力尚未集結之時,冒頓單于突然率領着自己的30多萬精銳部隊殺出,一鼓作氣便将劉邦所部圍困于平城東南之白登山(今山西大同市東北)。漢軍頓時被截為内外不能呼應的兩部,劉邦及被圍困于白登山上的漢軍将士七日七夜不得突圍,内外漢軍彼此不能相救,情況萬分危急。
就在此時,劉邦手下的重要謀士陳平獻計:派人賄賂單于的阏氏(相當于漢朝的皇後),并曉之以利害。阏氏在接受了賄賂後,果然勸說冒頓令其解圍。恰值叛投匈奴的降将王黃、趙利等人也未按單于規定的時間趕來會師,此事引起了冒頓的懷疑。冒頓消滅劉邦的決心開始動搖,于是他便命令圍開一角,陳平等人則趁隙保護着劉邦突圍而出。到達平城時,漢軍主力已至,匈奴人見戰機已失,不得不撤兵而去。劉邦知匈奴撤兵,也不敢戀戰,在派出樊哙收複代地後,自己則率兵退回了廣武。不久,他回到了長安。
平城之戰後,白登被圍使得漢高帝劉邦認識到了西漢王朝暫時還無力與匈奴較量,從此他便改變了對匈奴的強硬對策。此時,劉敬趁機獻上了“和親”之策,以暫時籠絡住貪婪的匈奴人。漢匈和親以後,雙方還“約為兄弟”,西漢政府最終用财物換得了邊境暫時的安甯。盡管此後匈奴仍不時騷擾,但大規模的軍事行動在漢初并未出現。直到漢武帝時期,漢方才一改屈辱的妥協政策,轉而對匈奴人展開了大規模的反擊。