計(jì)算機(jī)網(wǎng)絡(luò)不權(quán)威總結(jié)

計(jì)算機(jī)網(wǎng)絡(luò)不權(quán)威總結(jié)

歡迎閱讀

對(duì)于程序員平窘,網(wǎng)絡(luò)方面的知識(shí)是必不可少的,本文為大家梳理計(jì)算機(jī)網(wǎng)絡(luò)方面的主要知識(shí)體系签孔,淺嘗輒止叉讥,可以作為一個(gè)知識(shí)的索引,有需要的同學(xué)可以通過附上的文章更深入學(xué)習(xí)饥追。必有疏漏錯(cuò)誤的地方图仓,歡迎大家指出分享

網(wǎng)絡(luò)模型

可以說整個(gè)計(jì)算機(jī)網(wǎng)絡(luò)都是圍繞以下這個(gè)五層模型進(jìn)行構(gòu)建的

  1. 應(yīng)用層,HTTP但绕、SMTP救崔、FTP、DNS捏顺,應(yīng)用之間數(shù)據(jù)交換六孵,報(bào)文
  2. 傳輸層,TCP幅骄、UDP劫窒,在不穩(wěn)定的網(wǎng)絡(luò)基礎(chǔ)上實(shí)現(xiàn)可控(穩(wěn)定)網(wǎng)絡(luò)傳輸,報(bào)文段
  3. 網(wǎng)絡(luò)層拆座,IP主巍、DHCP、NAT挪凑,劃分孕索、定位網(wǎng)絡(luò),實(shí)現(xiàn)數(shù)據(jù)跨網(wǎng)絡(luò)傳輸岖赋;構(gòu)建路由表檬果,轉(zhuǎn)發(fā)數(shù)據(jù)報(bào),數(shù)據(jù)報(bào)
  4. 鏈路層唐断,ARP选脊、RARP、RIP脸甘,信道調(diào)度恳啥,幀
  5. 物理層,利用各種介質(zhì)(雙絞銅線丹诀、光纖钝的、電磁波)實(shí)現(xiàn)0、1數(shù)據(jù)的真實(shí)傳輸铆遭,位

始終不要忘記硝桩,網(wǎng)絡(luò)的目的是為了實(shí)現(xiàn)遠(yuǎn)程終端之間應(yīng)用的信息共享,也就是應(yīng)用層的目的枚荣。由此出發(fā)碗脊,自上而下來分析,這個(gè)模型就很合情合理了橄妆,甚至可以理解為當(dāng)時(shí)的最優(yōu)可行解

這樣的層級(jí)劃分衙伶,可以讓每一層需要實(shí)現(xiàn)的功能都簡單直接祈坠。首先對(duì)網(wǎng)絡(luò)模型有個(gè)總體的了解,至于各層的細(xì)節(jié)矢劲,比如終端中包含了很多應(yīng)用赦拘,如何區(qū)分?IP地址即將耗盡芬沉,如何最大效率的分配躺同?一些企業(yè)的私有網(wǎng)絡(luò)又是如何和因特網(wǎng)對(duì)接的?將會(huì)在之后陸續(xù)進(jìn)行總結(jié)

網(wǎng)絡(luò)接入
說了這么多花嘶,好像所有都是免費(fèi)的啊笋籽,除了自己買根網(wǎng)線蹦漠。那我們的網(wǎng)費(fèi)都交給誰了椭员?

我們的網(wǎng)費(fèi)都交給各級(jí)網(wǎng)絡(luò)提供商了(ISP)。各大洲之間會(huì)有海底光纜進(jìn)行互聯(lián)笛园,然后各個(gè)國家又有自己的主網(wǎng)絡(luò)節(jié)點(diǎn)隘击,然后各個(gè)地區(qū)都有ISP的節(jié)點(diǎn),這些節(jié)點(diǎn)將散落在各個(gè)社區(qū)的住戶接入了互聯(lián)網(wǎng)

另外值得一提的是谷歌由于財(cái)大氣粗和出于安全考慮研铆,自己完成了網(wǎng)絡(luò)的接入埋同,在各個(gè)國家建立了自己的節(jié)點(diǎn),儼然一個(gè)小型ISP

網(wǎng)絡(luò)安全
深入了解網(wǎng)絡(luò)模型后棵红,你會(huì)發(fā)現(xiàn)這里面有很多地方都是基于相信各個(gè)終端是不會(huì)作惡的(這主要是由于網(wǎng)絡(luò)最初的建立便是基于“一群相互信任的用戶連接到一個(gè)透明的網(wǎng)絡(luò)上”)凶赁,但現(xiàn)實(shí)中這幾乎是不可能的,所以網(wǎng)絡(luò)攻擊手段層出不窮

比如網(wǎng)絡(luò)嗅探逆甜,本來一些終端是應(yīng)該忽略掉不是發(fā)給他的信息的虱肄,就比如學(xué)校傳達(dá)室里的信件,誰都能夠接觸到交煞,但應(yīng)該又收信人查看咏窿,網(wǎng)絡(luò)嗅探就是在窺伺別人的隱私

又比如IP哄騙,快遞員把郵件送到了你們的合租房素征,本來是你室友的東西集嵌,但你冒充了他,哄騙了快遞員御毅,將數(shù)據(jù)交付給了你

另一個(gè)臭名昭著的是拒絕服務(wù)攻擊(DoS)根欧,不斷的對(duì)網(wǎng)絡(luò)服務(wù)發(fā)起請求,直到其癱瘓為止端蛆,后來又演變?yōu)?code>分布式的拒絕服務(wù)攻擊(DDoS)凤粗,消耗服務(wù)器資源的方式也層出不窮,最簡單即暴力請求欺税,復(fù)雜點(diǎn)的如利用TCP協(xié)議的一些特性侈沪,發(fā)送一些特制的報(bào)文揭璃,延長服務(wù)器的處理時(shí)間,消耗有限資源

應(yīng)用層

