曹操的兵力也远不及袁绍,其总兵力大概不过几万人,投入前线的兵力据《武帝纪》说“兵不满万,伤者十二三”。 袁绍大军来攻,许都震动。曹操安慰众将说:“吾知绍之为人,志大而智小,色厉而胆薄,忌克而少威,兵多而分画不明,将骄而众令不一,土地虽广,粮食虽丰,适足以为我奉也。” 四月,曹操亲自率兵北上解白马之围,他采纳谋士荀攸之计,先进军延津(今河南延津北,白马以西),做出要渡河袭击袁军的态势,吸引袁军分兵西向,然后突然转向迅速赶往白马。 曹操救出白马军民,沿黄河西撤。 曹操见追兵渐近,命军士解鞍放马,并置辎重于道。袁军追兵大至,争抢辎重,阵形混乱。 八月,袁绍大军连营而进,东西数十里,依沙堆为屯,进逼官渡。曹操分兵坚守营垒,伺机而动。 两军一攻一守,相持近二个月。久战之下,曹操处境极为困难。 这时袁绍谋士许攸因向袁绍献偷袭许都之计不成,且在河北的家眷犯法被抓,心生悔恨,而来投曹操,献计让曹操偷袭乌巢。 曹操军至乌巢,命四面放火,袁军大乱,淳于琼拒营死守。 士卒都拼死力战,因此大破袁军,斩淳于琼等,尽燔其粮草。 由于曹操预留兵力精且多,曹营未破,乌巢败讯已经传来,大将张郃、高览等人率部投降曹操,袁军溃散。袁绍弃军逃回黄河以北。 曹操清点袁绍书信,得到自己部下勾结袁绍的信,尽烧之,说:“当绍之强,孤犹不能自保,而况众人乎!” 官渡之战,曹操击溃了最大的敌人袁绍,由他统一北方已是大势所趋。官渡之战也是中国战争史上以少胜多、以弱胜强的著名战例。 公元204年(建安九年)二月,曹操乘袁尚出兵攻打袁谭之机,进军围攻邺城(今河北临漳西,河南安阳北)。袁尚率军回救,依滏水(今滏阳河)为营,曹操进军将其营寨包围。 袁尚逃奔中山(今河北定县)。曹操命人拿着缴获袁尚的印绶节钺招降邺城守军,城中斗志崩溃。邺城遂被曹操攻破。 公元205年(建安十年)正月,曹操又以负约为名,攻灭袁谭,冀、青二州平定。 公元206年(建安十一年),曹操攻灭高干,平定并州。 汉末,辽西、辽东、右北平三郡乌桓结合,是为三郡乌桓,其首领为辽西部的蹋顿。 这年五月,曹操亲率大军到达无终(今蓟县)。 在田畴的引导下,曹操大军登徐无山(今河北玉田北),出卢龙塞(今河北喜峰口附近),“堑山堙谷五百余里”,直指乌桓老巢柳城(今辽宁朝阳南)。 二军相遇,时曹军辎重在后,“被甲者少,”而乌桓军军势甚盛。 乌桓军大乱,曹军阵斩蹋顿,大获全胜,胡、汉降者二十余万,袁尚等人逃奔割据平州的公孙康。 遂率军还师。不久,公孙康果然斩杀袁尚、袁熙,并将其首级献与曹操。 十一月至易水,代郡乌丸行单于普富卢、上郡乌丸行单于那楼将其名王来贺。 归程途中,据《曹瞒传》记载:“时寒且旱,二百里无复水,军又乏食,杀马数千匹以为粮,凿地入三十馀丈乃得水。 公元208年(建安十三年),开辟玄武池训练水军。六月,曹操废三公,恢复丞相制度,并自任汉朝丞相。基本平定北方后,兵锋转而南向。 九月,曹操大军进至新野(今属河南),刘琮以为无法抵挡,举荆州之众投降曹操。 江陵为荆州重镇,存有大量军用物资。