正在这时,袁绍从后方又调集了很多粮草存放在乌巢(今河南延津东南),由将领淳于琼看守。而此时曹军的粮食只能支撑一个月时间,情况十分危机。正在这时,袁绍手下的谋士许攸因为得不到器重,前来投靠曹操,并给曹操献上了火烧乌巢的计谋。曹操大喜,把许攸奉为上宾,仔细和他商讨突袭乌巢的计划,随后便亲自带着精锐的骑兵,举着袁绍的军旗,悄悄来到袁军存放粮食的地方。曹军在乌巢四处纵火,粮仓瞬间被大火侵吞,袁军士兵被火光和叫喊声吓得六神无主,竟然忘记了抵抗,被曹军杀了好几万人,淳于琼也被杀死。
起初袁绍没有把曹操放在眼里,如今曹操势力与日俱增,袁绍不得不开始注意曹操的动静。袁绍想要称帝,曹操成了第一个对他设置障碍的人,这么一来,袁绍觉得很有必要把曹操消灭掉。公元200年,袁绍命将领颜良带着十万大军,一万多匹战马,准备南下进攻许都。
正在曹操紧张地部署防备时,刘备首先对曹操发起进攻。当时刘备从曹操手下逃跑,并且占领徐州,令曹操大为光火,如今刘备经过一段时间的休整和发展,手下已经有了一万多人,还占领了下邳和沛县。他听到袁绍准备讨伐曹操的消息,便和袁绍联合起来,由他先一步发起进攻,让曹操措手不及。然而刘备才刚刚出兵,曹操就亲自率领军队朝沛县攻了过来,没多久就占领了沛县,还抓住了关羽,刘备则跑到袁绍那儿躲了起来。
曹操首先对盘踞在寿春(今安徽寿州)的袁术发动进攻,没用多少时间就把袁术的军队打得落花流水,逼得袁术弃城逃跑,投奔了袁绍。接着曹操暗中命人在河内郡挑起事端,再发兵攻打,最后占领了河内郡。这个时候,曹操的领土差不多包括了黄河以南、淮、汉以北的大部分地区,而袁绍正好位于黄河下游以北的地区,两个人形成了对立局面。
颜良先围攻白马城,曹操率兵迎战。他故意把部队带到延津(今河南延津北,在白马以西),让颜良以为他们要从那儿过河,袁军果然上当,颜良派一队人马来延津攻打曹军,曹操看准时机,突然带军杀回白马,打得颜良措手不及。曹军士气高涨,袁军节节败退,颜良最后被曹操杀死,白马城归曹操所有。
曹操早就想和袁绍大战一场,如今机会来了,自然很兴奋。但是他的部下却忧心忡忡,很多人认为袁绍兵强马壮,胜利的机会非常渺茫,曹操却不以为然。他对袁绍十分了解,认为袁绍完全没有别人说的那么厉害,只是一个妄自菲薄的小人,根本不懂得用兵打仗,还对手下人态度恶劣,可以说,袁绍在军中不得人心。所以曹操不惧怕袁绍,他把自己所有的兵力都集中起来,先让臧霸带着一队士兵从琅琊(今山东临沂北)到达青州,占领齐郡(今山东临淄)、北海(今山东昌乐)和东安(今山东沂水县),防止袁绍部队从许都的东面进行偷袭。然后派另一队人马驻扎在关中,并想办法占领凉州。曹操自己也带着一批人马在冀州黎陽布下防线,另外还在官渡(今河南中牟东北)安排了士兵。
三个月时间过去了,曹军和袁军多次交战,谁也没有取得实质性的胜利。如果一直僵持下去,曹军会因为粮草缺乏而被袁军打败,曹操急得不知该怎么办才好,士兵们精神不济,信心大减,这样下去后果不堪设想。
公元198年,袁绍跑到冀州,打败了占据在那儿的公孙瓒,然后把青州、幽州、并州全部占为己有,经过一段时间的发展,袁绍已经拥有了十万大军。曹操当时只有两万人马,从实力上来看,袁绍算得上是当时割据势力中最强大的。曹操人马虽少,但他时刻想着要把袁绍灭掉,而在这之前,他必须先壮大自己的势力。
火烧乌巢后,曹军一鼓作气朝袁军营地进攻,很多袁军将领听到淳于琼被杀之后,纷纷向曹操缴械投降,加上曹军又斩杀了七万多袁军,袁绍的人马已经少之又少。眼看大势已去,袁绍也顾不得残兵败卒,一个人逃了回去。至此,这场战争以曹操的胜利而告终。
官渡之战是中国历史上以少胜多的著名战役之一,曹操仅凭两万多人,打败了袁绍的十万大军。官渡之战后,袁绍一直沉浸在兵败的低迷情绪中,不久便抑郁而死。曹操趁机把袁绍余部一网打尽,并逐步统一了北方地区。
两万人马对十万大军,获胜的可能确实很微小,因此曹操没有把兵力分散出去,而是集中守住几个重要的地方,这种做法无疑是正确的。尤其是官渡这个地方,水利交通发达,四面都是比较重要的城镇,而且还是许都东北面的重要关口,如果不守住这儿,许都一定会被袁绍攻破。
袁绍听到颜良阵亡的消息,大吃一惊,想到自己损失了一名大将,不由得十分痛心。但他仗着自己兵马充足,还是没有把曹操放在眼里。袁绍命大军兵分两路,从东、西两方向围攻官渡,曹操出兵迎战,但被袁军打败,退了回去。之后曹操又发动了几次进攻,全部以失败告终。袁绍修建了很多高高的木楼,还用沙土堆出一个个小山丘,弓箭手就站在木楼上,或者埋伏在山丘后面,朝曹营放箭,射杀了很多曹军。曹操的一个谋士想了个好办法,他让士兵们制造出一种能够把石头抛出去的霹雳车,大块的石头从半空中砸落在木楼上,不但毁坏木楼,还砸死了不少袁军。袁绍见计谋失败,又想出挖地道的方法,打算从地下偷袭曹营,可是曹操发觉了袁军的计划,那些地道随即就被曹军用土封住了。