網(wǎng)絡(luò)應(yīng)用是計(jì)算機(jī)網(wǎng)絡(luò)存在的的理由亭罪,所以上至TCP/IP協(xié)議棧瘦馍,下至雙絞銅線和光纖,都是為實(shí)現(xiàn)網(wǎng)絡(luò)應(yīng)用提供各種服務(wù)

但是由于良好的分層模型应役,應(yīng)用層協(xié)議已經(jīng)高度抽象情组,程序員只需要關(guān)注應(yīng)用之間的數(shù)據(jù)交互,其他的基本是透明的箩祥,大大降低了軟件開發(fā)復(fù)雜度

網(wǎng)絡(luò)應(yīng)用常見的體系機(jī)構(gòu)有兩種

  • Client/Server院崇,即客戶機(jī)/服務(wù)器體系結(jié)構(gòu),該體系結(jié)構(gòu)包含一個(gè)始終運(yùn)行著提供服務(wù)的服務(wù)器袍祖,以及分布在各個(gè)用戶那里的客戶機(jī)
  • P2P底瓣,該體系結(jié)構(gòu)很少依賴服務(wù)器,主要利用網(wǎng)絡(luò)中互相平等的主機(jī)提供服務(wù)蕉陋,著名的Skype捐凭、BT均便是該體系結(jié)構(gòu)

HTTP

超文本傳輸協(xié)議(HyperText Transfer Protocol),它是web的核心凳鬓。使用TCP作為它的支撐運(yùn)輸層協(xié)議茁肠。是一個(gè)無狀態(tài)協(xié)議

HTTP請求報(bào)文格式

請求報(bào)文格式

請求報(bào)文第一行是請求行(request line),后續(xù)為首部行(header line)
請求行中請求方法一般為POST缩举、GET垦梆、PUT、DELETE仅孩,協(xié)議版本類似HTTP/1.1

HTTP響應(yīng)報(bào)文格式

響應(yīng)報(bào)文格式

一些常見的響應(yīng)碼

  • 200 ok 請求成功
  • 301 moved permanently 請求的對(duì)象已經(jīng)被永久轉(zhuǎn)移了
  • 400 bad request 一個(gè)通用差錯(cuò)代碼托猩,該請求服務(wù)器無法理解
  • 404 not found 被請求的文檔不在服務(wù)器
  • 500 server error 服務(wù)器錯(cuò)誤
  • 505 http version is not supported 當(dāng)前http版本不被支持

Header
請求報(bào)文和響應(yīng)報(bào)文中都包含一些頭部說明標(biāo)識(shí),用以對(duì)交互附加說明杠氢,比如

  • Data站刑,報(bào)文的構(gòu)建時(shí)間,通用鼻百,如Thu 03 Jan 2019 12:23
  • Accept绞旅,客戶端接收的數(shù)據(jù)類型,請求報(bào)文温艇,如text/html application/xml
  • Content-Type因悲,報(bào)文body部分的數(shù)據(jù)類型,通用勺爱,如text/plain; charset=utf-8

Cookie
cookie是存儲(chǔ)在客戶端的一個(gè)小文件晃琳,是對(duì)Http無狀態(tài)的補(bǔ)充,方便在不同請求之間同步數(shù)據(jù)。Http協(xié)議在響應(yīng)報(bào)文中聲明要設(shè)置的cookie的名稱卫旱、值與過期時(shí)間人灼。客戶端在每次請求時(shí)都會(huì)自動(dòng)帶上該請求同域名的cookie

由于cookie存儲(chǔ)在客戶端且有大小限制顾翼,不適合存儲(chǔ)敏感信息投放,只可以用了存儲(chǔ)一些短暫的會(huì)話id或者默認(rèn)賬號(hào)等

緩存
Http協(xié)議包含緩存機(jī)制,可以將一些不常變的資源設(shè)置緩存時(shí)間或簡單策略适贸。但由于緩存機(jī)制比較簡單灸芳,而且目前web 2.0,http交互大部分都是業(yè)務(wù)請求拜姿,緩存基本由服務(wù)端處理

keep-alive
Http協(xié)議是無狀態(tài)的烙样,并且大部分都是短請求,所以需要頻繁建立斷開tcp連接蕊肥,既消耗資源也浪費(fèi)時(shí)間谒获。客戶端和服務(wù)端任何一方都可以在http交互中添加keep-alive標(biāo)記晴埂,這樣底層的tcp連接便不會(huì)斷開究反,一個(gè)連接中可以完成多次http請求

延伸
從數(shù)據(jù)傳輸層深度解密HTTP

HTTPS

由于HTTP協(xié)議是明文傳輸,所以經(jīng)常發(fā)生數(shù)據(jù)泄露儒洛、劫持、篡改狼速,HTTPS便是在HTTP協(xié)議基礎(chǔ)上實(shí)現(xiàn)了加密琅锻,大致原理為:

  1. 客戶端訪問服務(wù)端,獲取其證書向胡,瀏覽器解析證書中包含的服務(wù)端公鑰
  2. 客戶端使用服務(wù)端的公鑰加密自己的公鑰恼蓬,然后發(fā)送給服務(wù)端
  3. 服務(wù)端用私鑰解密后,拿到客戶端的公鑰僵芹,然后使用其對(duì)數(shù)據(jù)進(jìn)行加密处硬,至此完成信道的加密
  4. 客戶端收到數(shù)據(jù)后用自己的私鑰解密

公鑰 私鑰
非對(duì)稱可逆加密,即加密的數(shù)據(jù)可進(jìn)行解密拇派,而且加密和解密使用的key不同荷辕。對(duì)外暴露的key叫做公鑰,自己保留的是私鑰

證書
證書服務(wù)端向第三方機(jī)構(gòu)申請的件豌,記錄了其公鑰疮方。如何防止證書造假:

  1. 證書是使用該機(jī)構(gòu)的私鑰加密的,只有該機(jī)構(gòu)的公鑰才能正確解密茧彤,獲取證書內(nèi)容
  2. 而主要瀏覽器都會(huì)內(nèi)置知名第三方機(jī)構(gòu)的公鑰骡显,如果發(fā)現(xiàn)不認(rèn)識(shí)的證書會(huì)發(fā)出警告

