主頁 > 軟體設計 > 網路傳輸程序、參考模型、TCP/IP、http、https

網路傳輸程序、參考模型、TCP/IP、http、https

2021-07-21 12:59:23 軟體設計

OSI七層概念模型

在這里插入圖片描述

  1. 應用層:負責解決業務問題
  2. 表示層:負責把網路中的訊息轉換成應用層可以讀取的訊息
  3. 會話層:負責建立會話、握手、維持連接、關閉
  4. 傳輸層:負責解決行程與行程之間的通信,例如TCP保證報文的可達性和流量的控制
  5. 網路層:負責解決廣域網(Internet)中主機之間資料的傳遞
  6. 資料鏈路層:負責局域網中根據MAC地址連接的相應的交換機/路由器進行報文的轉發
  7. 物理層:物理傳輸介質

TCP/IP模型對照

在這里插入圖片描述
在這里插入圖片描述

分層模型的優點在于當前層只需要考慮與其相鄰層的對接互動,即每一層只為其之上的層服務,并使用在其之下的層所提供的服務,而不需要考慮其相鄰層之外的其他層做了什么,分層模型的缺點在于不同層之間資料互動需要耗費更多的時間,從而影響網路性能,

TCP協議

傳輸控制協議(TCP,Transmission Control Protocol)是一種面向連接的、可靠的、基于位元組流的傳輸層通信協議

特點:

  • 基于鏈接的:傳輸資料之前需要建立鏈接
  • 全雙工:雙向傳輸(請求回應)
  • 位元組流:不限制請求大小,打包成報文段,保證有序接受,重復報文自動丟棄
  • 流量快取:解決雙方處理能力的不匹配
  • 可靠的傳輸服務:保證可達,丟包時通過重發機制實作可靠
  • 擁塞控制:防止網路出現惡性擁塞

報文頭部

在這里插入圖片描述

一些查看資訊命令

  • 查看網路狀態,netstat -natp/在mac中需要使用netstat -tlp tcp netstat -tlp udp 來指定其后使用的協議狀況,

    • n:拒絕顯示別名,能顯示數字的全部轉化為數字禁止轉換,localhost這種形式顯示成ip形式
    • t (tcp) 僅顯示tcp相關選項
    • p:顯示行程的 PID 和名稱
  • 抓包:抓80埠的包:tcpdump --n -i eth0 port 80
    抓80埠的包或者apr請求的包:tcpdump --n -i eth0 port 80 or arp

    • –n:顯示ip形式,不以localhost方式顯示
    • -i:指定網卡
    • port:指定埠
  • IP地址:IP地址就可以訪問到每臺主機,相當于主機的唯一身份ID

  • 掩碼: 子網掩碼只有一個功能,就是將IP地址劃分為網路地址和主機地址兩部分, 如同現實生活中的通訊地址,可以看作省市部分和具體門牌號部分,相同的IP地址,但掩碼不一樣,則指向的網路部分和主機部分不一樣,如IP地址192.168.1.11,255.255.255.0 的掩碼表示網路地址192.168.1,主機地址是1;255.255.0.0 的掩碼表示網路地址192.168,主機部分是1.1 ,

  • 網關:一個網路連接到另一個網路的“關口”

  • dns:進行域名(domain name)和與之相對應的IP地址 (IP address)轉換的服務器,

http協議

HTTP協議(HyperText Transfer Protocol,超文本傳輸協議):是一種無狀態的,以請求/應答方式運行的協議,他使用可以擴展的語意和自描述訊息格式,與基于網路的超文本資訊系統(html)靈活的互動

  • 傳輸協議實際是交給TCP協議來完成的
  • 無狀態:并不會存盤用戶的資訊;如果連接意外斷開,整個會話就會丟失,重新連接之后一般需要從頭開始
  • 請求/應答:一次請求對應一次回應
  • 可擴展:可以自定義擴展一些head欄位等
  • 自描述: 訊息體可以是音頻視頻、文本、圖片等(Content-type)

HTTP協議解決了什么問題

  • Form Follows Function 形式服務于功能

  • 解決的是人與機器之間高效的資訊互動

報文格式

