https 與 http、TCP/IP、Socket網絡通信

一、https 與 http

  1. HTTPS
    HTTPS(全稱:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全為目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,因此加密的詳細內容就需要SSL。
    https:URL 表明它使用了HTTP,但HTTPS存在不同于HTTP的默認端口及一個加密/身份驗證層(在HTTP與TCP之間)。
    HTTPS使用端口443,而不是像HTTP那樣適用端口80來和TCP/IP 進行通信。SSL使用40位關鍵字作為RC4流加密算法,這對于商業信息的加密是合適的。HTTPS和SSL支持使用X.509數字認證,如果需要的話用戶可以確認發送者是誰。
    主要作用分為兩種:
  • 一種是建立一個信息安全通道,來保證數據傳輸的安全。
  • 另一種就是確認網站的真實性,凡是使用https的網站,都可以通過點擊瀏覽器地址欄的鎖頭標志來查看網站認證之后的真實信息。也可以通過CA 機構頒發的安全簽章來查詢。
  1. HTTP
    超文本協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最為廣泛的一種網絡協議。Http定義了瀏覽器(即萬維網客戶進程)怎樣向萬維網服務器請求萬維網文檔,以及服務器怎么把文檔傳給瀏覽器。Http是萬維網可靠的交換文件(包括文本、圖像、聲音、以及視頻等)的基礎。
    HTTP是一個屬于應用層的面向對象的協議,由于其簡捷、快速的方式,適用于分布式超媒體信息系統。它于1990年提出,經過幾年的使用與發展,得到不斷地完善和擴展。
    HTTP協議的主要特點:
  • 支持C/S(客戶/服務器)模式。
  • 簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST,每種方法規定了客戶與服務器聯系的類型不同。由于HTTP協議簡單,使得HTTP服務器的程序規模小,因而通信速度很快。
  • 靈活:HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。
  • 無連接:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,并收到客戶的應答后,即斷開連接。采用這種方式可以節省傳輸時間。
  • 無狀態:HTTP協議是無狀態協議,無狀態是指協議對于事務處理沒有記憶能力。缺少狀態意味著如果后續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。
  1. HTTPS 和 HTTP 的區別
    超文本傳輸協議HTTP協議被用于在Web瀏覽器和服務器之間傳遞信息。
  • HTTP協議以明文方式發送內容,不提供任何方式的數據加密,如果攻擊者截取了Web瀏覽器和網站服務器之間的傳輸報文,就可以直接讀懂其中的信息,因此HTTP協議不適合傳輸一些敏感信息,比如信用卡號、密碼等。
  • 為了解決HTTP協議的這一缺陷,需要使用另一種協議:安全套接字層超文本傳輸協議HTTPS。為了數據傳輸的安全,HTTPS在HTTP的基礎上加入了SSL協議,SSL依靠證書來驗證服務器的身份,并為瀏覽器和服務器之間的通信加密。

HTTPS和HTTP的區別:

  • https 用的 443 端口, http 用的 80 端口
  • 采用 https 的服務器必須從CA(Certificate Authority)申請一個用于證明服務器用途類型的證書。
  • http是超文本傳輸協議,信息是明文傳輸,https 則是具有安全性的ssl加密傳輸協議。
  • http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。

二、TCP/IP、Socket網絡通信

  1. 網絡間的進程通信與Socket
    TCP/IP協議族中網絡層的IP地址可以唯一標識網絡中的主機,而傳輸層的協議+端口可以唯一標識主機中的應用程序(進程)。這樣利用這三元組就可以標識網絡的進程了,網絡中的進程通信就可以利用這個標志與其它進程進行交互。
    Socket通常也稱作"套接字",用于描述IP地址和端口,是一個通信鏈的句柄,可以用來實現不同虛擬機或不同計算機之間的通信。在Internet上的主機一般運行了多個服務軟件,同時提供幾種服務。每種服務都打開一個Socket,并綁定到一個端口上,不同的端口對應于不同的服務。就目前而言,幾乎所有的應用程序都是采用Socket來實現網絡進程之間的通信。
    Socket所支持的協議種類也不光TCP/IP一種,因此兩者之間是沒有必然聯系的。在Java環境下,Socket編程主要是指基于TCP/IP協議的網絡編程。
  2. TCP、UDP
    TCP是Tranfer Control Protocol的簡稱,是一種面向連接的保證可靠傳輸的協議。通過TCP協議傳輸,得到的是一個順序的無差錯的數據流。發送方和接收方的成對的兩個socket之間必須建立連接,需要連接時間,以便在TCP協議的基礎上進行通信。
    優缺點和應用場景:
    (1)可靠穩定,傳遞數據前,會有三次握手建立連接,面向有連接。
    (2)傳遞數據時,有確認、窗口(流量控制)、重傳、擁塞控制。確認機制保證接收端每收到一個正確包都會回應給發送端,超時或者數據包不完整的話發送端會重傳。
    缺點:
    (1)整體來說傳輸慢,效率低,占用系統資源高。
    (2)傳遞數據前,建立連接需要耗時,傳遞數據時,確認、重傳、擁塞等會消耗大量時間以及CPU和內存等硬件資源。
    (3)因為有確認機制、三次握手等機制,容易被人利用,實現DOS 、DDOS攻擊。
    當對網絡通訊質量有要求的時候,比如:整個數據要準確無誤的傳遞給對方,這往往用于一些要求可靠的應用,比如HTTP、HTTPS、FTP等傳輸文件的協議,POP、SMTP等郵件傳輸的協議。

UDP是User Datagram Protocol的簡稱,是一種無連接的協議,每個數據報都是一個獨立的信息,包括完整的源地址或目的地址,因此無需建立發送方和接收方的連接,它在網絡上以任何可能的路徑傳往目的地,因此能否到達目的地,到達目的地的時間以及內容的正確性、次序性都是不能被保證的。而且被傳輸數據報必須限定在64k以內。

  1. Socket通信

  2. 利用Socket建立連接的過程
    套接字之間的連接過程分為三個步驟:服務器監聽,客戶端請求,連接確認。
    (1)服務器監聽:服務器端套接字處于等待連接的狀態,實時監控網絡狀態,等待客戶端的連接請求。
    (2)客戶端請求:指客戶端的套接字提出連接請求,要連接的目標是服務器端的套接字。為此,客戶端的套接字必須首先描述它要連接的服務器的套接字,指出服務器端套接字的地址和端口號,然后就向服務器端套接字提出連接請求。
    (3)連接確認:當服務器端套接字監聽到或者說接收到客戶端套接字的連接請求時,就響應客戶端套接字的請求,建立一個新的線程,把服務器端套接字的描述發給客戶端,一旦客戶端確認了此描述,雙方就正式建立連接。而服務器端套接字繼續處于監聽狀態,繼續接收其他客戶端套接字的連接請求。

  3. Socket的Java實現
    服務端:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(30000);
        while (true){
            Socket s = ss.accept();
            PrintStream ps = new PrintStream(s.getOutputStream());
            BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
            BufferedReader bf;
            String line = null;
            String client = null;
            while ((line = br.readLine())!=null){
                System.out.println(line);
                bf = new BufferedReader(new InputStreamReader(System.in));
                client = bf.readLine();
                    if (line.equals("liujc")){
                        ps.println(client+"CXH端午節快樂");
                    }else {
                        ps.println(client);
                    }
            }
            ps.close();
            s.close();
        }
    }
}

客戶端:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
public class Client {
    public static void main(String[] args) throws IOException {
        System.out.println("Hello World!");
        Socket socket = new Socket("127.0.0.1",30000);
        PrintStream ps = new PrintStream(socket.getOutputStream());
        String context = null;
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//        context = bf.readLine();
        while ((context = bf.readLine()) != null){
            ps.println(context);
            String line = br.readLine();
            System.out.println("來自服務器的數據:"+line);
        }
        br.close();
        socket.close();
    }
}

效果圖如下:
客戶端:


客戶端.png

服務端:

服務端.png
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,578評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,701評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,691評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,974評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,694評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,026評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,015評論 3 450
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,193評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,719評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,442評論 3 360
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,668評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,151評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,846評論 3 351
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,255評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,592評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,394評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,635評論 2 380

推薦閱讀更多精彩內容