公元前216年春,汉尼拔主动出击,夺取了阿普利亚平原上的大型补给基地坎尼(Cannae)。
通过占领坎尼,汉尼拔将自己置于罗马人与其重要补给来源之间。
当罗马元老院在公元前216年恢复执政官选举时,他们任命盖乌斯·特伦提乌斯·瓦罗(Gaius Terentius Varro)和卢修斯·艾米利乌斯·保卢斯(Lucius Aemilius Paullus)为执政官。
与此同时,罗马人希望通过单纯的力量和人数获得胜利,组建了一支前所未有的大军,有人估计人数达到10万,但更可能在5万到8万之间。
罗马人及其盟军决心与汉尼拔对抗,向南 marched 至阿普利亚。
他们最终在奥菲杜斯河(Aufidus River)左岸找到了汉尼拔,并在距离其10公里(6英里)处扎营。
在这次战斗中,两支军队合并成一支,执政官必须每天轮流指挥。
根据利维(Livy)的记载,瓦罗是一位鲁莽而傲慢的人,而在战斗当天轮到他指挥。
这一记载可能对瓦罗有偏见,因为其主要来源波利比乌斯(Polybius)是保卢斯的贵族家庭的支持者,而瓦罗则不太显赫。
一些历史学家认为,军队的庞大规模要求两位将军分别指挥一翼。
这一理论得到了支持,因为在战斗后瓦罗幸存并被元老院赦免,这在他作为唯一负责的指挥官的情况下是很奇怪的。
汉尼拔利用罗马人急于作战的心理,引诱他们陷入陷阱,采用包围战术。
这一战术通过缩小作战区域消除了罗马人的人数优势。
汉尼拔将他最不可靠的步兵布置在中央,呈半圆形向罗马军队弯曲。
将他们置于两翼前方使他们有退路,诱使罗马军队跟随,而两翼的骑兵则与罗马骑兵交战。
汉尼拔的两翼由高卢(Gallic)和努米底亚(Numidian)骑兵组成。
罗马军团强行穿过汉尼拔的弱中心,但两翼的利比亚雇佣兵在这一动作中围住了罗马的侧翼。
汉尼拔的骑兵攻击势不可挡。汉尼拔的首席骑兵指挥官马哈巴尔(Maharbal)指挥右侧的机动努米底亚骑兵,打垮了与之对抗的罗马骑兵。