DNS

客戶端請求服務(wù)時(shí)需要通過ip地址定位服務(wù)器所在,但106.75.17.181這樣的ip實(shí)在難以記憶,最初的方案很簡單惫谤,就是在操作系統(tǒng)中維護(hù)一個(gè)hosts文件壁顶,記錄了域名和ip的對(duì)應(yīng)關(guān)系,但是隨著互聯(lián)網(wǎng)越來越大溜歪,hosts文件已經(jīng)不能滿足需求

DNS(domain name system)域名系統(tǒng)便是為了解決這一問題博助。基于UDP協(xié)議(運(yùn)行在53端口)痹愚,在全世界各地部署了大量DNS服務(wù)器用于提供域名與ip對(duì)應(yīng)關(guān)系解析服務(wù)富岳。這里簡單舉一個(gè)例子,比如我們要訪問www.liufuxin.cn.org

  1. 首先會(huì)請求操作系統(tǒng)默認(rèn)的dns服務(wù)器拯腮,這個(gè)也可以修改我們信任的權(quán)威服務(wù)器窖式,如谷歌的8.8.8.8
  2. 如果本地dns服務(wù)器沒有記錄,則請求根域名服務(wù)器动壤,根域名服務(wù)器告訴你org頂級(jí)域名應(yīng)該訪問另外一個(gè)服務(wù)器
  3. org的頂級(jí)域名服務(wù)器萝喘,告訴了我cn域名的服務(wù)器
  4. cn域名服務(wù)器告訴了該域名的ip地址
  5. 本地dns服務(wù)器會(huì)緩存這個(gè)結(jié)果

DNS同時(shí)也可以提供負(fù)載均衡服務(wù),即同一個(gè)域名琼懊,依據(jù)策略返回不同的ip地址均衡負(fù)載

延伸
全方位深入理解DNS

P2P
P2P是除了服務(wù)器-客戶端之外另一種重要的網(wǎng)絡(luò)體系阁簸,是在網(wǎng)絡(luò)中互相對(duì)等的兩個(gè)終端之間進(jìn)行通信,常見的應(yīng)用為文件分發(fā)哼丈,即著名的BitTorrent協(xié)議启妹;另一種是在對(duì)等方中組織并搜索信息;第三種是Skype醉旦,一個(gè)成功的P2P因特網(wǎng)電話應(yīng)用饶米。

BitTorrent
BT下載的主要原理是充分利用加入分發(fā)的各終端的網(wǎng)絡(luò)上載流量,因?yàn)橐话闱闆r下车胡,終端的下載流量會(huì)遠(yuǎn)遠(yuǎn)大于上載檬输。簡單來說,就是各終端均勻的下載文件的各個(gè)部分匈棘,然后再在臨近的終端之間互相交換數(shù)據(jù)丧慈,既減輕服務(wù)器下載壓力,又能提供終端的下載速度主卫,實(shí)現(xiàn)了下載的人越多逃默,下載速度越快的“變態(tài)”下載

運(yùn)輸層

運(yùn)輸層將網(wǎng)絡(luò)層在兩個(gè)端系統(tǒng)之間的交付服務(wù),擴(kuò)展到運(yùn)行在兩個(gè)不同端系統(tǒng)上的應(yīng)用層進(jìn)程之間的交付服務(wù)队秩,同時(shí)提供了額外的邏輯通信服務(wù)笑旺,

UDP

UDP其實(shí)很簡單,只是在網(wǎng)絡(luò)層的數(shù)據(jù)報(bào)基礎(chǔ)上增加了部分多路復(fù)用和分解的報(bào)頭馍资。也就是說UDP如同網(wǎng)絡(luò)層一樣筒主,只提供盡力的交付服務(wù)关噪,不保證完整、有序乌妙,那我們選擇UDP的場景有哪些呢使兔?

  • 可以忍受一定的數(shù)據(jù)丟失,但要求強(qiáng)實(shí)時(shí)性 因?yàn)椴灰⑦B接藤韵,同時(shí)沒有擁塞控制虐沥,所以UDP的網(wǎng)絡(luò)時(shí)延小
  • 性能更好 因?yàn)椴恍枰S護(hù)連接,所以UDP的性能要更好泽艘,可以支持更多的活躍客戶機(jī)
  • 網(wǎng)絡(luò)開銷小 因?yàn)楣δ芎唵嗡訳DP的報(bào)文頭短小欲险,所以報(bào)文整體要比TCP小

TCP

TCP提供的一個(gè)重要服務(wù)便是可靠傳輸,即保證數(shù)據(jù)完整匹涮、有序天试,且在合理的時(shí)間范圍內(nèi)。我們知道傳輸層所依賴的網(wǎng)絡(luò)層并不是可靠的然低,那TCP是如何在此基礎(chǔ)上實(shí)現(xiàn)了可靠傳輸協(xié)議呢喜每?在本小節(jié)中,我們會(huì)在一個(gè)不斷接近真實(shí)的網(wǎng)絡(luò)模型上逐步建立一個(gè)可靠傳輸協(xié)議雳攘。希望能夠幫助大家更加深入的理解TCP的各個(gè)功能的意義

手撕可靠傳輸協(xié)議

完全可靠的信道
假設(shè)網(wǎng)絡(luò)是完全可靠的带兜,不會(huì)丟失數(shù)據(jù)、不會(huì)擁塞吨灭。那么我們該如何構(gòu)建該協(xié)議呢刚照?

很簡單斥难,發(fā)送方發(fā)送數(shù)據(jù)勘高,然后接收方收到數(shù)據(jù)后發(fā)送一個(gè)反饋,發(fā)送方接收到反饋后繼續(xù)發(fā)送级野,甚至當(dāng)我們可以約定兩者的速度匹配繁莹,則不需要接收方發(fā)送反饋,這樣我們完成了可靠傳輸協(xié)議rdt1.0

