運輸層——TCP協(xié)議

TCP報文段的首部格式

TCP雖然是面向字節(jié)流的,但TCP傳送的數(shù)據(jù)單元卻是報文段

TCP報文段首部前20個字節(jié)是固定的,后面有4n(n為整數(shù))個字節(jié)可以根據(jù)需要而增加喉钢,整個報頭最多為60字節(jié)

首部字段:


TCP首部

端口號
端口號字段包括源端口號與目的端口號疼燥;

每個端口號字段長度為16 位(2字節(jié))虏缸,分別表示發(fā)送該報文段的應(yīng)用進程的源端口號與接收進程的目的端口號。

序號
序號字段長度為32位(4個字節(jié))嫩实,序號范圍在0~(232-1)刽辙,即0~4284967295;序號增加到232-1后甲献,下一個序號又回到0宰缤;

為發(fā)送字節(jié)流中的每個字節(jié)都按順序編號,起始序號必須在連接建立時設(shè)置;序號字段值是本報文段所發(fā)送的數(shù)據(jù)的第一個字節(jié)的序號

例如晃洒,一個報文段的序號字段為301慨灭,攜帶數(shù)據(jù)為100字節(jié),第二個報文段的序號就要是401

確認號
確認號字段長度為32 位(4字節(jié))球及;確認號表示一個進程已經(jīng)正確接收序號為N-1之前的字節(jié)(包含N-1)氧骤,要求發(fā)送方下一個應(yīng)該發(fā)送序號為N的字節(jié)的報文段。

例如吃引,A發(fā)送一個序號為301筹陵,長度為100個字節(jié)的數(shù)據(jù)給B,B此時需要回復(fù)一個為401的確認號镊尺,以此來確認已經(jīng)收到前400個字節(jié)的數(shù)據(jù)

報頭長度
報頭長度也稱數(shù)據(jù)偏移惶翻,都是說頭部長度,只是角度不同鹅心。報頭長度字段的長度為4位;TCP報頭長度是以4字節(jié)為一個單元來計算的吕粗,實際報頭長度是在20~60字節(jié),因此這個字段的值是在5至15之間旭愧。

保留
占6位颅筋,保留今后使用,目前全部置為0

控制字段
控制字段定義了6種不同的控制位或標志位;
控制字段將在TCP的連接建立和終止输枯、流量控制议泵,以及數(shù)據(jù)傳送中發(fā)揮作用。

標志 說明
SYN 在連接時對序號進行同步
ACK 確認字段的值有效桃熄。當ACK=1時先口,確認號才有效
FIN 終止連接
RST 連接必須復(fù)位。TCP連接出現(xiàn)嚴重差錯要重新建立連接瞳收。還可用來拒絕一個非法報文段或拒絕打開一個鏈接碉京。
URG 緊急指針字段的值有效。有緊急數(shù)據(jù)盡快傳送螟深,插入到報文段最前面谐宙,與緊急指針配合使用。
PSH 將數(shù)據(jù)推向前界弧,希望立即收到對方響應(yīng)凡蜻。接收方收到后盡快交付給接收應(yīng)用進程

窗口大小
窗口字段長度為16位;窗口的長度值是在0~65535之間搭综;

窗口字段值指示對方最多可以發(fā)送的字節(jié)數(shù),作為發(fā)送方確定發(fā)送窗口的依據(jù)划栓。明確指出了從被確認的字節(jié)算起可以發(fā)送的數(shù)據(jù)量兑巾。窗口字段值是動態(tài)變化的。窗口值為0也是合法的忠荞。表示接收方暫時不能接收數(shù)據(jù)蒋歌,發(fā)送方要停止發(fā)送。

校驗和
計算校驗和與UDP校驗和的方法相同钻洒;
TCP校驗和同樣需要偽報頭奋姿,唯一不同的是協(xié)議字段的值是6锄开。

緊急指針
緊急指針字段的長度為16位素标,只有當緊急標志URG=1時,這個字段才有效萍悴,這時的報文段中包括緊急數(shù)據(jù)头遭;指出了緊急數(shù)據(jù)的末尾在報文段中的位置。

