TCP連接相關(guān)

目錄:
1.TCP連接時(shí)的三次握手
2.TCP斷開(kāi)時(shí)的四次揮手
3.TCP和UDP的異同
4.TCP并發(fā)

TCP連接時(shí)的三次握手

三次握手的過(guò)程

為什么要有三次握手毛雇,因?yàn)槿绻挥袃纱挝帐旨党疲敲?br> 第一次:客戶(hù)端發(fā)送一個(gè)syn包給服務(wù)器,里面有一個(gè)隨機(jī)生成的syn灵疮,然后客戶(hù)端處于syn_send狀態(tài)
第二次:服務(wù)端收到客戶(hù)端發(fā)來(lái)的syn包之后织阅,確認(rèn)syn包,也就是生成一個(gè)ack=syn+1震捣,然后再自己隨機(jī)生成一個(gè)syn包荔棉,即syn+ack包,然后返回給客戶(hù)端蒿赢,自己變成syn_recv狀態(tài)
第三次:客戶(hù)端收到服務(wù)端發(fā)來(lái)的syn+ack包之后润樱,確認(rèn)ack是正確的之后,返回一個(gè)ack=syn+1給服務(wù)端羡棵,此包發(fā)送完畢壹若,客戶(hù)端進(jìn)入了ESTABLISHED狀態(tài),服務(wù)端收到ack包后也進(jìn)入ESTABLISHED狀態(tài)。

握手中安全問(wèn)題

SYN攻擊店展,當(dāng)?shù)诙挝帐址?wù)端發(fā)送了syn+ack包之后养篓,收到客戶(hù)端發(fā)送的ack之前這段時(shí)間的tcp鏈接成為半連接,此時(shí)服務(wù)端處于syn_recv狀態(tài)赂蕴。當(dāng)大量客戶(hù)端隨機(jī)IP瘋狂發(fā)送tcp鏈接請(qǐng)求時(shí)觉至,客戶(hù)端以為是不同用戶(hù)的請(qǐng)求,所以隊(duì)列中全是半連接睡腿,然后導(dǎo)致服務(wù)器宕機(jī)语御,正常請(qǐng)求被丟棄。

三次握手過(guò)程中出現(xiàn)丟包

第一個(gè)包發(fā)送過(guò)程丟失
A會(huì)周期性超時(shí)重傳席怪,直到收到B的確認(rèn)
第二個(gè)包發(fā)送過(guò)程丟失
B會(huì)周期性超時(shí)重傳应闯,直到收到A的確認(rèn)
第三個(gè)包發(fā)送過(guò)程丟失
A發(fā)送完數(shù)據(jù)后單方面進(jìn)入TCP的ESTABLISHED狀態(tài),B還處于半鏈接:

  1. 如果此時(shí)雙方都沒(méi)有數(shù)據(jù)傳輸挂捻,會(huì)進(jìn)行第二步碉纺,B會(huì)周期性超時(shí)重傳,直到收到A的確認(rèn)刻撒,然后TCP也變成ESTABLISHED骨田,雙方開(kāi)始數(shù)據(jù)傳輸。
  2. 如果A有數(shù)據(jù)需要發(fā)送声怔,由于A已經(jīng)單方面進(jìn)入TCP的ESTABLISHED狀態(tài)态贤,因此A直接傳輸數(shù)據(jù),B收到A的數(shù)據(jù)包+ACK包后會(huì)卻換到ESTABLISHED狀態(tài)醋火,開(kāi)始接受數(shù)據(jù)包悠汽,然后開(kāi)始數(shù)據(jù)傳輸
  3. 如果B有數(shù)據(jù)需要發(fā)送,由于B處于半連接狀態(tài)芥驳,數(shù)據(jù)發(fā)送不了柿冲,只會(huì)周期性超時(shí)重傳,直到收到A的確認(rèn)才會(huì)傳輸數(shù)據(jù)
為什么要三次握手

TCP協(xié)議為什么需要三次握手兆旬?

TCP斷開(kāi)時(shí)的四次揮手

四次揮手的過(guò)程