會(huì)出現(xiàn)比特差錯(cuò)的信道
再增加一點(diǎn)真實(shí)性特幔,即信道中傳輸?shù)臄?shù)據(jù)會(huì)出現(xiàn)比特差錯(cuò)(即0咨演、1跳變),現(xiàn)在該怎么辦呢蚯斯?也很簡單薄风,只需要在rdt1.0的基礎(chǔ)上增加

  • 差錯(cuò)檢測 檢測報(bào)文數(shù)據(jù)完整性有很多辦法,常用的包括奇偶校驗(yàn)位拍嵌、摘要等
  • 反饋接收 即發(fā)送方獲取接收方正確收到數(shù)據(jù)后的反饋
  • 重發(fā) 當(dāng)接收方發(fā)送的反饋是數(shù)據(jù)錯(cuò)誤時(shí)則重發(fā)數(shù)據(jù)

增加這幾個(gè)功能后我們便可以解決比特差錯(cuò)的問題了

等等遭赂,反饋本身要是也出錯(cuò)了怎么辦?所以横辆,還差一點(diǎn)撇他,那就是當(dāng)反饋本身也出錯(cuò)時(shí)(即發(fā)送方收到了‘含糊不清’的反饋)則也默認(rèn)重發(fā)數(shù)據(jù),但這又會(huì)有個(gè)問題,接收方萬一之前正確接收了困肩,現(xiàn)在又發(fā)送划纽,他又接收了怎么辦?解決辦法就是在發(fā)送報(bào)文中添加重傳標(biāo)記锌畸,標(biāo)明數(shù)據(jù)為重發(fā)

至此勇劣,我們就有了更加健壯的rdt2.0了

會(huì)出現(xiàn)丟包、比特差錯(cuò)的信道
道高一尺潭枣,魔高一丈比默。真實(shí)的網(wǎng)絡(luò)環(huán)境中不僅數(shù)據(jù)會(huì)跳變,還會(huì)丟包盆犁。即發(fā)送方和接收方發(fā)送的任何報(bào)文段都可能丟失命咐。解決這個(gè)問題其實(shí)很簡單,只需要在發(fā)送方增加倒數(shù)計(jì)時(shí)器即可蚣抗。當(dāng)發(fā)送方發(fā)送數(shù)據(jù)后便開始計(jì)時(shí)侈百,若超時(shí)未得到響應(yīng),則重發(fā)數(shù)據(jù)翰铡。至于這個(gè)超時(shí)如何確定钝域,一般會(huì)設(shè)置為報(bào)文段的一次往返時(shí)間。

rdt3.0完成锭魔。截止目前例证,我們已經(jīng)有了一個(gè)基本可以在真實(shí)網(wǎng)絡(luò)環(huán)境中工作的簡易TCP了

以流水線方式實(shí)現(xiàn)
rdt3.0其實(shí)已經(jīng)能夠真實(shí)運(yùn)行了,但還存在一個(gè)很大的缺陷迷捧,那就是性能很差织咧。因?yàn)榘l(fā)送方和接收方之間的每一步基本都是“停等”的。我們可以通過流水線的方式來加速數(shù)據(jù)傳輸漠秋,但一旦使用流水線笙蒙,那么發(fā)送和接收的模型都會(huì)更加復(fù)雜,他們必須得做到以下幾點(diǎn)

  1. 增加編號(hào) 即每個(gè)分組要增加一個(gè)唯一的序號(hào)庆锦,方便流水線管理分組
  2. 增加緩存 即發(fā)送方和接收方都要增加一個(gè)緩沖區(qū)捅位,用來緩存雙方尚未確認(rèn)的分組
  3. 解決差錯(cuò) 流水線方式的話,因?yàn)槭桥堪l(fā)送數(shù)據(jù)搂抒,出現(xiàn)錯(cuò)誤后處理難度會(huì)較之剛才更大艇搀,TCP使用回退N步選擇重傳兩種策略解決這個(gè)問題
    • 回退N步
      發(fā)送模型大概是發(fā)送方不斷的發(fā)送數(shù)據(jù),直至一個(gè)閾值(這也叫做發(fā)送窗口)求晶,然后向前滑動(dòng)并等待確認(rèn)反饋或超時(shí)重傳焰雕。這里有個(gè)約定就是接收方接收窗口為1,即只有序確定數(shù)據(jù)分組芳杏,并且只會(huì)反饋正確收到的最大分組序號(hào)矩屁。所以假如發(fā)送方發(fā)送了1-100號(hào)分組辟宗,可能只收到了55、70的反饋档插,以及71失敗或者超時(shí)慢蜓,此時(shí)窗口回退到71重新發(fā)送
    • 選擇重傳
      選擇重傳是對(duì)回退N步策略的一種改進(jìn),發(fā)送方和接收方都會(huì)緩存一些數(shù)據(jù)郭膛,允許亂序確認(rèn)晨抡。即發(fā)送方當(dāng)收到2號(hào)出錯(cuò)時(shí),窗口并不回退则剃,而是單獨(dú)處理2號(hào)耘柱,同時(shí)接收方在收到亂序到達(dá)的分組后不會(huì)丟失不連續(xù)的,而是暫存起來棍现。這樣雖然增加了實(shí)現(xiàn)難度调煎,但卻大大提高了效率

到這里,TCP是如何在不可靠的網(wǎng)絡(luò)上實(shí)現(xiàn)可靠傳輸?shù)姆椒☉?yīng)該有一個(gè)感性的認(rèn)識(shí)了吧

TCP連接管理

TCP是面向連接的己肮,直觀來說就是面向一個(gè)可靠有序的字節(jié)流士袄,那么TCP是如何建立并管理這個(gè)連接呢?

