由于紫荆关还属于涿郡地界,曹彰并没有想到在这里就能遇到代郡乌桓的骑兵。当然,这也是思维上的局限了。虽然作乱的是代郡乌桓,但谁也没规定,熟悉地形的他们不会把阻击线推进到代郡之外。见遭遇突袭,曹军这边顿时乱作一团。按说儿子出征,曹操配给他的肯定都是久经战阵的精兵,不至如此不镇定的。问题是曹彰没想到会这么早接战,配给他的兵马大都还在前来集结的路上,当时身边只有一千步兵和数百骑兵,而设伏的则是数千乌桓骑兵。

关键时刻是田豫做出了战术安排,依托地形以车辆围成圆阵,再让步兵满弓待命。乌桓骑兵冲过来,就用箭阵射阻。冲到阵前或者撤退的话,曹彰再领骑兵冲出阵去短兵相接。如此几次攻击,损兵折将不能破阵的乌桓,军心就散了,半日之后便向北溃逃而去。战术是田豫设计的,仗却是曹彰身先士卒打的。在战斗过程中,曹彰还身受几箭,好在有铠甲挡着,人没有受伤(要在影视剧里,再漂亮的甲一箭也穿了)。从防御角度,这是当年李陵以五千步兵,就敢深入漠北的战法。最先用此阵法的则是曹彰的偶像卫青,被称之为"武刚车阵"。李陵当日只有步兵,因此只能被动防御。卫青那时还配有五千骑兵,除了用车阵防御,还能主动追击。
这次曹彰身边还有数百骑兵,而且身后还要渐次集结而来的后续部队,自然是要效法偶像的。见乌桓西逃,曹彰决定乘胜追击扩大战果。在曹彰的追击下,乌桓人一泄千里。所谓兵败如山倒,乌桓人一路北逃至代县后,并没有止住脚步而是继续向北逃窜。代郡郡治"代县"所处的蔚县盆地,纵横其间的是桑干河右岸支流壶流河。过了代县顺着壶流河跑,就进入了桑干河谷。而雁门郡所覆盖的"大同盆地",核心河流就是桑干河,这条河流在流出雁门,穿过代郡之后,继续向东横穿上谷,然后进入河北平原,化名为与北京相依的永定河。
代郡乌恒的直接控制区,实际就是在蔚县盆地之北的桑干河谷部分。这条河流之所以得名,是因为两汉在壶流河汇入桑干河的河口处,建制有"桑干县"。在桑干河成为通用名之前,这条河流被叫作"治水"。原本桑干河谷基本都是在乌桓部落的控制下,在乌桓势力衰退后,代郡东西两侧的桑干河谷,都成了鲜卑人的天下。当时的鲜卑分为数十个部落及部落联盟,在塞内的主要力量就是在桑干河谷,一是在雁门郡的北部以平城(大同市)为中心的区域驻牧的步度根、扶罗韩两兄弟;二是上谷境的轲比能部。










