當初,漢武帝開辟河西四郡,阻斷了羌人與匈奴聯係的通道,並驅逐羌人各部,不讓他們居住在湟中地區。漢宣帝即位後,派光祿大夫義渠安國視察羌人各部。先零羌首領向義渠安國請求將牧區遷往湟中地區,義渠安國未經朝廷許可便自作主張,答應了他們的請求。先零羌強入湟中地區後,與其他羌人部落解除仇恨,締結聯盟。為了加強控製,漢朝廷決定分化他們的聯盟,再次派遣義渠安國前往巡視並區分善惡。義渠安國到達羌中,召集先零部落首領三十餘人,以桀驁狡猾之名將其全部誅殺,又縱兵襲擊先零部落,激起羌人反叛。
漢宣帝就羌人反叛一事與年逾七十的老將趙充國商量,詢問擔任平叛將領的合適人選。趙充國認為最合適的人選非己莫屬,漢宣帝嘉許其言,任命趙充國為將。漢宣帝詢問趙充國應當派遣多少人馬,趙充國回答說:“百聞不如一見。戰爭難以遙測,應當率先實地考察。臣先馳往金城,考察之後再將作戰方略上告朝廷。”漢宣帝聽後大喜,知道已經得到合適人選,便調軍隨趙充國前往金城。
趙充國為人沉著勇敢,且深有謀略。天漢二年(公元前99年),趙充國隨貳師將軍李廣利奉武帝之命出征匈奴,得勝返回途中遭到匈奴重兵包圍,漢軍絕糧數日。趙充國帶領壯士百餘人突圍,李廣利率大軍緊緊跟隨,終於突圍而出。此戰中,趙充國身受創傷二十多處。李廣利上奏朝廷,漢武帝親自接見趙充國,並查看其身上創口,讚歎不已,拜為中郎。漢昭帝時,遷中郎將、水衡都尉。之後和匈奴作戰,生擒西祁王歸來,升為護羌校尉、後將軍。公元前74年,因隨大將軍霍光擁立漢宣帝,被封為營平侯。
趙充國到達金城,集結一萬騎兵強渡黃河。因為擔心遭到羌兵阻擊,先派人趁夜色偷渡,在對岸設立營帳。羌人見到漢軍營帳,不敢阻擊,所有漢軍得以安全渡過黃河。趙充國用兵老成穩重,非常重視向遠處派出偵察兵,行軍時必定做好戰鬥戒備,休息時則必堅固營壘,戰鬥前必定會製訂好作戰計劃。他愛護士卒,到達西部都尉府後,每天犒勞將士,所以將士們都願意為他效力。
得知趙充國為將,羌人大為驚恐,各個部落的首領互相責備說:“我早就告訴你不要謀反,現在漢朝天子派趙將軍率軍前來,趙將軍已經八九十歲,善於用兵。現在我們想一戰而死,免得這樣惶恐度日,可以嗎?”於是羌人向漢軍發起挑戰,但是趙充國堅守不出。
這時候,漢宣帝已征集軍隊六萬人。酒泉太守辛武賢上奏建議率先出擊羌人,用武力予以震懾。漢宣帝將辛武賢的奏章交給趙充國,並詢問他的看法。趙充國認為辛武賢的計策不妥當,此次羌人反叛,以先零部落為首,其他部落隻是脅從。所以對待羌族各部,應當根據主謀與脅從的不同情況區別對待,嚴懲主謀者,寬恕脅從者,然後選擇熟悉羌俗的良吏撫慰羌民,這才是上策。漢宣帝將趙充國的看法告訴群臣,讓他們議論此事。朝臣們與趙充國的意見完全相反,他們一致認為先零部落兵馬強盛,又有其他羌族部落作為羽翼,如果不率先剪除這些附庸部落,就無法打擊先零。