第一次:客戶(hù)端發(fā)送一個(gè)fin給服務(wù)端表示自己要斷開(kāi)連接了假抄,然后進(jìn)入fin_wait_1狀態(tài)
第二次:服務(wù)端收到fin后,發(fā)送一個(gè)ack=fin+1給客戶(hù)端丽猬,服務(wù)端進(jìn)入close_wait狀態(tài)宿饱,客戶(hù)端進(jìn)入fin_wait_2狀態(tài)
第三次:服務(wù)端發(fā)送一個(gè)fin,用來(lái)關(guān)閉服務(wù)端到客戶(hù)端的數(shù)據(jù)傳輸宝鼓,服務(wù)端進(jìn)入last_ack狀態(tài)
第四次:客戶(hù)端收到fin后刑棵,進(jìn)入time_wait狀態(tài),然后發(fā)送一個(gè)ack=fin+1給服務(wù)端愚铡,服務(wù)端確認(rèn)后進(jìn)入close狀態(tài),完成四次揮手


image.png
為什么要四次揮手

TCP協(xié)議是一種面向連接的、可靠的沥寥、基于字節(jié)流的運(yùn)輸層通信協(xié)議碍舍。TCP是全雙工模式,這就意味著邑雅,當(dāng)主機(jī)1發(fā)出FIN報(bào)文段時(shí)片橡,只是表示主機(jī)1已經(jīng)沒(méi)有數(shù)據(jù)要發(fā)送了,主機(jī)1告訴主機(jī)2淮野,它的數(shù)據(jù)已經(jīng)全部發(fā)送完畢了捧书;但是,這個(gè)時(shí)候主機(jī)1還是可以接受來(lái)自主機(jī)2的數(shù)據(jù)骤星;當(dāng)主機(jī)2返回ACK報(bào)文段時(shí)经瓷,表示它已經(jīng)知道主機(jī)1沒(méi)有數(shù)據(jù)發(fā)送了,但是主機(jī)2還是可以發(fā)送數(shù)據(jù)到主機(jī)1的洞难;當(dāng)主機(jī)2也發(fā)送了FIN報(bào)文段時(shí)舆吮,這個(gè)時(shí)候就表示主機(jī)2也沒(méi)有數(shù)據(jù)要發(fā)送了,就會(huì)告訴主機(jī)1队贱,我也沒(méi)有數(shù)據(jù)要發(fā)送了色冀,之后彼此就會(huì)愉快的中斷這次TCP連接。如果要正確的理解四次分手的原理柱嫌,就需要了解四次分手過(guò)程中的狀態(tài)變化锋恬。

  • FIN_WAIT_1: 這個(gè)狀態(tài)要好好解釋一下,其實(shí)FIN_WAIT_1和FIN_WAIT_2狀態(tài)的真正含義都是表示等待對(duì)方的FIN報(bào)文编丘。而這兩種狀態(tài)的區(qū)別是:FIN_WAIT_1狀態(tài)實(shí)際上是當(dāng)SOCKET在ESTABLISHED狀態(tài)時(shí)伶氢,它想主動(dòng)關(guān)閉連接,向?qū)Ψ桨l(fā)送了FIN報(bào)文瘪吏,此時(shí)該SOCKET即進(jìn)入到FIN_WAIT_1狀態(tài)癣防。而當(dāng)對(duì)方回應(yīng)ACK報(bào)文后,則進(jìn)入到FIN_WAIT_2狀態(tài)掌眠,當(dāng)然在實(shí)際的正常情況下蕾盯,無(wú)論對(duì)方何種情況下,都應(yīng)該馬上回應(yīng)ACK報(bào)文蓝丙,所以FIN_WAIT_1狀態(tài)一般是比較難見(jiàn)到的级遭,而FIN_WAIT_2狀態(tài)還有時(shí)常常可以用netstat看到渺尘。(主動(dòng)方)
  • FIN_WAIT_2:上面已經(jīng)詳細(xì)解釋了這種狀態(tài)挫鸽,實(shí)際上FIN_WAIT_2狀態(tài)下的SOCKET,表示半連接鸥跟,也即有一方要求close連接丢郊,但另外還告訴對(duì)方盔沫,我暫時(shí)還有點(diǎn)數(shù)據(jù)需要傳送給你(ACK信息),稍后再關(guān)閉連接枫匾。(主動(dòng)方)
  • CLOSE_WAIT:這種狀態(tài)的含義其實(shí)是表示在等待關(guān)閉架诞。怎么理解呢?當(dāng)對(duì)方close一個(gè)SOCKET后發(fā)送FIN報(bào)文給自己干茉,你系統(tǒng)毫無(wú)疑問(wèn)地會(huì)回應(yīng)一個(gè)ACK報(bào)文給對(duì)方谴忧,此時(shí)則進(jìn)入到CLOSE_WAIT狀態(tài)。接下來(lái)呢角虫,實(shí)際上你真正需要考慮的事情是察看你是否還有數(shù)據(jù)發(fā)送給對(duì)方沾谓,如果沒(méi)有的話(huà),那么你也就可以 close這個(gè)SOCKET戳鹅,發(fā)送FIN報(bào)文給對(duì)方均驶,也即關(guān)閉連接。所以你在CLOSE_WAIT狀態(tài)下粉楚,需要完成的事情是等待你去關(guān)閉連接辣恋。(被動(dòng)方)
  • LAST_ACK: 這個(gè)狀態(tài)還是比較容易好理解的,它是被動(dòng)關(guān)閉一方在發(fā)送FIN報(bào)文后模软,最后等待對(duì)方的ACK報(bào)文伟骨。當(dāng)收到ACK報(bào)文后,也即可以進(jìn)入到CLOSED可用狀態(tài)了燃异。(被動(dòng)方)
  • TIME_WAIT: 表示收到了對(duì)方的FIN報(bào)文携狭,并發(fā)送出了ACK報(bào)文,就等2MSL后即可回到CLOSED可用狀態(tài)了回俐。如果FINWAIT1狀態(tài)下逛腿,收到了對(duì)方同時(shí)帶FIN標(biāo)志和ACK標(biāo)志的報(bào)文時(shí),可以直接進(jìn)入到TIME_WAIT狀態(tài)仅颇,而無(wú)須經(jīng)過(guò)FIN_WAIT_2狀態(tài)单默。(主動(dòng)方)
  • CLOSED: 表示連接中斷。

