公元200年正月,董承预谋诛杀曹操的事情泄露,涉案人员更是一个不漏地被曹操杀掉。曹操发现刘备也是董承的同伙,立刻起兵东征。一场争斗之后,自然是刘备败了,便投奔袁绍去了。当时守下邳的是关羽,孤军自然难于抵抗,就暂时投降。
同年,袁绍发布讨伐曹操檄文,指控曹操“豺狼野心,潜包祸谋,乃欲挠折栋梁,孤弱汉室,除忠害良,专为枭雄“。袁绍派颜良等攻东郡。袁绍带着大兵,进至黎阳。荀攸因袁绍兵多,劝曹操引兵西向延津(黄河渡口,在今河南延津县北),装出要绕道袭击袁绍后方的样子,袁绍果然分兵而西。曹操就赶快引兵回来,把颜良击斩。于是袁绍整兵渡河,攻击曹操,大将文丑先到,曹操又把文丑击斩。
曹操破颜良、文丑之后,回兵官渡。袁绍便进兵阳武(今属河南原阳县),彼此相持。直到这一年八月里,袁绍才慢慢地进兵,靠着沙堆扎营,从东到西,连绵好几十里,曹操也分兵和他相持。袁绍在地面上筑起土山,地下掘了隧道,势要攻破曹操的营。
这时的曹操,兵力比袁绍弱,粮食也不够了。于是曹操不得不冒险了,准备袭击袁绍的粮道。当时袁绍有运粮的车子几千辆到了,曹操派兵袭击,把粮车尽数烧掉。但这并不能对袁绍伤筋动骨,到十月,袁绍运来另一批粮。
当时袁绍手下有一个谋士许攸,他投奔曹操,建议曹操轻兵奇袭袁绍的粮仓乌巢,烧其辎重。于是曹操亲自率领步骑五千,冒用袁军旗号,人衔枚马缚口,各带柴草一束,利用夜暗走小路偷袭乌巢。当曹军急攻乌巢时,袁绍增援的部队已经迫近。曹操孤注一掷,勠力死战,大破袁军,并将其粮草全数烧毁。
袁绍听得曹操攻打乌巢,对儿子袁谭说道:“我趁这时机,把他的大营打破,他就无家可归了。“遂派张郃、高览去攻曹操的大营,没能攻克。后来听得淳于琼被杀,张郃、高览就投降了曹操。这导致了军心动摇,内部分裂,大军崩溃。曹操乘胜追击,袁绍仓皇带八百骑兵退回河北。
公元202年五月,袁绍病死。袁绍之子袁谭、袁尚为争位失和,相互攻击,袁谭被袁尚打败,便派人求救于曹操。曹操见机会不可失,回兵攻取河北。公元204年八月,曹操攻下袁尚的根据地邺城(汉邺县,今河南临漳县),袁尚于是逃到中山(今河北定县)。此时袁谭已乘机占领了冀州的东部,就去攻击袁尚,袁尚逃到故安(汉县,今河北易县东南),投奔了袁绍另一个儿子袁熙。曹操突然又和袁谭翻脸了,公元205年在南皮县(今河北南皮县)地方把他攻杀。袁熙的部下焦触和张南发动叛变,袁熙、袁尚逃入乌丸。
乌丸亦作乌桓,是东胡部落的一支,在现今内蒙古、辽宁境内。公元207年,曹操远征乌桓,在柳城大败乌桓,斩杀蹋顿单于,袁熙、袁尚再次逃到辽东,辽东太守是公孙康。有人劝曹操进兵辽东,曹操就预料袁熙、袁尚不服公孙康,要起内讧,便径从柳城回兵。果然不久之后,公孙康便把袁熙、袁尚的头送来了。到此,袁氏才算全灭。