http請求與回應報文基本相同,由4大部分組成

  • 起始行(start line):描述請求與回應的基本資訊(請求行或狀態行)
  • 訊息報頭(四種:普通報頭,請求報頭,回應報頭,物體報頭)
  • 空行
  • 訊息正文

請求報文

在這里插入圖片描述

  • 請求方法:如GET/HEAD/PUT/POST,表示對資源的操作;
  • 請求目標:通常是一個URI,標記了請求方法要操作的資源;
  • 版本號:表示報文使用的HTTP協議版本

回應報文

在這里插入圖片描述

  • 版本號:表示報文使用的HTT協議版本;
  • 狀態碼:一個三位數,用代碼的形式表示處理的結果,比如200是成功,301/302是重定向,404是NOT FOUND,500是服務器錯誤;
  • 原因:作為數字狀態碼補充,是更詳細的解釋文字,幫助人理解原因

HTTP頭欄位

頭部欄位是key-value的形式,key和value之間用"“分隔,最后用CRLF換行表示欄位結束,比如前后分離時經常遇到的要與后端協商傳輸資料的型別"Content-type:application/json”,這里key就是"Content-type",value就是"applicationjson",HTTP頭欄位非常靈活,不僅可以使用標準里的Host,Connection等已有頭,也可以任意添加自定義頭,這就給HTTP協議帶來了無限的擴展可能

頭欄位注意事項

  • 欄位名不區分大小寫,欄位名里不允許出現空格,可以使用連字符"-",但不能使用下劃線"_"(有的服務器不會決議帶 " _ " 的頭欄位),欄位名后面必須緊接著":",不能有空格,而 “:” 后的欄位值前可以有多個空格;
  • 欄位的順序是沒有意義的,可以任意排列不影響語意;
  • 欄位原則上不能重復,除非這個欄位本身的語意允許,例如Set-Cookie,

常用頭欄位

HTTP協議中有非常多的頭欄位,但基本上可以分為四大類:

  • 請求欄位:請求頭中的頭欄位;如Host,Referer
  • 回應欄位:回應頭中的頭欄位,如:Server
  • 通用欄位:在請求頭和回應頭里都可以出現,如Content-type,Connection;

請求程序

在這里插入圖片描述

HTPS協議

由于HTTP天生“明文"的特點,整個傳輸程序完全透明,任何人都能夠在鏈路中截獲、修改或者偽造請求/回應報文,資料不具有可信性,例如:一個網站時沒有廣告的,打開后全是廣告,其實就是被劫持程序中修改了

因此就誕生了為安全而生的HTTPS協議使用HTPS時,所有的HTTP請求和回應在發送到網路之前,都要進行加密,

https利用摘要演算法、對稱加密演算法、非對稱加密演算法來完成的
在這里插入圖片描述
在這里插入圖片描述

我們為什么需要HTTPS?

主要有三個原因:

  1. 保護隱私:所有資訊都是加密傳播,第三方無法竊聽資料,如果使用HTTP明文傳輸資料的話,很可能被第三方劫持資料,那么所輸入的密碼或者其他個人資料都被暴露在他人面前,后果可想而知,
  2. 資料完整性:一旦第三方篡改了資料,接收方會知道資料經過了篡改,這樣便保證了資料在傳輸程序中不被篡改 —— 資料的完整性,
  3. 身份認證:第三方不可能冒充身份參與通信,因為服務器配備了由證書頒發機構(Certificate Authority,簡稱CA)頒發的安全證書,可以證實服務器的身份資訊,防止第三方冒充身份,(也有少數情況下,通信需要客戶端提供證書,例如銀行系統,需要用戶在登錄的時候,插入銀行提供給用戶的USB,就是需要客戶端提供證書,用來驗證客戶的身份資訊,)

Web架構的七大關鍵屬性

  • 性能:影響高可用的關鍵因素

  • 可伸縮性:支持部署可以互相互動的大量組件

  • 簡單性:易理解、易實作、易驗證

  • 可見性:對兩個組件間的互動進行監視或者仲裁的能力,如快取、分層設計等

  • 可移植性:在不同的環境下運行的能力

  • 可靠性:出現部分故障時對整體的影響程度

  • 可修改性:對系統做出修改的難易程度,由可進化型、可定制性、可擴展性、可配置性、可重用性構成