TCP和UDP的異同

? TCP UDP
是否連接 面向連接 面向非連接
傳輸可靠性 可靠 不可靠
應(yīng)用場(chǎng)合 少量數(shù)據(jù) 大量數(shù)據(jù)
速度
數(shù)據(jù)正確性 保證 可能丟包
數(shù)據(jù)順序 保證 不保證

TCP并發(fā)

  1. 網(wǎng)頁(yè)中的圖片資源為什么分放在不同的域名下忘瓦?
  2. 瀏覽器與服務(wù)器建立一個(gè)TCP連接后搁廓,是否會(huì)在完成一個(gè)http請(qǐng)求后斷開(kāi)?什么條件下會(huì)斷開(kāi)耕皮?
  3. 一個(gè)TCP連接可以同時(shí)發(fā)送幾個(gè)HTTP請(qǐng)求境蜕?
  4. 瀏覽器http請(qǐng)求的并發(fā)性是如何體現(xiàn)的?并發(fā)請(qǐng)求的數(shù)量有沒(méi)有限制凌停?

答案解析:

1.網(wǎng)頁(yè)中的圖片資源為什么分放在不同的域名下?

瀏覽器對(duì)并發(fā)請(qǐng)求的數(shù)目限制是針對(duì)域名的粱年,即針對(duì)同一域名(包括二級(jí)域名)在同一時(shí)間支持的并發(fā)請(qǐng)求數(shù)量的限制。如果請(qǐng)求數(shù)目超出限制罚拟,則會(huì)阻塞台诗。因此完箩,網(wǎng)站中對(duì)一些靜態(tài)資源,使用不同的一級(jí)域名拉庶,可以提升瀏覽器并行請(qǐng)求的數(shù)目嗜憔,加速界面資源的獲取速度秃励。

2.瀏覽器與服務(wù)器建立一個(gè)TCP連接后氏仗,是否會(huì)在完成一個(gè)http請(qǐng)求后斷開(kāi)?什么條件下會(huì)斷開(kāi)夺鲜?

HTTP/1.0中皆尔,一個(gè)http請(qǐng)求收到服務(wù)器響應(yīng)后,會(huì)斷開(kāi)對(duì)應(yīng)的TCP連接币励。這樣每次請(qǐng)求慷蠕,都需要重新建立TCP連接,這樣一直重復(fù)建立和斷開(kāi)的過(guò)程食呻,比較耗時(shí)流炕。所以為了充分利用TCP連接,可以設(shè)置頭字段Connection: keep-alive仅胞,這樣http請(qǐng)求完成后每辟,就不會(huì)斷開(kāi)當(dāng)前的TCP連接,后續(xù)的http請(qǐng)求可以使用當(dāng)前TCP連接進(jìn)行通信干旧。

image

第一次訪問(wèn)有初始化連接和SSL開(kāi)銷(xiāo)

image

初始化連接和SSL開(kāi)銷(xiāo)消失了渠欺,說(shuō)明使用的是同一個(gè)TCP連接。

HTTP/1.1Connection寫(xiě)入了標(biāo)準(zhǔn)椎眯,默認(rèn)值為keep-alive挠将。除非強(qiáng)制設(shè)置為Connection: close,才會(huì)在請(qǐng)求后斷開(kāi)TCP連接编整。

