公元三一七年,得知晋愍帝被俘虏消息的祖逖,决心北伐。三一七年,祖逖毅然从京口渡江北上进驻芦洲。祖逖派殷乂去联络张平、樊雅二人,意图拉拢张樊二人。哪知殷乂轻蔑张平,气不过的张平怒杀殷乂,并拥兵固守,与北伐军对抗。祖逖用计平定豫州张平,后乘势剿灭了谯郡樊雅,攻克谯城。祖逖以谯城为根据地,且战且耕,同时又得到了晋朝的南中郎将王含的资助,附近的一些坞主多来依附,从而收复了河南的大片失地,声势大增,终于在豫州站住脚跟,打通了北伐的通道。
六月,石勒派遣石虎围困谯城,桓宣率军救援,得知消息的石虎退兵而去。石虎退走后,恒宣主动留在谯城,协助祖逖征讨不肯归附的坞堡武装。
公元三一八年,晋愍帝死于汉国的讣告传到江东,司马睿在建邺进皇帝位。同年蓬陂坞主陈川叛晋,派遣部下劫掠豫州诸郡。祖逖则针锋相对,命卫策在谷水伏击,尽获其所掠之车马子女,祖逖下令,将车马子女全部归回原主,军队一点也不截留。陈川大为惊恐,公元三一九年四月,陈川以浚仪为献礼投降石勒。
同年八月,汉赵君主刘聪患病驾崩,其子刘粲继位。不久,汉赵外戚权臣靳准发动政变,杀死刘粲,并将居于平阳的匈奴刘氏宗室无论少长皆斩于东市,自号大将军、汉天王,遣使向东晋称藩。靳准想把西晋灭亡时被前赵抢夺的传国玉玺,交由降汉晋人胡嵩送往江东晋廷,并对晋元帝称:“屠各小丑安敢称王,乱大晋使二帝播越。今送二帝梓宫于江东。”胡嵩一头雾水,不知道他的目地是什么,便不敢送玺,被靳准一剑杀了。晋元帝更是不解,天下哪有这么好的事情?但是还是派太常韩胤去试一试,果然把怀帝和愍帝的棺材接了回来。
次年四月,祖逖率军在蓬关征讨献城投降石勒的陈川。石勒知道陈川不是祖逖的对手,于是派遣石虎率领五万大军救援陈川。两军在浚仪交战,祖逖兵败退守淮南。石虎在豫州进行了一番洗劫之后,也带着陈川回师襄国,只留下将领桃豹戍守蓬陂坞。
公元三二零年,石虎派桃豹据浚仪,屯兵西台,从南门出入,祖逖则派韩潜据东台,由东门出入,两军相持四十日。当时,双方粮草供应都很紧张,祖逖命令把沙土装在粮袋里,假装成米,让一千多人像运送军粮一样,忙忙碌碌运上东台。又故意让几个人真的挑着大米,走在后面,佯装疲惫在路上休息,等敌军来抢米。桃豹的军队缺粮已久,见晋军运粮,以为有机可乘,突然冲过来抢粮,那几个人扔下粮袋仓皇逃跑。桃豹军士抢得粮米后,以为祖逖士兵都能吃饱,而自己长久饥饿,于是更加恐惧,士气低落。这时,石勒部将刘夜堂用一千头驴运粮食给桃豹,祖逖侦知消息,派部将韩潜、冯铁等部在汴水截击,尽获其粮食和脚力。桃豹闻讯,连夜退兵东燕城。祖逖乘胜进军,派韩潜进屯封丘,威逼桃豹,冯铁部进据二台,自己统兵镇守雍丘。击退桃豹后。祖逖又屡次派兵截击后赵军,后赵很多城镇纷纷叛赵归晋,使石勒在河南的力量迅速萎缩。
经此一战,祖逖成功收复黄河以南中原地区的大部分土地,晋元帝下诏擢升他为镇西将军。石勒见祖逖势力强盛,不敢南侵,于是致书祖逖,愿握手言和。祖逖见石勒主动示好,便同意与石勒修好,禁止边将进侵后赵,边境暂得和平。
公元三二零年,司马睿与王家的关系日益紧张。同年梁州刺史周访病逝,湘州刺史甘卓调镇梁州,王敦趁机请求以亲信陈颁接任湘州刺史。湘州所处位置十分重要,进可牵制荆州,退可扼守江南,因此司马睿不愿让湘州被王敦所控制,于是派司马承为湘州刺史。算盘落空的王敦意图进兵建康,却觊觎祖逖的威压,遂打消了这个念头。
公元三二一年晋元帝任命戴渊为征西将军、都督司兖豫并雍冀六州诸军事、司州刺史,出镇合肥,同时将所征发的兵卒全部分配给戴渊、刘隗,以防备王敦。而辛苦收复河南的祖逖,却仍不得朝廷信任,心中甚为不快。而此时王敦和司马睿的关系愈发紧张。祖逖知道王敦素来跋扈,司马睿用刘隗、刁协、戴渊等人来压制王家,迟早会导致朝廷内乱,那自己辛苦经营的北伐之路怕是要止步于此。忧心忡忡的祖逖忧愤成疾,与三二一年九月病逝。
石勒得知祖逖病逝,于是再度南侵。祖约抵挡不住,节节败退至寿春。于是石勒留兵驻屯豫州,豫州再进入后赵的势力范围。攻下豫州后,石勒进军侵扰徐、兖二州,晋军节节败退,至此豫州、徐州、兖州被石勒所控制,而祖逖的北伐最终以失败告终。
石勒举兵南侵之际,东晋朝廷又陷入了王敦之乱,无暇顾及河南之境。此时东晋内乱,于石勒而言,南方的东晋暂时构不成威胁。处于保险,石勒还是派使前往东晋,提议以黄河为界,握手休战。东晋朝臣也害怕石勒趁着内乱出兵南下,便欣然同意。没有了后顾只有的石勒出兵攻伐刘耀的前赵,于公元三二九年俘虏前赵君主刘耀,至此石勒几乎占领了整个北方。