五種架構風格

  • 資料流風格 Data-flow Styles
    優點:簡單性、可進化性、可擴展性、可配置性、可重用性
  • 復制風格 Replication Styles
    優點:用戶可察覺的性能、可伸縮性,網路效率、可靠性也可以得到提升
  • 分層風格 Hierarchical Styles
    優點:簡單性、可進化性、可伸縮性
  • 移動代碼風格 Mobile Code Styles
    優點:可移植性、可擴展性、網路效率
  • 點對點風格 Peer-to-Peer Styles
    優點:可進化性、可重用性、可擴展性、可配置性

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/289226.html

標籤:其他

上一篇:解決Linux服務中WebSocket報錯之:/lib64/libc.so.6: version `GLIBC_2.17‘ not found

下一篇:基于PHP 搭建高并發分布式集群系統思路

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 面試突擊第一季,第二季,第三季

    第一季必考 https://www.bilibili.com/video/BV1FE411y79Y?from=search&seid=15921726601957489746 第二季分布式 https://www.bilibili.com/video/BV13f4y127ee/?spm_id_fro ......

    uj5u.com 2020-09-10 05:35:24 more
  • 第三單元作業總結

    1.前言 這應該是本學期最后一次寫作業總結了吧。總體來說,對作業的節奏也差不多掌握了,作業做起來的效率也更高了。雖然和之前的作業一樣,作業中都要用到新的知識,但是相比之前,更加懂得了如何利用工具以及資料。雖然之間卡過殼,但總體而言,這幾次作業還算完成的比較好。 2.作業程序總結 相比前兩個單元,此單 ......

    uj5u.com 2020-09-10 05:35:41 more
  • 北航OO(2020)第四單元博客作業暨課程總結博客

    北航OO(2020)第四單元博客作業暨課程總結博客 本單元作業的架構設計 在本單元中,由于UML圖具有比較清晰的樹形結構,因此我對其中需要進行查詢操作的元素進行了包裝,在樹的父節點中存盤所有孩子的參考。考慮到性能問題,我采用了快取機制,一次查詢后盡可能快取已經遍歷過的資訊,以減少遍歷次數。 本單元我 ......

    uj5u.com 2020-09-10 05:35:48 more
  • BUAA_OO_第四單元

    一、UML決議器設計 ? 先看下題目:第四單元實作一個基于JDK 8帶有效性檢查的UML(Unified Modeling Language)類圖,順序圖,狀態圖分析器 MyUmlInteraction,實際上我們要建立一個有向圖模型,UML中的物件(元素)可能與同級元素連接,也可與低級元素相連形成 ......

    uj5u.com 2020-09-10 05:35:54 more
  • 6.1邏輯運算子

    邏輯運算子 1. && 短路與 運算式1 && 運算式2 01.運算式1為true并且運算式2也為true 整體回傳為true 02.運算式1為false,將不會執行運算式2 整體回傳為false 03.只要有一個運算式為false 整體回傳為false 2. || 短路或 運算式1 || 運算式2 ......

    uj5u.com 2020-09-10 05:35:56 more
  • BUAAOO 第四單元 & 課程總結

    1. 第四單元:StarUml檔案決議 本單元采用了圖模型決議UML。 UML檔案可以抽象為圖、子圖、邊的邏輯結構。 在實作中,圖的節點包括類、介面、屬性,子圖包括狀態圖、順序圖等。 采用了三次遍歷UML元素的方法建圖,第一遍遍歷建點,第二、三次遍歷設定屬性、連邊,實作圖物件的初始化。這里借鑒了一些 ......

    uj5u.com 2020-09-10 05:36:06 more
  • 談談我對C# 多型的理解

    面向物件三要素:封裝、繼承、多型。 封裝和繼承,這兩個比較好理解,但要理解多型的話,可就稍微有點難度了。今天,我們就來講講多型的理解。 我們應該經常會看到面試題目:請談談對多型的理解。 其實呢,多型非常簡單,就一句話:呼叫同一種方法產生了不同的結果。 具體實作方式有三種。 一、多載 多載很簡單。 p ......

    uj5u.com 2020-09-10 05:36:09 more
  • Python 資料驅動工具:DDT

    背景 python 的unittest 沒有自帶資料驅動功能。 所以如果使用unittest,同時又想使用資料驅動,那么就可以使用DDT來完成。 DDT是 “Data-Driven Tests”的縮寫。 資料:http://ddt.readthedocs.io/en/latest/ 使用方法 dd. ......

    uj5u.com 2020-09-10 05:36:13 more
  • Python里面的xlrd模塊詳解

    那我就一下面積個問題對xlrd模塊進行學習一下: 1.什么是xlrd模塊? 2.為什么使用xlrd模塊? 3.怎樣使用xlrd模塊? 1.什么是xlrd模塊? ?python操作excel主要用到xlrd和xlwt這兩個庫,即xlrd是讀excel,xlwt是寫excel的庫。 今天就先來說一下xl ......

    uj5u.com 2020-09-10 05:36:28 more
  • 當我們創建HashMap時,底層到底做了什么?

    jdk1.7中的底層實作程序(底層基于陣列+鏈表) 在我們new HashMap()時,底層創建了默認長度為16的一維陣列Entry[ ] table。當我們呼叫map.put(key1,value1)方法向HashMap里添加資料的時候: 首先,呼叫key1所在類的hashCode()計算key1 ......

    uj5u.com 2020-09-10 05:36:38 more
最新发布
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:20:47 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:20:25 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:20:17 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:20:10 more
  • 【中介者設計模式詳解】C/Java/JS/Go/Python/TS不同語言實作

    * 中介者模式是一種行為型設計模式,它可以用來減少類之間的直接依賴關系,
    * 將物件之間的通信封裝到一個中介者物件中,從而使得各個物件之間的關系更加松散。
    * 在中介者模式中,物件之間不再直接相互互動,而是通過中介者來中轉訊息。 ......

    uj5u.com 2023-04-20 08:19:44 more
  • 露天煤礦現場調研和交流案例分享

    他們集團的資訊化公司及研究院在一個礦區正在做智能礦山的統一平臺的 試點,專案投資大概1億,包括了礦山的各方面的內容,顯示得我們這次交流有點多余。他們2年前開始做智能礦山的規劃,有很多煤礦行業專家的加持,他們的描述是非常完美,但是去年底應該上線的平臺,現在還沒有看到影子。他們確實有很多場景需求,但是被... ......

    uj5u.com 2023-04-20 08:19:07 more
  • 《社區人員管理》實戰案例設計&個人案例分享

    設計是一個讓人夢想成真程序,開始編碼、測驗、除錯之前進行需求分析和架構設計,才能保證關鍵方面都做正確 ......

    uj5u.com 2023-04-20 08:18:57 more
  • 軟體架構生態化-多角色交付的探索實踐

    作為一個技術架構師,不僅僅要緊跟行業技術趨勢,還要結合研發團隊現狀及痛點,探索新的交付方案。在日常中,你是否遇到如下問題 “ 業務需求排期長研發是瓶頸;非研發角色感受不到研發技改提效的變化;引入ISV 團隊又擔心質量和安全,培訓周期長“等等,基于此我們探索了一種新的技術體系及交付方案來解決如上問題。 ......

    uj5u.com 2023-04-20 08:18:49 more
  • 05單件模式

    #經典的單件模式 public class Singleton { private static Singleton uniqueInstance; //一個靜態變數持有Singleton類的唯一實體。 // 其他有用的實體變數寫在這里 //構造器宣告為私有,只有Singleton可以實體化這個類! ......

    uj5u.com 2023-04-19 08:42:51 more
  • 【架構與設計】常見微服務分層架構的區別和落地實踐

    軟體工程的方方面面都遵循一個最基本的道理:沒有銀彈,架構分層模型更是如此,每一種都有各自優缺點,所以請根據不同的業務場景,并遵循簡單、可演進這兩個重要的架構原則選擇合適的架構分層模型即可。 ......

    uj5u.com 2023-04-19 08:42:41 more