所以這一題的答案就是:默認(rèn)情況下建立的TCP連接不會(huì)斷開(kāi)舔稀,只有在請(qǐng)求頭中設(shè)置Connection: close才會(huì)在請(qǐng)求后關(guān)閉TCP連接。

3.一個(gè)TCP連接可以同時(shí)發(fā)送幾個(gè)HTTP請(qǐng)求掌测?

HTTP/1.1中内贮,單個(gè)TCP連接,在同一時(shí)間只能處理一個(gè)http請(qǐng)求赏半,雖然存在Pipelining技術(shù)支持多個(gè)請(qǐng)求同時(shí)發(fā)送贺归,但由于實(shí)踐中存在很多問(wèn)題無(wú)法解決,所以瀏覽器默認(rèn)是關(guān)閉断箫,所以可以認(rèn)為是不支持同時(shí)多個(gè)請(qǐng)求拂酣。

HTTP2提供了多路傳輸功能,多個(gè)http請(qǐng)求仲义,可以同時(shí)在同一個(gè)TCP連接中進(jìn)行傳輸婶熬。

4.瀏覽器http請(qǐng)求的并發(fā)性是如何體現(xiàn)的剑勾?并發(fā)請(qǐng)求的數(shù)量有沒(méi)有限制?

頁(yè)面資源請(qǐng)求時(shí)赵颅,瀏覽器會(huì)同時(shí)和服務(wù)器建立多個(gè)TCP連接虽另,在同一個(gè)TCP連接上順序處理多個(gè)HTTP請(qǐng)求。所以瀏覽器的并發(fā)性就體現(xiàn)在可以建立多個(gè)TCP連接饺谬,來(lái)支持多個(gè)http同時(shí)請(qǐng)求捂刺。

Chrome瀏覽器最多允許對(duì)同一個(gè)域名Host建立6個(gè)TCP連接,不同的瀏覽器有所區(qū)別募寨。

補(bǔ)充

如果圖片都是HTTPS的連接族展,并且在同一域名下,瀏覽器會(huì)先和服務(wù)器協(xié)商使用HTTP2Multiplexing功能進(jìn)行多路傳輸拔鹰,不過(guò)未必所有的掛在這個(gè)域名下的資源都會(huì)使用同一個(gè)TCP連接仪缸。如果用不了HTTPS或者HTTP2(HTTP2是在HTTPS上實(shí)現(xiàn)的),那么瀏覽器會(huì)就在同一個(gè)host建立多個(gè)TCP連接列肢,每一個(gè)TCP連接進(jìn)行順序請(qǐng)求資源恰画。

參考:
[1].第8題-瀏覽器HTTP請(qǐng)求并發(fā)數(shù)和TCP連接的關(guān)系

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市瓷马,隨后出現(xiàn)的幾起案子拴还,更是在濱河造成了極大的恐慌,老刑警劉巖决采,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件自沧,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡树瞭,警方通過(guò)查閱死者的電腦和手機(jī)拇厢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)晒喷,“玉大人孝偎,你說(shuō)我怎么就攤上這事×骨茫” “怎么了衣盾?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)爷抓。 經(jīng)常有香客問(wèn)我势决,道長(zhǎng),這世上最難降的妖魔是什么蓝撇? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任果复,我火速辦了婚禮,結(jié)果婚禮上渤昌,老公的妹妹穿的比我還像新娘虽抄。我一直安慰自己走搁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布迈窟。 她就那樣靜靜地躺著私植,像睡著了一般。 火紅的嫁衣襯著肌膚如雪车酣。 梳的紋絲不亂的頭發(fā)上曲稼,一...
    開(kāi)封第一講書(shū)人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音骇径,去河邊找鬼躯肌。 笑死者春,一個(gè)胖子當(dāng)著我的面吹牛破衔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钱烟,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼晰筛,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了拴袭?” 一聲冷哼從身側(cè)響起读第,我...
    開(kāi)封第一講書(shū)人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎拥刻,沒(méi)想到半個(gè)月后怜瞒,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡般哼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年吴汪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒸眠。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡漾橙,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出楞卡,到底是詐尸還是另有隱情霜运,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布蒋腮,位于F島的核電站淘捡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏池摧。R本人自食惡果不足惜焦除,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望险绘。 院中可真熱鬧踢京,春花似錦誉碴、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蹈丸,卻和暖如春成黄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背逻杖。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工奋岁, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人荸百。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓闻伶,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親够话。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蓝翰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355