建立連接 三次握手

  1. 客戶端發(fā)送SYN分組谎僻、隨機(jī)序列號(hào)J娄柳,請求建立連接,狀態(tài)變?yōu)镾YNC_SENT艘绍。完成第一次握手
  2. 服務(wù)端初始狀態(tài)為LISTEN赤拒,收到SYN后,開辟所需的變量和緩沖區(qū)诱鞠,返回確認(rèn)分組ACK挎挖、ack=J+1、seq=K航夺,狀態(tài)變?yōu)镾YN_RCVD蕉朵,完成第二次握手
  3. 客戶端收到確認(rèn)分組,準(zhǔn)備變量和緩沖區(qū)阳掐,返回確認(rèn)ACK分組墓造,ack=K+1,狀態(tài)變?yōu)镋STABLISHED锚烦,完成第三次握手
  4. 服務(wù)端收到確認(rèn)請求,狀態(tài)變?yōu)镋STABLISHED
三次握手.png

關(guān)閉連接 四次揮手

  1. 客戶端發(fā)送FIN分組帝雇、隨機(jī)序列號(hào)M涮俄,狀態(tài)變?yōu)閃AIT_FIN_1,表示不再發(fā)送數(shù)據(jù)尸闸,請求關(guān)閉連接彻亲,一次揮手
  2. 服務(wù)端開始清理變量孕锄、緩沖區(qū),返回確認(rèn)分組ACK苞尝,ack=M+1畸肆,隨機(jī)序列號(hào)N,狀態(tài)變?yōu)镃LOSE_WAIT宙址,二次揮手
  3. 服務(wù)端清理完畢轴脐,發(fā)送FIN分組、隨機(jī)序列號(hào)N抡砂,狀態(tài)變?yōu)長AST_ACK大咱,表示不再發(fā)送數(shù)據(jù),允許關(guān)閉連接注益,三次揮手
  4. 客戶端返回確認(rèn)分組ACK碴巾、ack=N+1,狀態(tài)變?yōu)門IME_WAIT丑搔,四次揮手
  5. 服務(wù)端收到確認(rèn)請求厦瓢,狀態(tài)變?yōu)镃LOSED
四次揮手.png

為什么建立連接要三次握手,關(guān)閉要四次揮手啤月?
這里首先要明白煮仇,TCP是全雙工,即服務(wù)端與客戶端都可以發(fā)送與接收數(shù)據(jù)顽冶,所以連接的建立和關(guān)閉其實(shí)都是圍繞雙方互相確認(rèn)對(duì)方具有發(fā)送與接收能力進(jìn)行的

建立連接時(shí)欺抗,第一次握手服務(wù)端確認(rèn)了客戶端的發(fā)送能力,第二次握手客戶端確認(rèn)了服務(wù)端的接收和發(fā)送能力强重,第三次握手服務(wù)端確認(rèn)了客戶端的接收能力绞呈。確認(rèn)完畢,連接便建立间景。這里要注意佃声,“能力”不僅指硬件設(shè)備正常,還有一層意思是假如客戶端的某一個(gè)SYN分組因?yàn)榫W(wǎng)絡(luò)延遲過了很久才到服務(wù)端倘要,雖然客戶端此時(shí)硬件沒問題圾亏,但可能已經(jīng)完成了數(shù)據(jù)交互,不再需要建立連接封拧,此時(shí)第三次握手的作用便能保證服務(wù)端不會(huì)白白等待

連接關(guān)閉時(shí)道理一樣志鹃。第一次揮手服務(wù)端確認(rèn)客戶端不再發(fā)送,第二次揮手客戶端確認(rèn)服務(wù)端不再接收泽西,第三次揮手客戶端確認(rèn)服務(wù)端不再發(fā)送曹铃,第四次揮手服務(wù)端確認(rèn)客戶端不再接收

半連接隊(duì)列
服務(wù)端收到SYN分組后便準(zhǔn)備建立連接,此時(shí)的socket數(shù)據(jù)半連接捧杉,操作系統(tǒng)維護(hù)了一個(gè)半連接隊(duì)列陕见,半連接隊(duì)列如果積壓的話服務(wù)端便無法建立新連接秘血。這其實(shí)也是SYN洪泛攻擊的原理

三次握手期間能不能順便帶數(shù)據(jù)?
不能评甜。如果允許握手同時(shí)帶數(shù)據(jù)灰粮,則服務(wù)端要提前開辟緩沖區(qū)預(yù)先存儲(chǔ)數(shù)據(jù),這樣就非常容易受到攻擊忍坷。不過第三次握手時(shí)因?yàn)檫B接已經(jīng)確認(rèn)建立粘舟,是可以同時(shí)發(fā)送數(shù)據(jù)的

TIME_WAIT如何產(chǎn)生?什么危害承匣?怎么解決蓖乘?
主動(dòng)發(fā)起連接斷開的一方才會(huì)出現(xiàn)TIME_WAIT,它的作用是確保第四次揮手的分組被正確接收到韧骗,一般會(huì)等待2MST時(shí)間確認(rèn)是否會(huì)再收到FIN分組嘉抒,默認(rèn)為數(shù)分組。如果短時(shí)間內(nèi)大量短連接的斷開會(huì)導(dǎo)致出現(xiàn)大量TIME_WAIT袍暴,而處于TIME_WAIT的連接依然占用端口(防止其他連接占用該端口導(dǎo)致數(shù)據(jù)混亂)些侍,這樣就會(huì)導(dǎo)致端口耗盡為無法建立新連接

快速的解決辦法是手動(dòng)清理這些連接,也可以減小2MST時(shí)間政模,治本的辦法是找到短時(shí)間內(nèi)產(chǎn)生大量連接的原因

TCP擁塞控制

TCP的擁塞控制主要是面向整個(gè)互聯(lián)網(wǎng)的岗宣,因?yàn)樗闹饕饔帽闶歉鶕?jù)當(dāng)前網(wǎng)絡(luò)環(huán)境遏制自己的發(fā)送速度。這里我們只需要了解幾個(gè)簡單的概念即可淋样。注意擁塞控制和流量控制不同耗式,后者主要是為了匹配接收方與發(fā)送方處理速度,減少丟包趁猴,主要通過控制窗口滑動(dòng)速度實(shí)現(xiàn)刊咳。擁塞控制則主要是通過調(diào)整窗口大小實(shí)現(xiàn)