TCP軟件要在優(yōu)先處理完緊急數(shù)據(jù)之后才能夠恢復(fù)正常操作癣诱。
注意计维,即使窗口為零時也可以發(fā)送緊急數(shù)據(jù)。

TCP最早只規(guī)定了一種選項撕予,即最大報文段長度MSS(Maximum Segment Size)

TCP報文段的最大長度與窗口長度的概念不同:

  • 設(shè)置窗口大小是通知發(fā)送方下一次可以連續(xù)傳輸?shù)淖止?jié)數(shù)鲫惶;
  • 最大段長度MSS是在構(gòu)成一個TCP 報文段時最多可以在報文的數(shù)據(jù)- - 字段中放置的數(shù)據(jù)字節(jié)數(shù)量;
  • MSS值的確定與每次傳輸?shù)拇翱诖笮o關(guān)实抡;
  • MSS是TCP報文中數(shù)據(jù)部分的最大長度欠母,不包括報頭長度。

TCP的運輸連接

建立連接-->三次握手

三次握手
  • B的TCP服務(wù)器先創(chuàng)建傳輸控制塊TCB吆寨,準備接受客戶進程的連接請求赏淌,然后服務(wù)進程就處于listen狀態(tài)。

  • 第一次握手:首先創(chuàng)建傳輸控制模塊TCB啄清,向B發(fā)出連接請求報文段六水,這是首部中的同步位SYN=1,同時選擇1個隨機初始序號x辣卒,此時不能攜帶數(shù)據(jù)掷贾,但需要消耗一個序號。

  • 第二次握手:B收到請求后荣茫,如果同意連接的情況下胯盯,向A發(fā)送確認。此時SYN=1计露,ACK=1博脑,確認號ack=x+1憎乙,同時自己選擇一個初始序列號seq=y。此時這個報文也不能攜帶數(shù)據(jù)叉趣,但需要消耗一個序號泞边。

  • 第三次握手:A收到B的確認后,需要向B確認疗杉,確認報文段ACK=1阵谚,ack=y+1,seq=x+1烟具,這時連接已建立梢什。此時,若這個報文不攜帶數(shù)據(jù)則不消耗序列號朝聋,下一個報文的序列號還是seq=x+1嗡午。

問題:為什么A最后要在發(fā)送一次確認?

答:主要是防止已失效的連接請求報文突然又傳送到了B冀痕,從而產(chǎn)生錯誤荔睹。

由于有了A再發(fā)一次確認,當一個失效的請求到B后言蛇,B發(fā)來一個確認僻他,而A此時并沒有請求,所以不會理睬此B的確認腊尚,也不會再發(fā)一次確認吨拗。從而沒有建立連接。

斷開連接-->四次揮手

  • 第一次揮手:主機A發(fā)送位碼為FIN=1婿斥,用來關(guān)閉客戶A到服務(wù)器B的數(shù)據(jù)傳送劝篷。此時A的狀態(tài)為FIN_WAIT_1
  • 服務(wù)器B收到這個FIN,它發(fā)回一個ACK受扳,確認序號為收到的序號加1携龟。此時A為FIN_WAIT_2,B為CLOSE_WAIT
  • 服務(wù)器B關(guān)閉與客戶端A的連接勘高,發(fā)送一個FIN給客戶端A峡蟋。此時A為TIME_WAIT,B為LAST_ACK
  • 客戶端A發(fā)回ACK報文確認华望,并將確認序號設(shè)置為收到序號加1蕊蝗。此時A、B都關(guān)閉了赖舟,狀態(tài)變?yōu)镃LOSED蓬戚。

當(2)、(3)步中的ACK和FIN在一個包中發(fā)送時宾抓,A的狀態(tài)會直接從FIN_WAIT_1變?yōu)門IME_WAIT

問題:為什么建立連接需要三次握手子漩,而斷開連接需要四次握手豫喧?

因為每個方向都需要一個FIN和ACK,當一端發(fā)送了FIN包之后幢泼,處于半關(guān)閉狀態(tài)紧显,此時仍然可以接收數(shù)據(jù)包。

