官渡之戰是河北戰場的重要轉折點,袁紹雖然地廣人多,但是官渡一戰中糧草被燒,數萬軍士陣亡。其所帶來的影響是巨大的,數萬將士的撫恤問題便成了擺在袁紹面前的一大難題,自此,袁紹便無力南下,沒有充足的財力物力再大量集結軍隊。而曹操在官渡之戰後大獲全勝,雖然曹操此時不具備進擊袁紹的兵力,但是勝利的天秤已經完全倒向曹操。
公元202年(建安七年),袁紹病死,袁紹的溺愛幼子,立袁尚為世子,長子袁譚不服,與袁尚發生火拚。
公元204年(建安九年)二月,袁譚不敵袁尚,向曹操乞降。曹操應允,並乘袁尚出兵攻打袁譚之機,進軍圍攻鄴城(今河北臨漳西,河南安陽北)。袁尚率軍回救,依滏水(今滏陽河)為營,曹操進軍將其營寨包圍。袁尚害怕,請求投降,曹操不許。袁尚乘夜逃跑,袁軍潰散。袁尚逃奔中山(今河北定縣)。曹操命人拿著繳獲袁尚的印綬節鉞招降鄴城守軍,城中鬥志崩潰。鄴城遂被曹操攻破。從這一年起,曹操把自己的據點北遷到了冀州鄴城,政令軍隊此後皆從此出,而漢獻帝劉協的都城許昌則只留些許官吏。
公元204年距離官渡之戰已經三年之久,在這三年時間裡,曹操可算得上是風調雨順,連年征戰的曹軍得到了完完全全的修養生息。在這期間,曹操充分擴編了在官渡之戰中立下赫赫戰功的虎豹騎兵隊與虎賁步兵,比如,虎豹騎兵隊總數約為五千餘人,已經成為一支獨立的作戰部隊,這支部隊在河北戰役中開始展露鋒芒,在隔年正月的南皮之戰中,在戰場上殲滅袁譚的部隊並殺死袁譚。第二支部隊則是虎賁禁軍,總數約兩萬五千人。這兩支部隊的總和約三萬人左右,也就是說,曹操已經由官渡之戰時期的五千快速反應部隊編成了三萬人的快速反應部隊,單單這樣一支部隊在當時來說已經是非常強的作戰力量了,這是一支集機動性、裝備精良與人員齊整為一身的強大戰鬥力量。
除了對軍隊的擴編外,曹操的屯田戰略也初現成效,那就是,曹操的軍糧不再成為負擔,自此,曹操從來不需為糧草的募集操心。
公元207年(建安十二年),曹操為南下掃除障礙,決定肅清袁氏殘餘勢力,決定遠征烏桓。漢末,遼西、遼東、右北平三郡烏桓結合,是為三郡烏桓,其首領為遼西部的蹋頓。三郡烏桓與袁氏關係一直很好,並屢次侵擾邊境,擄掠人口財物。
這年五月,曹操親率大軍到達無終(今薊縣)。時正雨季,道路積水,「淺不通車馬,深不載舟船」。曹操聽從田疇之議,改從一條久已斷絕,但「尚有微徑可尋」的路線進軍。在田疇的引導下,曹操大軍登徐無山(今河北玉田北),出盧龍塞(今河北喜峰口附近),「塹山堙谷五百餘里」,直指烏桓老巢柳城(今遼寧朝陽南)。
八月,曹軍進至離柳城不足二百里時,烏桓才發現,於是蹋頓與袁尚、袁熙等人率數萬騎兵迎擊。
二軍相遇,時曹軍輜重在後,「被甲者少,」而烏桓軍軍勢甚盛。曹操登高瞭望,見烏桓軍雖多,但陣勢不整,遂命大將張遼為前鋒(率領的是虎豹騎兵隊),乘烏桓軍陣稍動之機,向烏桓軍發動猛攻。烏桓軍大亂,曹軍陣斬蹋頓,大獲全勝,胡、漢降者二十餘萬,袁尚等人逃奔割據平州的公孫康。這時,有人勸曹操乘勢進擊公孫康,曹操說:「吾方使康斬送尚、熙首,不煩兵也。」遂率軍還師。不久,公孫康果然斬殺袁尚、袁熙,並將其首級獻與曹操。諸將不明所以,曹操說:「彼素畏尚等,吾急之則併力,緩之則自相圖,其勢然也。」於是,曹操攻破三郡烏桓,也徹底肅清了袁氏勢力。
關於烏恆騎兵,烏恆騎兵其實整體的戰力不弱,在之前,時常與匈奴騎兵合兵南下攻打漢庭。但是,烏恆騎兵有一個特點,那就是草原民兵,這些人,戰時為兵,和平時則為民,所以,烏恆騎兵不能算是一支正規的部隊,這樣一來,這些騎兵的單兵作戰能力雖然強,但平時卻互相不統屬,也少有操練演習,所以才會讓曹操發現其陣勢不整。
註:烏恆騎兵是典型草原騎兵,從戰力組成上與匈奴時期或者後來的成吉思汗時期的騎兵其實都一樣,但是烏恆的經濟實力弱,在袁紹掌權期間,烏恆與漢軍友善,而且烏恆首領蹋頓自190年接任烏恆首領來,烏恆一直無戰事,這些騎兵生疏於戰事,又是一戰便遭遇虎豹騎兵隊,自然顯得弱了。