慢啟動(dòng)
即發(fā)送方在發(fā)送數(shù)據(jù)時(shí)首先發(fā)送1個(gè)分組進(jìn)行試探,成功后繼續(xù)發(fā)送2個(gè)儡司,然后依次類推娱挨。當(dāng)然不會(huì)這么一直翻倍下去,而是當(dāng)達(dá)到某個(gè)閾值后捕犬,變化為線性速度增加

加性增跷坝,乘性減
在線性增加過程中,若遇到擁塞碉碉,窗口大小按照幾何倍率減小柴钻,重新開始慢啟動(dòng)過程

快重傳
快重傳算法規(guī)定,發(fā)送方只要一連收到三個(gè)重傳確認(rèn)就應(yīng)當(dāng)立即重傳對(duì)方尚未收到的報(bào)文段垢粮,而不必繼續(xù)等待重傳計(jì)時(shí)器到顿颅。由于發(fā)送方盡早重傳未被確認(rèn)的報(bào)文段,因此采用快重傳后可以使整個(gè)網(wǎng)絡(luò)吞吐量提高約20%

快恢復(fù)
與快重傳配合使用的還有快恢復(fù)算法。當(dāng)在慢啟動(dòng)階段收到多個(gè)重傳確認(rèn)時(shí)粱腻,會(huì)觸發(fā)快恢復(fù)事件,發(fā)送窗口重新進(jìn)入加性增階段斩跌,避免翻倍導(dǎo)致網(wǎng)絡(luò)更加擁塞

擁塞控制.webp

TCP绍些、UDP的比較

  1. 連接方式。TCP是面向連接的耀鸦,在通信之前需要雙方建立連接柬批,初始化資源和同步序列號(hào);UDP是面向數(shù)據(jù)報(bào)袖订,只需要將數(shù)據(jù)根據(jù)ip發(fā)送出去即可
  2. 可靠性氮帐。TCP是可靠、有序洛姑,保證數(shù)據(jù)不錯(cuò)上沐、不丟、不亂楞艾;UDP則是不可靠参咙、不保證有序
  3. 發(fā)送方式。TCP是面向字節(jié)流硫眯;UDP是面向數(shù)據(jù)報(bào)
  4. 大小限制蕴侧。TCP因?yàn)槊嫦蜻B接字節(jié)流,所以無大小限制两入;UDP因?yàn)槊嫦驍?shù)據(jù)報(bào)净宵,單次發(fā)送受到這些限制:UDP協(xié)議最長單次65536字節(jié)、網(wǎng)絡(luò)最大傳輸單元MTU(Internet是576字節(jié))裹纳、socket緩沖區(qū)大小择葡。由于發(fā)送數(shù)據(jù)超過單次大小限制,需要分包痊夭,會(huì)提高丟包率刁岸,所以一般保證單次發(fā)送數(shù)據(jù)在一個(gè)包內(nèi),MTU - UDP包頭 - IP包頭
  5. 使用場景她我。TCP適合通訊質(zhì)量有要求的場景虹曙,如郵件、文件下載番舆;UDP主要適用于實(shí)時(shí)性要求高酝碳、可靠性要求低的場景如視頻、語音恨狈,以及多點(diǎn)通信場景
  6. 性能疏哗。TCP雖然要維持連接,但由于經(jīng)過大量優(yōu)化禾怠,在網(wǎng)絡(luò)環(huán)境比較好的情況下返奉,性能并不輸于UDP贝搁。不過由于TCP設(shè)計(jì)過于冗余復(fù)雜,很難再進(jìn)行優(yōu)化芽偏;而UDP由于設(shè)計(jì)簡單雷逆,不少公司將UDP改造為可靠的協(xié)議,如谷歌的GUIC污尉,網(wǎng)絡(luò)傳輸冗余少膀哲、速度快,且數(shù)據(jù)可靠被碗。在整體網(wǎng)絡(luò)環(huán)境不斷改善的情況下某宪,UDP丟包率已經(jīng)低于5%,已經(jīng)在越來越多的場景如語音锐朴、視頻兴喂、游戲領(lǐng)域取代TCP

網(wǎng)絡(luò)層

之所以有網(wǎng)絡(luò)層,是因?yàn)樽畛醯幕ヂ?lián)網(wǎng)還只是一個(gè)局域網(wǎng)包颁,只有若干個(gè)網(wǎng)卡互相連接瞻想,通過mac地址就能完成數(shù)據(jù)交換。但后來由于局域網(wǎng)不斷擴(kuò)大娩嚼,確定mac地址的成本越來越高蘑险,直到上億個(gè)局域網(wǎng)構(gòu)成互聯(lián)網(wǎng)時(shí),mac地址來完成定位已經(jīng)無法實(shí)現(xiàn)岳悟,必須先有一個(gè)網(wǎng)絡(luò)層佃迄,來完成局域網(wǎng)的確定

IP

IP協(xié)議的作用便是完成局域網(wǎng)的確定,和局域網(wǎng)內(nèi)mac的確定贵少。大致的原理如下:

  1. IP地址中包含網(wǎng)絡(luò)位和地址位呵俏,網(wǎng)絡(luò)位用來確認(rèn)子網(wǎng)地址,地址位用來確認(rèn)mac
  2. IP轉(zhuǎn)發(fā)的時(shí)候先確認(rèn)是否為本地局域網(wǎng)滔灶,如果不是再轉(zhuǎn)發(fā)網(wǎng)關(guān)普碎,網(wǎng)關(guān)根據(jù)路由表繼續(xù)轉(zhuǎn)發(fā),直到找到目標(biāo)網(wǎng)絡(luò)
  3. 找到目標(biāo)網(wǎng)絡(luò)后录平,再講IP地址映射到mac地址麻车,將數(shù)據(jù)發(fā)送給指定mac

IPv4
目前使用最廣泛的是ipv4地址,由32個(gè)bit組成斗这,可以表示2^32個(gè)地址(約40億個(gè))动猬,為了方便書寫,一般記為4個(gè)0~255的十進(jìn)制數(shù)表箭,點(diǎn)號(hào)分開

