按《史記》記載,匈奴人的先祖是夏朝的遺民,向西遷移的過程中融合了月氏、樓蘭、烏孫、呼揭及其旁二十六國的白種人。即夏的后裔淳維,在商朝時逃到北邊,子孫繁衍成了匈奴。還有一說認為,移居北地的夏之后裔,是夏桀的兒子。夏桀流放三年而死,其子獯鬻帶著父親留下的妻妾,避居北野,隨畜移徙,即是中國所稱的匈奴。部分學者根據《史記》記載的后半段文字,認為匈奴原是山戎、獫狁、葷粥。王國維在《鬼方昆夷獫狁考》中,把匈奴名稱的演變作了系統的概括,認為商朝時的鬼方、混夷、獯鬻,周朝時的獫狁,春秋時的戎、狄,戰國時的胡,都是后世所謂的匈奴。
而在匈奴建國以前,東北亞草原被許多大小不同的氏族部落割據著。那時的部落和部族聯盟的情況是“時大時小,別散分離”;是“各分散居溪谷,自幼軍長,往往而聚者百有余,然莫能相一”。當時分布在草原東南西喇木倫河和老哈河流域的,是東胡部落聯盟;分布在貝加爾湖以西和以南色楞格河流域的,是丁零部落聯盟;分布在陰山南北包括河套以南所謂“河南”(鄂爾多斯草原)一帶的,是匈奴部落聯盟。此外還有等部落集團分散在草原各地。后來的匈奴國,就是以匈奴部落聯盟為基礎,征服了上述諸部落聯盟、部落以及其他一些小國而建立起來的。
自西周起,戎族開始威脅中原王朝,周幽王烽火戲諸侯后,犬戎部落攻陷鎬京,迫使平王東遷。戰國時林胡、樓煩多次侵擾趙國,趙武靈王胡服騎射驅逐林胡、樓煩,在北邊新開辟的地區設置了云中等縣。林胡、樓煩北遷融入新崛起的匈奴。在戰國末期,趙國大將李牧曾大敗匈奴。
前3世紀匈奴統治結構分為中央王庭、東部的左賢王、和西部的右賢王,控制著從里海到長城的廣大地域,包括今蒙古國、俄羅斯的西伯利亞、中亞北部、中國東北等地區。秦始皇統一中國后,前214年,命蒙恬率領30萬秦軍北擊匈奴,收河套,屯兵上郡(今陜西省榆林市東南)。“卻匈奴七百余里?,胡人不敢南下而牧馬”(《過秦論》)。蒙恬從榆中(今屬甘肅)沿黃河至陰山構筑城塞,連接秦、趙、燕5000余里舊長城,據陽山(陰山之北)逶迤而北,并修筑北起九原、南至云陽的直道,構成了北方漫長的防御線。蒙恬守北防十余年,匈奴懾其威猛,不敢再犯。
而冒頓單于是匈奴國的全盛時期(前209年至前128年,即冒頓、老上、軍臣三單于時期,相當于中國從秦二世元年到漢武帝元朔元年。),?在冒頓單于繼位后,開始對外擴張。在大敗東胡王之后,隨即并吞了樓煩、白羊河南王(匈奴別部,居河套以南),并收復了蒙恬所奪的匈奴地及漢之朝那(今寧夏固原東南)、膚施(今陜西榆林東南)等郡縣。并對漢之燕、代等地進行侵掠。向西進擊月氏,老上單于繼位后,大敗并殺死了月氏王,迫使月氏向西域遷徒。北方及西北一帶的丁零、渾庾、屈射、鬲昆、薪犁等部族先后臣服于匈奴。而漢朝與匈奴也進行大規模戰斗,其中平城之圍就是其中著名的一場戰役,漢高祖的時候,匈奴的冒頓單于帶領了四十萬人馬包圍了韓王信(原韓國貴族)的封地馬邑(今山西朔縣)。韓王信抵擋不了,向冒頓求和。漢高祖得到這個消息,派使者責備韓王信。韓王信害怕漢高祖辦他的罪,向匈奴投降了,于是冒頓又繼續向南進攻,圍住晉陽。漢高祖感到事態緊急,親自趕到晉陽,和匈奴對敵。于是在公元前200年寒冬,漢朝的軍隊冒著寒冷與匈奴兵對戰,打了才一會兒,匈奴兵就敗走了。所以漢朝軍隊一連打贏了好幾仗。于是冒頓單于帶兵逃到了代谷(今山西代縣西北)。漢高祖聽說了就派兵士去偵察,回來的人都說冒頓的部下全是一些老弱殘兵,連他們的馬都是挺瘦的,如果趁勢打過去,準能打勝仗。漢高祖有點懷疑,又派婁敬到匈奴營地去刺探。婁敬回來說:“我們看到的匈奴人馬的確都是些老弱殘兵,但我認為冒頓一定是把精兵埋伏起來,陛下千萬不能上這個當。”漢高祖大怒,說:“你膽敢胡說八道,想阻攔我進軍。”說著,就把婁敬關押起來。而漢高祖率領一隊人馬去攻打位于代谷的匈奴,剛到平城(今山西大同市東北),突然受到匈奴的突襲,他們個個人強馬壯,原來的老弱殘兵全不見了。漢高祖拼命殺出一條血路,退到平城東面的白登山。于是冒頓單于派出四十萬精兵,把漢高祖圍困在白登山上。周圍的漢軍沒法救援,漢高祖的人馬整整在白登被圍了七天,沒法脫身。幸虧高祖身邊的謀士陳平打發了一個使者帶著黃金、珠寶去見冒頓的閼氏(匈奴的王后),請她在單于面前說些好話。閼氏一見這么多的禮物,心里挺高興。當天晚上,閼氏對冒頓說:“我們占領了漢朝地方,沒法長期住下來,再說,漢朝皇帝也有人會來救他。咱們不如早點撤兵回去吧!”冒頓聽了閼氏的話,第二天一清早,就下令將包圍網撤開一角,放漢兵出去。