建安二十一年(216年),曹操分匈奴为五部,以刘豹为左部师居于新兴(今山西忻州市北),刘豹死后,刘渊代为左部帅。西晋太康十年(289),晋武帝司马炎以刘渊为匈奴北部都尉。刘渊自称是匈奴冒顿之后,《晋书•刘元海载记》载:“汉高祖以宗女为公主,以妻冒顿,约为兄弟,故其子孙遂冒姓刘氏。”又载,刘渊出生前就有祥瑞出现。魏嘉平年间(249年—253年),刘豹之妻呼延氏去龙门求子,忽然有一条大鱼,顶有两角,跃鳞炫髻进了龙门祭所,久之方才离去。是在,呼延氏作梦,见有鱼变人,十三个月后,遂生元海。元海之名,由此而来。刘渊自托冒顿之后,又编了一套类似刘邦斩蛇的这样一个谶语故事,为日后起事制造舆论依据。刘渊少年时代,酷爱读书,以当时上党(今山西长治市)大名土崔游为师,遍习《诗经》、《周易》、《尚书》等儒学经典。又博览《史记》、《汉书》和诸子学说。常对人们说:“一物之不知者,周君子之所耻也。”刘渊出身匈奴休屠种,汉化较深,自称为两汉皇室之后,故改姓刘,世代作五部帅和五部都尉。刘渊本人任左部都尉,是於扶罗之孙,刘豹之子。他跟汉族儒生学习经史,并作为匈奴侍子住在洛阳,同洛阳官僚有很多往来。公元290年,晋以刘渊为建威将军匈奴五部大都督。公元304年,王浚、司马腾起兵反司马颖,刘渊自愿请求回匈奴领兵来救援,司马颖拜他为北单于,令他回匈奴。刘渊到了左国城(即今山西离石),匈奴右贤王刘宣等推他为大单于。刘渊派兵到邺城,司马颖已被王浚、司马腾打败。刘渊听从刘宣等人的怂恿,于左国城称王,建立了汉国。刘渊称王起兵,“永嘉之乱”也就开始了。
刘渊起兵后不久,就控制了并州的大部分土地,山西、河北很多汉人地主也归附了他。羯人石勒、汲桑在关东起义,后来汲桑被地主武装杀死,石勒投奔了刘渊。汉人刘伯根、王弥在山东一带起义,刘伯根战死后,王弥率众继续战斗,一直打到洛阳城下,兵败后也投奔了刘渊。南阳的雍州流民由王如率众起兵,后来也归附了刘渊的部将石勒。
在西晋时期建国的还有代国和前凉。公元310年,鲜卑族人拓跋猗建立了代国。公元314年,西晋凉州刺史张轨和儿子张实建立了前凉政权,控制了从陇西到西域的广大地区。
刘渊起兵以后,得到了石勒、王弥两支兵马,势力大增,锋芒指向中原地区。公元308年,刘渊攻下平阳(今山西临汾),正式称帝,就是汉光文帝。刘渊派部将石勒和第四子刘聪各领大军向洛阳进逼。