【通信協(xié)議】筆記之Redis協(xié)議抓取分析

從此篇文章開始,將進入通信協(xié)議相關(guān)學習看蚜,大概囊括幾個知識點:TCP協(xié)議UDP協(xié)議赔桌、Redis協(xié)議相關(guān)失乾,順帶介紹Wireshark分析工具Tcpdump命令等使用工具纬乍。本篇文章主要介紹Redis協(xié)議相關(guān)知識點碱茁。

RESP(Redis序列化協(xié)議)

概念

Redis底層使用的通信協(xié)議是RESP(Redis Serialization Protocol的縮寫),RESP協(xié)議可以序列化多種類型仿贬,比如Simple Strings(簡單字符串)纽竣,Errors(錯誤類型),Integers(整形)茧泪,Bulk Strings(批量串)和Arrays(數(shù)組)蜓氨,但此協(xié)議只適用于Redis客戶端-服務端之間的通信,Redis集群中節(jié)點間通信使用的另一種協(xié)議队伟。
一般情況下RESP是一種簡單的請求-響應式協(xié)議穴吹,就是發(fā)一條請求,Redis服務器返回一條響應嗜侮,此外港令,RESP
還有另外兩種形式的協(xié)議:

  • 利用管道發(fā)送的批量命令,Redis服務器會一起響應
  • 客戶端使用Pub/Sub功能锈颗,發(fā)布/訂閱頻道顷霹,協(xié)議就是一種推送協(xié)議,Redis服務器主動推送數(shù)據(jù)給客戶端
數(shù)據(jù)類型前綴

在數(shù)據(jù)包中击吱,每種數(shù)據(jù)數(shù)據(jù)類型都有固定的前綴淋淀,每一部分都以\r\n結(jié)尾

  • +代表簡單字符串(Simple Strings)比如OKPONG(對應客戶端的PING命令)

  • -代表錯誤類型(Errors)

  • :代表整型(Integers)

  • $代表多行字符串(Bulk Strings)

  • *代表數(shù)組(Arrays)

接下來通過實操深入了解下

抓包

抓包使用tcpdump命令覆醇,具體參數(shù)這里就不多說了朵纷,使用的命令是:

tcpdump host <redis ip> and port <redis 端口> -i <網(wǎng)卡>-w <保存結(jié)果的文件名>

比如:

tcpdump host 127.0.0.1 and port 6379 -i eth0 -w redis.cap

抓取的結(jié)果保存在redis.cap

分析

分析工具使用Wireshark炭臭,這個工具非常強大,具體的使用后邊再細說袍辞,在分析之前徽缚,先說下客戶端與服務端交互的命令:

  • info,返回redis服務端的相關(guān)信息
  • set xfh 111革屠,服務端響應OK
  • get xfh,返回111
  • lpush xfhlist 1 2 3排宰,返回 3
  • ee似芝,這是個錯誤命令,主要看下服務端返回的錯誤數(shù)據(jù)格式
    接下來我們結(jié)合數(shù)據(jù)包分析下:

1板甘、首先發(fā)送的命令是info党瓮,先看右邊部分,可以看到一開始是*1:表示長度為1的數(shù)組盐类,后邊的··對應左邊是0d 0a寞奸,其實就是\r\n的16進制表示形式,然后后邊$4:代表長度為4的Bulk Strings在跳,也就是info枪萄,后邊緊跟著info

發(fā)送info命令

info命令返回數(shù)據(jù)包:$2748:長度為2748的Bulk Strings猫妙,后邊便是服務器相關(guān)信息

服務器info返回

2瓷翻、set xfh 111命令:*3:長度為3的數(shù)組,后邊是數(shù)組里的3個元素:$3··set(長度為3的Bulk Strings)割坠、$3··xfh齐帚、$3··111

set命令

返回數(shù)據(jù):+OK(代表簡單字符串‘OK’),這里邊可能有人會問:簡單字符串(Simple Strings)和多行字符串(Bulk Strings)有什么區(qū)別彼哼?对妄?我的個人理解是:簡單字符串一般是服務器狀態(tài)相關(guān),比如'OK'敢朱、‘PONG’等剪菱;而Bulk Strings可以包含任何內(nèi)容(比如換行符、控制符)
set返回

3拴签、命令lpush xfhlist 1 2 3:看到這相信大家都已經(jīng)明白了琅豆,*5代表長度為5的數(shù)組,后邊緊跟著5個Bulk Strings lpush篓吁、xfhlist茫因、12杖剪、3冻押,而且每個元素的前邊都有長度驰贷,分別是$5$7洛巢、$1括袒、$1$1稿茉。

lpush

返回::3(表示整形數(shù)據(jù)3)

4锹锰、命令ee,這是個錯誤命令漓库,redis中沒有這個命令恃慧,應該返回語法錯誤

命令ee

返回:發(fā)現(xiàn)前綴是-,對應RESP協(xié)議中的錯誤類型渺蒿,后邊緊跟著ERR unknown command 'ee'

語法錯誤返回

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末痢士,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子茂装,更是在濱河造成了極大的恐慌怠蹂,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件少态,死亡現(xiàn)場離奇詭異城侧,居然都是意外死亡,警方通過查閱死者的電腦和手機彼妻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門赞庶,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人澳骤,你說我怎么就攤上這事歧强。” “怎么了为肮?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵摊册,是天一觀的道長。 經(jīng)常有香客問我颊艳,道長茅特,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任棋枕,我火速辦了婚禮白修,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘重斑。我一直安慰自己兵睛,他們只是感情好,可當我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著祖很,像睡著了一般笛丙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上假颇,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天胚鸯,我揣著相機與錄音,去河邊找鬼笨鸡。 笑死姜钳,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的形耗。 我是一名探鬼主播哥桥,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼趟脂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起例衍,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤昔期,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后佛玄,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體硼一,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年梦抢,在試婚紗的時候發(fā)現(xiàn)自己被綠了般贼。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡奥吩,死狀恐怖哼蛆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情霞赫,我是刑警寧澤腮介,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站端衰,受9級特大地震影響叠洗,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜旅东,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一灭抑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧抵代,春花似錦腾节、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽榄融。三九已至,卻和暖如春救湖,著一層夾襖步出監(jiān)牢的瞬間愧杯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工鞋既, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留力九,地道東北人。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓邑闺,卻偏偏與公主長得像跌前,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子陡舅,可洞房花燭夜當晚...
    茶點故事閱讀 45,440評論 2 359