目錄
網絡概述:
網絡通信其實就是位於網絡中不同主機上面的2個進程之間的通信。
1.網絡通信的層次
(1)硬件部分:網卡
(2)操作系統底層:網卡驅動
(3)操作系統API:socket接口
(4)應用層:低級(直接基於socket接口編程)
(5)應用層:高級(基於網絡通信應用框架庫)
(6)應用層:更高級(http、網絡控件等)
2.OSI七層網絡模型
3.TCP五層模型:
表示層:解決不同主機的通信的數據格式問題
會話層:建立和管理應用程序之間的通信(連接)(對下層的封裝) 方便用戶使用,自動收發包 報文
傳輸層:拆包組包 TCP:保證數據包的完整性 和 以及處理傳輸過程中可能發生的危險 UDP:發完就完了 報文----拆分成---->包
網絡層:路由和地址解析。選擇適當的網絡節點進行路由。 包 ---->數據幀
數據鏈路層:控制對物理設備的訪問 規定數據如何在不同物理設備上進行傳出 並提供數據糾錯功能。在不可靠的物理設備上提供可靠傳輸 數據數據幀
物理層:定義通信的物理設備的規格。網線接口類型,光纖接口類型,傳輸速率等
因爲Socket通信時候用到了IP和端口,僅這兩個就表明了它用到了網絡層和傳輸層;而且它無視多臺電腦通信的系統差別,所以它涉及了表示層;一般Socket都是基於一個應用程序的,所以會涉及到會話層和應用層。
參考博客:
https://www.cnblogs.com/carlos-mm/p/6297197.html
https://blog.csdn.net/u011774517/article/details/67631439
一、物理層
1.物理層作用
管理維護物理連接,確定傳輸媒體特性,提供比特流傳輸服務,對上層(數據鏈路層)屏蔽物理設備以及協議的差異性。 信息轉 信號
2.物理層概述
信道:傳輸媒介
信息(“aasdf”)-------->數據(二進制數據)----------->信號(可在物理設備上傳輸)
計算機產生的二進制數(基帶信號)無法直接在信道上傳輸,通過調製將基帶信號轉換成可在信道上傳輸的信號。
3.信號調製
基帶調製:將基帶信號轉換成符合信道特性的基帶信號,也稱作編碼
限制碼元傳輸速率的兩個因素是信噪比和帶寬(信道能通過的頻率範圍)
當帶寬一定,信噪比一定,碼元傳輸速率一定時,可讓碼元攜帶更多的數據來提升傳輸速率(一個碼元表示一位二級制數據 --->一個碼元表示m位二級制數據)
4.信道複用技術
碼分複用:擴頻,將1比特轉化成一個比特序列,多用於加密
二、數據鏈路層
1.數據鏈路層作用
在物理層比特流在介質上傳輸是不可靠的,數據鏈路層在物理層的基礎上提供差錯檢測,差錯控制,流量控制。爲網絡層提供一個可靠傳輸。對網絡層屏蔽了不同傳輸介質的差異性。
數據鏈路層信道通信方式:點對點通信 廣播通信(廣播通信需要共享信道協議來協調主機間的數據發送)
2.點對點數據鏈路層三個基本問題
在網絡ip報文的基礎上添加首尾封裝成幀,首尾是爲了確定幀界限,也包含了一些控制信息 幀 = 首 + ip收據報 + 尾。
作用:根據幀定界符 可以確定是否收到的是個完整幀 不是完整幀直接丟棄
保證ip數據報中的比特組合不會出現幀定界符,使用字節填充和字符填充將ip數據包中的幀定界符的字節進行轉義
鏈路上傳輸由於噪聲的干擾導致傳輸的幀數據錯誤,數據鏈路層採用循環冗餘檢測CRC,保證幀的正確性
循環冗餘檢測CRC:通信雙方約定一個比特序列,將待發送數據與約定比特序列進行運算,生成一個幀檢測序列FCS,將FCS添加到數據後一起發送出去。接受端根據FCS校驗是否數據出錯,出錯就丟棄(並不能判斷出是哪些字段出錯)
CRC保證了比特流的正確性,但並不是一個可靠傳輸,還存在丟幀,幀重複,幀亂序到達等情況,所以再次基礎上增加幀序號,確認,重傳機制保證鏈路層爲網絡層提供一個可靠的傳輸。
3.滑動窗口協議
流量控制:平衡收發方傳輸/接受速率 流量控制取決於接收端 防止接收端緩衝區溢出(丟包)
當發送速率 > 接受速率 接收端的緩衝區可能會溢出 導致丟包
若從滑動窗口的觀點來統一看待停等、後退n及選擇重傳三種協議,它們的差別僅在於各自窗口尺寸的大小不同而已。
後退n協議:發送窗口>1,接收窗口=1; 每收到一個幀並且幀序號在窗口內 則回一個確認幀
選擇重傳協議:發送窗口>1,接受窗口>1; 窗口內的幀全部收到 則發送確認幀 並移動窗口
發送窗口大小是根據一段給定時間內鏈路上有多少待確認的幀來選擇的
https://blog.csdn.net/king1991wbs/article/details/7604442
https://blog.csdn.net/do_best_/article/details/79771841
不支持:流量控制 糾錯(糾正比特流錯誤) 多點通信 半或單雙工鏈路
LCP爲鏈路控制協議用於鏈路層的建立,刪除,監控等。如協商MTU(數據最大長度,不是幀長度)
NCP爲網絡控制協議,常用IPCP,IPXCP。用於協商網絡層配置的協議,主要有協商通信的邏輯地址IP是否可用等。
5.以太網
1.無連接 無編號 無確認 無重傳 所有的可靠性都是上層TCP決定
總線型本質就是廣播通信,所以一對一通信只是對mac地址進行校驗,對不是發往本機的幀進行丟棄
總線型網絡:主機發送數據,總線上的所有主機都可收到數據,進行地址對比,如果不是發給自己的就丟棄,是則接收處理。由於信道是共享的,多臺主機’同時‘發送數據,則信號會被破壞掉。
發送前 :在發送數據前檢測是否有其他主機正在發送數據(根據電路上電壓的變化) 若在一段時間內信道是空閒的 則發送數據
發送數據後:等待一個爭用期時間(總線上最長的兩個端點傳輸時間 * 2),如果在這段時間內沒有檢測到碰撞,則認爲發送成功,如果檢測到碰撞,隨機一個時間進行重新傳輸(防止再次同時傳輸發生碰撞)
MAC子層的主要功能包括 數據幀的封裝/卸裝,幀的尋址 鏈路的管理,幀的差錯控制等。MAC子層的存在屏蔽了不同物理鏈路種類的差異性
由於MAC幀是針對局域網所以需要 目標於源地址,PPP協議是點對點的連接不需要地址信息。數據字段最小是46字節,不足補齊
前八個字節不屬於mac幀 是額外信息 前七個自己用於兩邊的網卡進行同步,第八個字節是定界符通知網卡要有MAC幀來了
局域網幀與幀之間有時間間隙,所以不需要結束定界符 也就不需要透明傳輸
集線器:數據轉發 並不緩存數據 將信號放大轉發 減少因爲信號在物理媒介傳輸時信號衰減 導致幀無法解析
用內部器件模擬電纜實際還是總線型 CSMA 工作在主機的網卡上
網橋:分割了衝突域,具有數據過濾功能,兩個端口,每個端口是一個衝突域
緩存數據(AB同時向C發送數據 C只能同時接收一個 則不能立刻接收的由交換機緩存)
地址表(哪個主機連的哪個端口 MAC地址) 表的每個表項目都有生存週期
三、網絡層
1.概述
網絡層是無連接,不可靠儘量交付數據包的服務。由主機的運輸層負責對進程提供可靠性的服務。這樣設計降低了網絡設備的複雜度。
2.IP地址
IP是邏輯地址,用於路由尋址。MAC是硬件地址(每臺主機或路由唯一)用於數據鏈路層幀傳遞的地址
ABC三類地址的主機號全0和全1都保留,主機號全1爲子網廣播地址,主機號全0爲子網網絡地址(一個網段中第一個IP地址爲網絡地址)
子網劃分只是對內,對外來說任然是一個網絡(對外網絡地址還是分類的),局域網內的所有的掩碼相同,每個子網內主機數相同。(對一個X類IP地址域,進行等長劃分子網)
子網掩碼:無論是否劃分子網,子網掩碼 & IP就能得出網絡地址
3.構成超網(無分類編碼)
消除分類IP以及子網的概念,IP格式分爲兩級 網絡前綴+主機號
雖然沒有子網,但是分配到’CIDR地址塊‘後可以進行子網劃分,子網的網絡前綴要比整個地址塊的網絡前綴要長
路由聚合:一個地址塊可以有多個連續的X類的網絡,路由表中使用地址塊(網絡前綴)來路由,減少了路由條目
最長匹配:查找路由表中可能得到不止一條匹配結果,應選擇最長的一條匹配,網絡前綴越長,地址塊越小,路由查詢範圍越小
二插線性查詢:將唯一的網絡前綴,構建一個二差樹,數的每條路徑都是一個唯一網絡前綴
4.IP協議
總長度:數據 + 頭部長度 最大 2^16 - 1 = 65535 不能超過MTU
生存時間:可通過路由數的最大值 每經過一次路由 TTL 減 1 直到減到0 丟棄報文 發送ICMP分組通知主機
協議:數據部分使用的協議 TCP UDP ICMP ....
頭部校驗和:校驗頭部數據的正確性,與數據字段無關,上層進行數據校驗。採用二進制反碼取和
- 原碼就是符號位加上真值的絕對值, 即用第一位表示符號, 其餘位表示值。
- 反碼的表示方法是:正數的反碼是其本身;負數的反碼是在其原碼的基礎上, 符號位不變,其餘各個位取反。
- 補碼的表示方法是:正數的補碼就是其本身;負數的補碼是在其原碼的基礎上, 符號位不變, 其餘各位取反, 最後+1。 (即在反碼的基礎上+1)
5.ARP協議
ARP通過網絡層使用的IP地址獲取到數據鏈路層使用的MAC地址
每臺主機有一張ARP緩存表,保存本局域網中IP到主機/路由的MAC的映射。
超過生存期的表項自動刪除。生存期保證其他當主機的MAC地址改變,可以刪除表項,重新請求,獲得新MAC地址。保證了表的正確性。
當A向B發送數據,若在緩存中找到B的IP那麼不需要ARP進行解析,沒找到則通過ARP協議進行解析
2.鏈路層將ARP分組封裝成幀,目的MAC地址爲“FF-FF-FF-FF-FF-FF”,進行廣播
3.當其他主機收到A的ARP請求,查看是否已經有A的MAC地址,沒有則存入。B收到則回覆我的MAC地址到A(此時幀有目標的MAC地址所以是單播),保存A的MAC地址進緩存表。
路由表中包含:目的網絡號,下一跳的IP地址 沒有指定完整路徑,而是指定下一跳的地址
若路由連接了網絡N,路由直接交付給主機(目的IP地址轉換MAC地址 封裝成幀 交付到目的主機上)
6.ICMP協議
網絡控制協議(Internet control message protocol) 網絡層協議,提供路由/主機差錯或異常報告,提高IP數據報傳輸成功率
重定向:通知主機/路由 下次發送數據包時的路由,爲了選擇一個更快捷的路徑
ping:測試主機是否可發,ping 是發送ICMP,目的主機收到後回ICMP
Tracert:說去主機間完整路徑,源主機發送TTL爲1的報文,第一個路由器收到後,TTL減1丟棄報文(生存期到了),回一個ICMP差錯報文,這樣就可以獲取到第1個路由地址,讓後源主機再依次發送TTL爲 2 3 。。 知道到達目的主機
四、傳輸層
1.概述
作用:提供端對端的連接和數據傳輸服務(進程對進程),網絡層提供的是主機對主機之間的連接服務
2.UDP概述
對應用程序交付下來的數據報添加UDP包頭形成TPDU交付網絡層,無網絡擁塞控制,所以網絡擁堵不會影響其發送速率。
3.TCP詳解
面向連接,字節流傳輸,全雙工,可靠傳輸(確認重傳,流量控制,擁塞控制 校驗和)
TCP的每次傳送報文長度流量窗口大小和網絡擁塞清空進行決定。UDP根據上層發送的數據報大小決定。
1. SYN = synchronization 同步。正如我們上文介紹所說,TCP連接的建立必須要就某些問題達成約定,也就是同步信息
2. PSH = push 發送端通知接收端不要因爲等待額外數據而讓已送達的數據在緩衝區滯留。類似flush()
3. FIN = finish 也就是我們所說的四次揮手。結束的含義
4. ACK = acknowledge 確認報文。你可以簡單認爲是回執,具體是確認哪一部分的數據,需要結合sequence number
最後一次握手,是爲了防止網絡中有延遲的無用連接請求達到服務器端,導致服務器錯誤的分配網絡資源
建立和斷開連接時的最後一個確認包,都是有風險的,但是沒辦法發送確認的確認(這樣確認包無窮無盡)。所以對於確認包丟失的情況,建立了超時重發機制(一定時間收不到確認重新發送)。
確認和重發機制保證兩邊發送和接受信息的同步。 可靠性的另一部分就是減少丟包的可能性。
SYN包中seq = ISN,seq增長速度和等於發送字節速度
seq和ISN:ISN是初始序列號 是一個32位的整數,是一個邊界值,ISN<=seq <=ISN + sendbyte
四元組的ISN = 老連接的seq + 每4毫秒加1, 這樣做可以保證新連接的ISN 一定是大於老連接的seq(發生迴環時出現問題)。這樣就可以辨別新老連接的數據包。
當在一個高速通道上,seq會發生迴環。同一個seq是不同的包。TCP引入時間戳選項,用於解決這種問題。也就是seq+時間戳 作爲包與包之間的鑑別。
https://www.zhihu.com/question/49794331/answer/117922450
爲了避免IP層分片,MSS = MTU - (TCP + IP首部)(40字節)。僅在建立連接時通知,在連接過程中無法感知MSS的變化。自己的約束,而不是整個鏈路的約束。
捎帶ack:ack包和數據包組成一個包一起發送 。等待超時就單獨發ack。
Nagle算法:阻塞等待ack包,收到ack包時,將緩存的所有數據包使用一個包發送。 特點回應快 發送快。但是對於低俗網絡,回覆慢導致發送慢,會又"卡頓''。
兩種方式分別從接收端和發送端入手,壓縮報文的數據量,增加報文的傳輸速率
成塊數據流:單向快速傳輸大塊數據。在未收到確認時發送端可以連續發送多個數據包,但是如果發送端發送包數量不加以控制,可能會導致接收端緩衝區溢出。滑動窗口可以有效解決此問題,窗口用於控制發送端發送速率。
發送端:窗口內的數據是 已經發送未確認 + 可發送。當收到一個確認,窗口左邊界右移,當收到一個ACK通知接收端緩衝區改變,窗口右邊界右移。
接收端:窗口內的數據是 未發送確認 + 可接受。當發送一個確認,窗口左邊界右移,當處理完一個包,窗口右邊界右移。
帶寬時延乘積:把一條信道比作一根水管。帶寬就是水管橫截面積。時延就是水管的往返長度。
4.TCP可靠性
發送方通過維持一個發送滑動窗口來確保不會發生由於發送方報文發送太快接收方無法及時處理的問題。此時發送方的報文分爲四類, 第一類是已經發送並且得到接收方確認的報文,第二類是已經發送但是沒有接收到確認的報文,第三類是發送方還沒發送,但是滑動窗口還足夠巨大,允許被髮送的報文, 第四類是還沒發送並且窗口已經被佔滿,不允許發送的報文。 一般來說,滑動窗口的最左端都是介於第一類跟第二類報文的分界線,最右端是第三類跟第四類報文的分界線。
a、停等協議。 滑動窗口的大小爲1, 每個發送報文都要等到被確認以後,發送方纔繼續發送下一個報文。
b、後退n步協議。 該協議下,滑動窗口大於1,發送方可以一直髮送報文,但是當接收到接收方發送的三個連續的同一序列號的ACK報文時,說明該序列號的報文是已經丟失的,那麼此時重發該丟失報文以及該報文以後的報文(包括那些已經發送的)。
c、選擇重傳。在後退n步協議當中,如果某個報文丟失。那麼將要重新發送這個丟失報文及以後的所有報文(包括已經發送的),選擇重傳協議不用做此要求,只要重新發送丟失的報文即可。
重傳時間選擇:通過每次發包 ---- 到---- 收到確認往返時間RRT,動態計算重傳時間。
擁塞是整個通信鏈路,表示整個鏈路的擁堵情況,擁塞窗口是通信過程中不斷的試探出的一個界限值。
滑動窗口是流量控制,所謂流量控制,是端對端的行爲。只對發送和接受端的能力進行一個平衡。
ssthresh:動擁塞避免算法的界限值 上次傳輸最大的未發生擁塞的值。
擁塞嚴重:分組丟失引起超時。 然後降低cwnd使網絡能恢復到順暢的情況。cwnd降低到1。
擁塞不嚴重:連續發送的數據包中某一個丟失,發送端收到多個重複的確認包。cwnd降低爲原值一半。
無論擁塞情況如何只要判定發生了擁塞,都將ssthresh變爲一個安全值( ssthresh = ssthresh /2)。
收到連續相同確認。接收端無法判斷是亂序到達,還是丟失報文。但是當收到了三個相同的確認,那接收端就認爲報文丟失。 立刻重傳,無需等待超時重傳。
超時導致重傳,這時認爲網絡堵塞,接近癱瘓。將cwnd = 1,極大的降低發送速率, 使網絡能夠恢復通常狀態。
收到連續三個重複的確認包,這是認爲網絡發送一點擁堵,但是沒有癱瘓。超時時將cwnd設置 = 1是爲了讓網絡恢復。而發生一點擁堵只需要將cwnd設置爲ssthresh,這樣網絡波動不會很大。如果將cwnd降低爲1,那麼這是網絡利用率較低。
答案:在檢測到丟包時,窗口爲cwnd。這時候網絡中最多有cwnd個包(in_flight < cwnd )。每當收到
一個重複的ACK,則說明有數據包離開網絡,達到接收端了。那麼,此時網絡中還可以再容納1個包。由
於發送端滑動窗口不能移動了,所以如果想保持in_flight,可以使cwnd++。
這樣一來,可以提高吞吐量。而實際上,在fast recovery期間發送的新數據包比起發生丟包的cwnd來說,
TCP核心概念-慢啓動,ssthresh,擁塞避免,公平性的真實含義(一定要看)
https://www.2cto.com/net/201605/509810.html
2*N = r*RTT 實際的帶寬總是趨向於ssthresh的2倍
堅定定時器:收到0窗口後,用於週期性探尋窗口值變化。應用於當接收方發送窗口變化ack(發送方是不回包的),這時接收方開始等待收數據。但這個ack包丟失了,導致發送方在等待通知窗口變化。堅定定時器就是解決互相等待的情況。
路徑MTU:當包不可分片,包大小超過設備的MTU,則設備會返回一個ICMP報文。通過這種機制探尋出路徑MTU。(這個和通過ICMP打印那個路徑相似)
數據校驗:避免非主觀因素造成的數據錯誤(防君子而防不了小人)
客戶端異常關閉,如果服務器向其發送消息會收到一個RST回覆。但是如果服務器沒有發送數據包就會一直認爲這個連接存在,服務器會一直維護一個連接狀態佔用資源。所以TCP引入保活機制,每2h進行一次探查,釋放不存在的連接。
保活缺陷:檢測週期長2h 只能檢測到端到端的傳輸層通暢,也就是端到端可以發送和接受數據。但是應用層可能處於死鎖等異常狀態,保活是檢測不到的。所以需要在應用層實現心跳機制。
五、應用層
規定應用進程通信所遵守的協議
1.DNS解析域名
客戶端先檢查本地是否有對應的IP地址,若找到則返回響應的IP地址。若沒找到則請求上級DNS服務器,直至找到或到根節點。
DNS中遞歸查詢和迭代查詢的區別
1、 遞歸查詢: 一般客戶機和服務器之間屬遞歸查詢,即當客戶機向DNS服務器發出請求後,若DNS服務器本身不能解析,則會向另外的DNS服務器發出查詢請求,得到結果後轉交客戶機。
2、 迭代查詢(反覆查詢): 一般DNS服務器之間屬迭代查詢,如:若DNS2不能響應DNS1的請求,則它會將DNS3的IP給DNS2,以便其再向DNS3發出請求。
以一個DNS請求解析爲例:
1)用戶發起域名請求到dnsA,這時dnsA有這個記錄,將結果返回給用戶,這個過程是遞歸查詢。
2)用戶發起域名請求到dnsA,這時dns沒有這個記錄,它去向dnsB問有沒有這個記錄,以此類推,直到把結果返回給用戶,這個過程是遞歸查詢。
3)用戶發起域名請求到dnsA,這時dnsA沒有這個記錄,它告訴用戶,我沒有這個記錄,你去問dnsB吧,這個過程是迭代查詢。
2.FTP
異構網絡主機間進行文件傳輸,屏蔽主機系統處理文件的差異性
本身不提供可靠的服務,而是由TCP提供
兩條TCP連接:控制連接 數據連接
控制連接 : 訪問控制 登陸驗證..
數據連接 : 傳輸數據
用FTP對文件進行操作時是拷貝整個文件,如 A 主機修改B主機中文件,將B主機文件拷貝到A,修改後再拷貝回B。
TFTP:UDP進行傳輸 分塊傳輸 序列號 重傳
3.Telnet
遠程終端控制協議 建立TCP連接,將操作轉換成NVT格式傳輸到遠程,遠程還原NVT到操作,將操作結果轉換成NVT格式傳輸到本地,本地顯示操作結果。
4.WWW萬維網
WWW萬維網:從一個站點獲取另一個站點信息 超文本(除了文本還有圖片視頻等) TCP
URL:資源定位符 inerter net定位資源的地址
URL = 協議://主機ip :端口 / 路徑
請求一個網頁過程:
建立HTTP連接 : 域名解析 + 建立連接
請求網頁
返回網頁信息
代理服務器(高速緩存):緩存網頁內容,無需重新建立連接。
翻牆:通過中間服務器訪問資源
兩類報文:
請求報文 客戶 到 服務器
響應報文 服務器 到 客戶
請求報文 方法:
get : 請求資源
delete : 刪除資源
put : 保存資源
post : 追加信息(修改)
cookies :服務器爲用戶生成一個唯一的標識碼,返回給主機,主機下次再訪問這個服務器時就用這個標識碼。
html:萬維網使用的一種語言,規定了網頁的排版命令。
動態網頁:提取信息 生成網頁
CGI:定義動態文檔如何創建
DHCP:動態主機配置,上網之前分配ip等必要信息。UDP報文
DHCP服務器分配的Ip是臨時的。主機自動申請延長租用期。
主機---廣播--->中繼代理服務器------------單播-------->DHCP服務器
5.網絡安全
被動攻擊:截獲
主動攻擊:篡改 中斷 僞造
數據加密:利用加密/解密 祕鑰 進行數據處理 防止數據被他人監控 解析
對稱加密體系:所用加密解密祕鑰是一個,解密是加密算法的逆運算。
非對稱加密: 每個用戶有私鑰 和公鑰,公鑰可被他人知道。私鑰只有自己持有。 A 向 B發送數據,A先將自己的公鑰發送給B,B將自己的公鑰發送給A。這時兩者都有彼此公鑰,向對方發送數據時,用公鑰加密即可。
他人無法解密,引用沒有私鑰。
數字簽名:A向B發送報文,爲了驗證報文確實是A發的。A 將明文 通過A的私鑰加密作爲簽名,發送給B後,B將簽名使用A的公鑰解密。如果解密後的明文 和 包中明文一樣則可以驗證是A發送的數據。
鑑別:鑑別通信雙方身份,鑑別報文是否被篡改
報文鑑別:
如果只是 報文 + MD5 那麼他人也可以僞造報文內容,將自己的報文也組裝成 報文 + MD5 格式。 所以發送時要對MD5進行加密,這樣他人就無法僞造了。
實體鑑別:整個通信過程只進行一次身份驗證
防火牆:網絡的訪問控制,數據過濾等
驗證內容是否被篡改使用 散列函數(A)
驗證身份以及內容的私有性使用 祕鑰進行加密
六、學習資料下載地址PFD+視頻+圖解
地址:https://pan.baidu.com/s/1a1g2xJCk6yEhho2IskqTGg
提取碼:q1nq