子網(wǎng)
IP地址中的網(wǎng)絡(luò)位和地址位是通過子網(wǎng)掩碼實(shí)現(xiàn)的赁咙,用IP地址和子網(wǎng)掩碼進(jìn)行與運(yùn)算則可以計(jì)算出子網(wǎng)號(hào)。之所以劃分子網(wǎng)是因?yàn)檫@樣可以實(shí)現(xiàn)地址聚合(或者路由聚合),能夠?qū)⑾嗤泳W(wǎng)的ip使用一個(gè)路由映射彼水,減少路由表的大小崔拥,提高路由效率

子網(wǎng)劃分為A、B猿涨、C握童、D、E五類叛赚,分別具有不同比特的前綴,這樣做的好處是規(guī)范子網(wǎng)號(hào)稽揭,實(shí)現(xiàn)ip復(fù)用俺附。比如一家大公司或者一個(gè)城市可以看做一個(gè)局域網(wǎng),他們可以在自己的局域網(wǎng)內(nèi)使用相同的A類地址溪掀,這些地址不會(huì)在公網(wǎng)中出現(xiàn)事镣,對(duì)外可以只有少量公網(wǎng)ip

TTL
最大轉(zhuǎn)發(fā)次數(shù)。網(wǎng)絡(luò)層的主要作用是轉(zhuǎn)發(fā)路由揪胃。TTL控制了最大的轉(zhuǎn)發(fā)次數(shù)璃哟,8位組成,理論上最大256次喊递,但一般設(shè)置為32或64次

MAC
每一個(gè)網(wǎng)卡的唯一硬件標(biāo)識(shí)符随闪,由廠商寫在網(wǎng)卡的BIOS里。一般采用6字節(jié)骚勘,48位铐伴,用12個(gè)十六進(jìn)制數(shù)表示,每兩個(gè)之間使用:隔開俏讹,如08:00:20:0A:8C:6D

ARP当宴、RARP
在一個(gè)局域網(wǎng)內(nèi)通過ARP廣播協(xié)議,可以完成IP映射mac地址泽疆,同時(shí)也會(huì)使用高速緩存緩存ip與mac映射户矢。RARP實(shí)現(xiàn)mac與ip地址的映射

IP地址與mac可否互相取代?
前面說了在已經(jīng)mac地址的情況下殉疼,為什么還要發(fā)明IP地址概念(主要是mac地址無法體現(xiàn)網(wǎng)絡(luò))梯浪。那么已經(jīng)了有IP地址的概念是否可以替代mac呢?

我理解很難株依,因?yàn)閕p是設(shè)備接入互聯(lián)網(wǎng)后分配的虛擬地址驱证,此時(shí)是需要一個(gè)唯一id的(也就是mac)。假如我們給每臺(tái)設(shè)備生產(chǎn)時(shí)就寫死一個(gè)ip地址恋腕,那么就又回到最初的難題抹锄,設(shè)備可能不斷的更換網(wǎng)絡(luò),這個(gè)寫死的ip就無法體現(xiàn)子網(wǎng)這個(gè)概念,路由表也因?yàn)闊o法劃分子網(wǎng)而異常龐大伙单。除非哪天技術(shù)可以實(shí)現(xiàn)兩個(gè)設(shè)備id的唯一直連获高,這時(shí)候其實(shí)只有mac就夠了

ICMP
IP協(xié)議是最大努力交付,之所以TCP可以實(shí)現(xiàn)可靠交付吻育,主要還是依靠ICMP協(xié)議念秧,可以反饋IP數(shù)據(jù)報(bào)是否發(fā)送成功。Ping工具是其著名應(yīng)用

traceroute
這是一個(gè)工具布疼,可以看到一個(gè)路由到一個(gè)ip地址的中間各個(gè)環(huán)節(jié)摊趾。實(shí)現(xiàn)也非常巧妙,通過將TTL從1不斷調(diào)大游两,從而實(shí)現(xiàn)一步步的路由跳轉(zhuǎn)

DHCP

接入網(wǎng)絡(luò)要具有一個(gè)IP地址砾层,但我們經(jīng)常在各個(gè)時(shí)候、各個(gè)地點(diǎn)都需要接入網(wǎng)絡(luò)贱案,難道要不斷的設(shè)置IP地址嗎(包括子網(wǎng)掩碼肛炮、網(wǎng)關(guān)、DNS服務(wù)器)宝踪?

不需要的侨糟,DHCP協(xié)議可以給我們自動(dòng)分配臨時(shí)IP地址,過程大概是這樣

  1. DHCP服務(wù)器發(fā)現(xiàn)
  2. DHCP提供可用IP瘩燥,以及租用期
  3. 發(fā)送DHCP請求
  4. DHCP服務(wù)器發(fā)送響應(yīng)

NAT

考慮這個(gè)需求秕重,你們公司擁有上百臺(tái)機(jī)器缚去,但是只有一個(gè)對(duì)外IP带迟,同時(shí)因?yàn)轭A(yù)算和集群機(jī)器經(jīng)常進(jìn)進(jìn)出出(包括手機(jī)等移動(dòng)設(shè)備)那么如何解決這些設(shè)備的IP地址問題呢病袄?

一種流行的技術(shù)方案是NAT(地址轉(zhuǎn)換協(xié)議)最铁,主要原理是這些設(shè)備在公司的內(nèi)網(wǎng)具有一個(gè)內(nèi)網(wǎng)IP地址喉酌,然后在對(duì)外網(wǎng)關(guān)那里利用端口來映射內(nèi)網(wǎng)機(jī)器和端口菩貌,這樣內(nèi)網(wǎng)的各個(gè)機(jī)器可以公用這個(gè)唯一IP的機(jī)器對(duì)外通信

這也會(huì)導(dǎo)致一個(gè)問題讽膏,即從內(nèi)網(wǎng)可以與外部IP建立連接粥烁,但反過來菱魔,外部IP想訪問內(nèi)部機(jī)器卻沒有辦法留荔,這主要是因?yàn)閺膬?nèi)網(wǎng)往外訪問時(shí)NAT轉(zhuǎn)換表中有記錄如何轉(zhuǎn)發(fā)數(shù)據(jù)報(bào),而直接從外往內(nèi)時(shí)卻無法察覺內(nèi)部機(jī)器

