袁绍看到刘备兵败后,才感到曹操是个强大的敌人,决心进攻许都。
200年,袁绍调集了十万精兵,派沮授为监军,从邺城(冀州的治所,在今河北临漳西南)出发,进兵黎阳(今河南浚县)。他先派大将颜良渡过黄河,进攻白马(今河南滑县)。
曹操采纳苟攸的意见,把一部分人马带到延津(今河南延津西北)一带假装渡河,吸引袁军主力。然后派出一支轻骑兵突袭白马。袁绍听说曹操要在延津渡河,果然派大军来堵截。哪儿知道曹操已经亲自带领一支轻骑兵袭击白马去了。包围白马的袁军大将颜良被打个措手不及。颜良死在乱军之中,他的部下全都溃散了,白马之围也解除了。
袁绍得知曹操救了白马,气得哇哇大叫。下令全军渡河追击曹军,并且派大将文丑率领五六千骑兵打先锋。
文丑的骑兵赶到南坡,看见曹兵的武器、盔甲丢得满地都是,认为曹军已经逃远了,叫兵士收拾那丢在地上的武器。早已埋伏好的六百名曹兵一齐冲杀出来。袁军一下被杀得七零八落。文丑也糊里糊涂地丢了脑袋。
一连打了两场败仗,损失了手下的颜良、文丑两员大将的袁绍哪肯就此罢休,他带领10万大军,猛追曹操。一直追到官渡,才扎下营寨。曹操的人马也在官渡布置好阵势。
双方在官渡相持了一个多月,曹军粮食越来越少,兵士也疲惫不堪,眼看就要坚持不下去了。袁绍的谋士许攸根据曹操缺粮的情况,向袁绍献计,劝袁绍派出一小支人马,绕过官渡,偷袭许都。袁绍很冷淡地拒绝了他的建议。
许攸在袁绍手下郁郁不得志,想起曹操是他的老朋友,就连夜投奔了曹操。
曹操在大营里刚脱下靴子,正想入睡,听说许攸来投奔他,高兴得顾不上穿靴子,光着脚板跑出来迎接许攸。他一见许攸的面便说:“您来了,真是太好了!我的大事有希望了。”
许攸说:“我知道您的情况很危急,特地来给您透露个消息。现在袁绍有一万多车粮食、军械,全都在乌巢放着。那里的守将是淳于琼,他的防备很松。您只要带一支轻骑兵去袭击,把他的粮草全部烧光,三天之内,袁兵就会不战自败。”
曹操得到这个重要情报后,立刻布置好官渡大营防守,自己带领五千骑兵,连夜向乌巢进发。他们打着袁军的旗号,对沿路遇到袁军的岗哨说,他们是袁绍派去增援乌巢的。
曹军顺利地到了乌巢,放起一把火,把一万车粮食,烧了个一干二净。乌巢的守将淳于琼匆忙应战,也被曹军杀了。
正在官渡的袁军将士听说乌巢的粮草被烧光,都惊慌失措。袁绍手下的两员大将张邰、高览也带兵投降了曹操。曹军乘势猛攻,袁军顿时一败涂地。袁绍和他的儿子袁谭如丧家之犬,向北逃走,身边只剩下八百多骑兵。
经过这场大战,袁绍的主力损失殆尽。袁绍也在两年后病死了。尔后,曹操又花了七年的时间,消灭了袁绍的残余势力,统一了北方。