公元304年,就在李雄在成都称王的同时,匈奴人刘渊也在山西一带起兵反晋。
刘渊出身于匈奴贵族。他从小就读了很多汉族人的书,非常精通汉族文化。后来,他参加了西晋的军队,不久在成都王部下做了将军。八王之乱开始以后,刘渊觉得恢复匈奴地位的机会到了,就自称为王。由于汉朝曾经把公主嫁给匈奴单于,刘渊就自称是汉朝的外孙,把自己建立的国家定名为汉国。
刘渊称王建汉以后,势力不断增长,很快就攻下了上党、太原、河东、平原等几个郡。羯族人石勒造反失败,率领了胡人部众几千人归顺刘渊。鲜卑族的几个部落见刘渊势力强大,也青瓷兽形尊纷纷前来投奔刘渊。这样,在刘渊的号召下,逐渐形成了一个由匈奴、鲜卑、氐、羌等各族组成的反晋力量。公元308年,刘渊正式在平阳(今山西临汾)称帝,并派兵攻打洛阳。当时,洛阳的百姓虽然恨透了腐朽的西晋王朝,但也不愿受匈奴贵族的统治。刘渊两次进攻洛阳,都遭到了洛阳军民的猛烈抵抗。
后来,刘渊死了,他的儿子刘聪做了汉国皇帝,又派大将刘曜、石勒进攻洛阳。晋朝的兵力早就在八王之乱中消耗殆尽了,他们在洛阳百姓的配合下奋勇抵抗,但终因寡不敌众,被汉军击败。公元311年,各路汉军攻入洛阳,在洛阳皇宫中大肆抢夺财物,火烧宫殿房屋,杀掉王公士民3万余人。晋怀帝被汉军俘虏到平阳,不久就被刘聪杀害。
晋怀帝死后,他的侄儿司马邺继承皇位,就是晋愍帝。公元316年,刘曜攻下长安。晋愍帝在内无粮草、外无援兵的情况下,派出使者向刘曜投降,没想到使者却被刘曜杀了。晋愍帝没有办法,只得亲自光着上身,乘着羊车出城向汉军请降。晋愍帝在受尽侮辱之后,也被刘聪杀掉。西晋王朝在维持了52年之后,终于灭亡。