解決這個(gè)問題有個(gè)專用術(shù)語澜倦,NAT穿越聚蝶。原理大致是利用一臺(tái)額外的主機(jī),內(nèi)網(wǎng)機(jī)器先與此機(jī)器建立連接藻治,然后該主機(jī)代理內(nèi)網(wǎng)機(jī)器對(duì)外接受連接碘勉,然后轉(zhuǎn)發(fā)給內(nèi)網(wǎng)機(jī)器。國內(nèi)的花生殼網(wǎng)就提供類似服務(wù)

RIP

RIP桩卵,Routing Information Protocol验靡,路由信息協(xié)議倍宾,即網(wǎng)絡(luò)系統(tǒng)如何構(gòu)建并維護(hù)路由表的

大致說一下原理便是,相鄰的路由器之間每個(gè)一段時(shí)間就會(huì)將自己所知道的網(wǎng)絡(luò)信息與相鄰的設(shè)備進(jìn)行交換胜嗓,經(jīng)過一定時(shí)間的交換后高职,某個(gè)IP便在網(wǎng)絡(luò)中“發(fā)布”了,然后當(dāng)路由器收到數(shù)據(jù)報(bào)后辞州,根據(jù)數(shù)據(jù)報(bào)的IP信息和自身路由表的信息決定如何轉(zhuǎn)發(fā)數(shù)據(jù)報(bào)

一般一個(gè)數(shù)據(jù)報(bào)會(huì)在15跳內(nèi)到達(dá)目的地怔锌,所以超過15跳會(huì)被設(shè)置為無效數(shù)據(jù)報(bào)

鏈路層

我們把沿著通信路徑連接相鄰節(jié)點(diǎn)的通信信道稱為鏈路。鏈路層的主體在網(wǎng)絡(luò)適配器中實(shí)現(xiàn)(即網(wǎng)卡)变过,主要作用是將數(shù)據(jù)以幀為單位從一塊網(wǎng)卡發(fā)送給另一個(gè)網(wǎng)卡

但是可能有多個(gè)網(wǎng)卡同時(shí)向一個(gè)網(wǎng)卡發(fā)送數(shù)據(jù)埃元,就有可能出現(xiàn)碰撞,當(dāng)出現(xiàn)數(shù)據(jù)碰撞時(shí)媚狰,碰撞的數(shù)據(jù)便損壞了(0亚情、1混在一起了),所以鏈路層另一個(gè)重要作用是控制流量哈雏,劃分信道

多路訪問協(xié)議

調(diào)度多個(gè)網(wǎng)卡向一塊網(wǎng)卡發(fā)送數(shù)據(jù)幀的協(xié)議叫做多路訪問協(xié)議,一共有幾十種衫生,常見的幾種如下

時(shí)分多路復(fù)用 TDM
即將信道的使用時(shí)間劃分為若干時(shí)間片裳瘪,然后分配給各個(gè)終端,每個(gè)終端依據(jù)所持有的時(shí)間片獨(dú)享信道

頻分多路復(fù)用 FDM
即將信道按照頻率劃分為多個(gè)子信道罪针,然后分配給各個(gè)終端彭羹,每個(gè)終端可以在獨(dú)自的子信道中傳輸數(shù)據(jù)

時(shí)隙ALOHA
簡單來說,就是發(fā)送數(shù)據(jù)前先進(jìn)行載波偵聽泪酱,若發(fā)現(xiàn)其他終端使用信道則繼續(xù)等待派殷;同時(shí),如果在兩個(gè)終端同時(shí)使用信道墓阀,即發(fā)生了碰撞毡惜,則均停止發(fā)送,各自順延一個(gè)隨機(jī)時(shí)間

令牌傳遞
之前的幾種協(xié)議都有可能造成信道的浪費(fèi)斯撮,令牌傳遞是指信道對(duì)應(yīng)一個(gè)唯一的虛擬令牌经伙,拿到令牌的終端才能使用信道,令牌在各個(gè)終端之間傳遞勿锅,當(dāng)某個(gè)終端空閑時(shí)可以將令牌直接傳給下個(gè)終端帕膜,這樣信道就不需要空閑

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市溢十,隨后出現(xiàn)的幾起案子垮刹,更是在濱河造成了極大的恐慌,老刑警劉巖张弛,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荒典,死亡現(xiàn)場離奇詭異酪劫,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)种蝶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門契耿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人螃征,你說我怎么就攤上這事搪桂。” “怎么了盯滚?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵踢械,是天一觀的道長。 經(jīng)常有香客問我魄藕,道長内列,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任背率,我火速辦了婚禮话瞧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘寝姿。我一直安慰自己交排,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布饵筑。 她就那樣靜靜地躺著埃篓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪根资。 梳的紋絲不亂的頭發(fā)上架专,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音玄帕,去河邊找鬼部脚。 笑死,一個(gè)胖子當(dāng)著我的面吹牛桨仿,可吹牛的內(nèi)容都是我干的睛低。 我是一名探鬼主播,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼服傍,長吁一口氣:“原來是場噩夢啊……” “哼钱雷!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起吹零,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤罩抗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后灿椅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體套蒂,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡钞支,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了操刀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烁挟。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖骨坑,靈堂內(nèi)的尸體忽然破棺而出撼嗓,到底是詐尸還是另有隱情,我是刑警寧澤欢唾,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布且警,位于F島的核電站,受9級(jí)特大地震影響礁遣,放射性物質(zhì)發(fā)生泄漏斑芜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一祟霍、第九天 我趴在偏房一處隱蔽的房頂上張望杏头。 院中可真熱鬧,春花似錦沸呐、人聲如沸大州。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至疮茄,卻和暖如春滥朱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背力试。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國打工徙邻, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人畸裳。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓缰犁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親怖糊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子帅容,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

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