在建立連接時缕棵,服務(wù)器可以把SYN和ACK放在一個包中發(fā)送孵班。

但是在斷開連接時,如果一端收到FIN包招驴,但此時仍有數(shù)據(jù)未發(fā)送完篙程,此時就需要先向?qū)Χ嘶貜?fù)FIN包的ACK。等到將剩下的數(shù)據(jù)都發(fā)送完之后别厘,再向?qū)Χ税l(fā)送FIN虱饿,斷開這個方向的連接。

因此很多時候FIN和ACK需要在兩個數(shù)據(jù)包中發(fā)送丹允,因此需要四次握手

DOS攻擊和SYN洪水攻擊

DOS攻擊利用合理的服務(wù)請求占用過多的服務(wù)資源郭厌,使正常用戶的請求無法得到相應(yīng)袋倔。

常見的DOS攻擊有計算機網(wǎng)絡(luò)帶寬攻擊和連通性攻擊雕蔽。

帶寬攻擊指以極大的通信量沖擊網(wǎng)絡(luò),使得所有可用網(wǎng)絡(luò)資源都被消耗殆盡宾娜,最后導(dǎo)致合法的用戶請求無法通過批狐。

連通性攻擊指用大量的連接請求沖擊計算機,使得所有可用的操作系統(tǒng)資源都被消耗殆盡前塔,最終計算機無法再處理合法用戶的請求嚣艇。

SYN洪水攻擊
SYN洪水攻擊屬于DOS攻擊的一種,它利用TCP協(xié)議缺陷华弓,通過發(fā)送大量的半連接請求食零,耗費CPU和內(nèi)存資源。

客戶端在短時間內(nèi)偽造大量不存在的IP地址寂屏,向服務(wù)器不斷地發(fā)送SYN報文贰谣,服務(wù)器回復(fù)ACK確認報文,并等待客戶的確認迁霎,由于源地址是不存在的吱抚,服務(wù)器需要不斷的重發(fā)直至超時,這些偽造的SYN報文被丟棄考廉,目標系統(tǒng)運行緩慢秘豹,嚴重者引起網(wǎng)絡(luò)堵塞甚至系統(tǒng)癱瘓。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末昌粤,一起剝皮案震驚了整個濱河市既绕,隨后出現(xiàn)的幾起案子啄刹,更是在濱河造成了極大的恐慌,老刑警劉巖凄贩,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸵膏,死亡現(xiàn)場離奇詭異,居然都是意外死亡怎炊,警方通過查閱死者的電腦和手機谭企,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來评肆,“玉大人债查,你說我怎么就攤上這事」贤欤” “怎么了盹廷?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長久橙。 經(jīng)常有香客問我俄占,道長,這世上最難降的妖魔是什么淆衷? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任缸榄,我火速辦了婚禮,結(jié)果婚禮上祝拯,老公的妹妹穿的比我還像新娘甚带。我一直安慰自己,他們只是感情好佳头,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布鹰贵。 她就那樣靜靜地躺著,像睡著了一般康嘉。 火紅的嫁衣襯著肌膚如雪碉输。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天亭珍,我揣著相機與錄音敷钾,去河邊找鬼。 笑死块蚌,一個胖子當著我的面吹牛闰非,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播峭范,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼财松,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起辆毡,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤菜秦,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后舶掖,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體球昨,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年眨攘,在試婚紗的時候發(fā)現(xiàn)自己被綠了主慰。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片连锯。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡住拭,死狀恐怖痢甘,靈堂內(nèi)的尸體忽然破棺而出盆繁,到底是詐尸還是另有隱情,我是刑警寧澤调卑,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布莉兰,位于F島的核電站聊训,受9級特大地震影響秦效,放射性物質(zhì)發(fā)生泄漏雏蛮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一阱州、第九天 我趴在偏房一處隱蔽的房頂上張望挑秉。 院中可真熱鬧,春花似錦贡耽、人聲如沸衷模。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至刁憋,卻和暖如春滥嘴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背至耻。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工若皱, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人尘颓。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓走触,卻偏偏與公主長得像,于是被迫代替她去往敵國和親疤苹。 傳聞我的和親對象是個殘疾皇子互广,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容