'java網絡編程(1)基礎知識'

"
"
java網絡編程(1)基礎知識

一. 概述

我們知道計算機之間的通信要經過一系列複雜的過程,計算機之間通過傳輸介質、通信設施和網絡通信協議互聯,實現資源共享和數據傳輸。而我們的網絡編程就是使用程序使互聯網的兩個(或多個)計算機之間進行數據傳輸。當然java語言,為了實現兩個計算機之間的數據傳輸,提供了一系列的接口,使得開發人員可以方便的實現。

不過在正式開始代碼編寫之前就先看看一些通信的基本知識。

二 、網絡體系結構

計算機之間的通信要經過一系列複雜的過程,必須將這兩臺計算機的物理邏輯和通信邏輯好好的規劃好。為此我們先看看計算機網絡的層次模型。然後再進行分析。

"
java網絡編程(1)基礎知識

一. 概述

我們知道計算機之間的通信要經過一系列複雜的過程,計算機之間通過傳輸介質、通信設施和網絡通信協議互聯,實現資源共享和數據傳輸。而我們的網絡編程就是使用程序使互聯網的兩個(或多個)計算機之間進行數據傳輸。當然java語言,為了實現兩個計算機之間的數據傳輸,提供了一系列的接口,使得開發人員可以方便的實現。

不過在正式開始代碼編寫之前就先看看一些通信的基本知識。

二 、網絡體系結構

計算機之間的通信要經過一系列複雜的過程,必須將這兩臺計算機的物理邏輯和通信邏輯好好的規劃好。為此我們先看看計算機網絡的層次模型。然後再進行分析。

java網絡編程(1)基礎知識

從上面這張圖我們對計算機之間的通信特點進行整理一下:

(1)計算機之間的網絡通信被分解為多個層,層與層之間用接口連接。

(2)通信的雙方具有相同的層次,層次實現的功能由協議數據單元(PDU)來描述。

(3)不同系統中的同一層構成對等層,對等層之間通過對等層協議進行通信。

(4)在通信的時候數據必須由一層依次傳遞到下一層,不能跨級傳輸。

為了促進計算機網絡的發展,國際標準化組織ISO在現有網絡的基礎上,提出了不基於具體機型、操作系統或公司的網絡體系結構,稱為開放系統互連參考模型,即OSI/RM。但是ISO制定的OSI參考模型過於龐大、複雜招致了許多批評。因此美國國防部提出了TCP/IP協議棧參考模型,簡化了OSI參考模型,獲得了廣泛的應用。

1、OSI參考模型

OSI參考模型,是國際標準化組織ISO提出的,把網絡通信的工作分為7層,分別是物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。也是我們在大學計算機網絡課程中認識的那樣。下面一張圖來看看。

"
java網絡編程(1)基礎知識

一. 概述

我們知道計算機之間的通信要經過一系列複雜的過程,計算機之間通過傳輸介質、通信設施和網絡通信協議互聯,實現資源共享和數據傳輸。而我們的網絡編程就是使用程序使互聯網的兩個(或多個)計算機之間進行數據傳輸。當然java語言,為了實現兩個計算機之間的數據傳輸,提供了一系列的接口,使得開發人員可以方便的實現。

不過在正式開始代碼編寫之前就先看看一些通信的基本知識。

二 、網絡體系結構

計算機之間的通信要經過一系列複雜的過程,必須將這兩臺計算機的物理邏輯和通信邏輯好好的規劃好。為此我們先看看計算機網絡的層次模型。然後再進行分析。

java網絡編程(1)基礎知識

從上面這張圖我們對計算機之間的通信特點進行整理一下:

(1)計算機之間的網絡通信被分解為多個層,層與層之間用接口連接。

(2)通信的雙方具有相同的層次,層次實現的功能由協議數據單元(PDU)來描述。

(3)不同系統中的同一層構成對等層,對等層之間通過對等層協議進行通信。

(4)在通信的時候數據必須由一層依次傳遞到下一層,不能跨級傳輸。

為了促進計算機網絡的發展,國際標準化組織ISO在現有網絡的基礎上,提出了不基於具體機型、操作系統或公司的網絡體系結構,稱為開放系統互連參考模型,即OSI/RM。但是ISO制定的OSI參考模型過於龐大、複雜招致了許多批評。因此美國國防部提出了TCP/IP協議棧參考模型,簡化了OSI參考模型,獲得了廣泛的應用。

1、OSI參考模型

OSI參考模型,是國際標準化組織ISO提出的,把網絡通信的工作分為7層,分別是物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。也是我們在大學計算機網絡課程中認識的那樣。下面一張圖來看看。

java網絡編程(1)基礎知識

(1)物理層處於OSI的最底層,是開放系統的基礎,它的功能主要是為計算機提供傳送數據的通路以及傳輸數據。

  (2)數據鏈路層的主要任務是實現計算機網絡中相鄰節點之間的可靠傳輸,把原始的、有差錯的物理傳輸數據加上數據鏈路協議以後,構成邏輯上可靠的數據鏈路。

  (3)網絡層主要完成的功能主要包括路由選擇、網絡尋址、流量控制、擁塞控制、網絡互連等。實現兩個計算機節點之間的數據傳輸。

  (4)傳輸層涉及源端節點到目的端節點之間可靠的信息傳輸。也就是說是採用TCP/IP還是採用UDP協議。他需要三次握手四次揮手。  

  (5)會話層的主要功能是負責應用程序之間建立、維持和中斷會話,提供單工、半雙工和全雙工3種不同的通信方式,使系統和服務之間有序地進行通信。

  (6)表示層關心所傳輸數據信息的格式定義,其主要功能是把應用層提供的信息變換為能夠共同理解的形式,提供字符代碼、數據格式、控制信息格式、加密等的統一表示。

  (7)應用層是直接為應用進程提供服務的。其作用是多個系統應用進程相互通信的同時,完成一系列業務處理所需的服務。

2 、TCP/IP參考模型

  TCP/IP參考模型採用4層的層級結構,每一層都呼叫它的下一層所提供的協議來完成自己的需求,這4個層次分別是:網絡接口層、網絡層(IP層)、傳輸層(TCP層)、應用層。

"
java網絡編程(1)基礎知識

一. 概述

我們知道計算機之間的通信要經過一系列複雜的過程,計算機之間通過傳輸介質、通信設施和網絡通信協議互聯,實現資源共享和數據傳輸。而我們的網絡編程就是使用程序使互聯網的兩個(或多個)計算機之間進行數據傳輸。當然java語言,為了實現兩個計算機之間的數據傳輸,提供了一系列的接口,使得開發人員可以方便的實現。

不過在正式開始代碼編寫之前就先看看一些通信的基本知識。

二 、網絡體系結構

計算機之間的通信要經過一系列複雜的過程,必須將這兩臺計算機的物理邏輯和通信邏輯好好的規劃好。為此我們先看看計算機網絡的層次模型。然後再進行分析。

java網絡編程(1)基礎知識

從上面這張圖我們對計算機之間的通信特點進行整理一下:

(1)計算機之間的網絡通信被分解為多個層,層與層之間用接口連接。

(2)通信的雙方具有相同的層次,層次實現的功能由協議數據單元(PDU)來描述。

(3)不同系統中的同一層構成對等層,對等層之間通過對等層協議進行通信。

(4)在通信的時候數據必須由一層依次傳遞到下一層,不能跨級傳輸。

為了促進計算機網絡的發展,國際標準化組織ISO在現有網絡的基礎上,提出了不基於具體機型、操作系統或公司的網絡體系結構,稱為開放系統互連參考模型,即OSI/RM。但是ISO制定的OSI參考模型過於龐大、複雜招致了許多批評。因此美國國防部提出了TCP/IP協議棧參考模型,簡化了OSI參考模型,獲得了廣泛的應用。

1、OSI參考模型

OSI參考模型,是國際標準化組織ISO提出的,把網絡通信的工作分為7層,分別是物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。也是我們在大學計算機網絡課程中認識的那樣。下面一張圖來看看。

java網絡編程(1)基礎知識

(1)物理層處於OSI的最底層,是開放系統的基礎,它的功能主要是為計算機提供傳送數據的通路以及傳輸數據。

  (2)數據鏈路層的主要任務是實現計算機網絡中相鄰節點之間的可靠傳輸,把原始的、有差錯的物理傳輸數據加上數據鏈路協議以後,構成邏輯上可靠的數據鏈路。

  (3)網絡層主要完成的功能主要包括路由選擇、網絡尋址、流量控制、擁塞控制、網絡互連等。實現兩個計算機節點之間的數據傳輸。

  (4)傳輸層涉及源端節點到目的端節點之間可靠的信息傳輸。也就是說是採用TCP/IP還是採用UDP協議。他需要三次握手四次揮手。  

  (5)會話層的主要功能是負責應用程序之間建立、維持和中斷會話,提供單工、半雙工和全雙工3種不同的通信方式,使系統和服務之間有序地進行通信。

  (6)表示層關心所傳輸數據信息的格式定義,其主要功能是把應用層提供的信息變換為能夠共同理解的形式,提供字符代碼、數據格式、控制信息格式、加密等的統一表示。

  (7)應用層是直接為應用進程提供服務的。其作用是多個系統應用進程相互通信的同時,完成一系列業務處理所需的服務。

2 、TCP/IP參考模型

  TCP/IP參考模型採用4層的層級結構,每一層都呼叫它的下一層所提供的協議來完成自己的需求,這4個層次分別是:網絡接口層、網絡層(IP層)、傳輸層(TCP層)、應用層。

java網絡編程(1)基礎知識

(1)網絡接口層:對應著OSI參考模型的物理層和數據鏈路層

  (2)網絡層(IP層):是整個TCP/IP協議棧的核心。它的功能是把分組數據發往目標網絡或主機。可以完成將不同類型的網絡(異構網)互連的任務。除此之外,還需要完成擁塞控制的功能。

  (3)傳輸層(TCP層):傳輸層負責在應用進程之間建立端到端的連接和可靠通信。TCP層涉及兩個協議,TCP和UDP。TCP協議提供面向連接的服務,提供按字節流的有序、可靠傳輸,可以實現連接管理、差錯控制、流量控制、擁塞控制等。也就是可靠傳輸。UDP協議提供無連接的服務,用於不需要或無法實現面向連接的網絡應用中。也就是不可靠傳輸。

  (4)應用層:為各種網絡應用提供服務。

3、網絡協議

  OSI參考模型和TCP/IP模型在不同的層次中有許多不同的網絡協議,如圖所示:

"
java網絡編程(1)基礎知識

一. 概述

我們知道計算機之間的通信要經過一系列複雜的過程,計算機之間通過傳輸介質、通信設施和網絡通信協議互聯,實現資源共享和數據傳輸。而我們的網絡編程就是使用程序使互聯網的兩個(或多個)計算機之間進行數據傳輸。當然java語言,為了實現兩個計算機之間的數據傳輸,提供了一系列的接口,使得開發人員可以方便的實現。

不過在正式開始代碼編寫之前就先看看一些通信的基本知識。

二 、網絡體系結構

計算機之間的通信要經過一系列複雜的過程,必須將這兩臺計算機的物理邏輯和通信邏輯好好的規劃好。為此我們先看看計算機網絡的層次模型。然後再進行分析。

java網絡編程(1)基礎知識

從上面這張圖我們對計算機之間的通信特點進行整理一下:

(1)計算機之間的網絡通信被分解為多個層,層與層之間用接口連接。

(2)通信的雙方具有相同的層次,層次實現的功能由協議數據單元(PDU)來描述。

(3)不同系統中的同一層構成對等層,對等層之間通過對等層協議進行通信。

(4)在通信的時候數據必須由一層依次傳遞到下一層,不能跨級傳輸。

為了促進計算機網絡的發展,國際標準化組織ISO在現有網絡的基礎上,提出了不基於具體機型、操作系統或公司的網絡體系結構,稱為開放系統互連參考模型,即OSI/RM。但是ISO制定的OSI參考模型過於龐大、複雜招致了許多批評。因此美國國防部提出了TCP/IP協議棧參考模型,簡化了OSI參考模型,獲得了廣泛的應用。

1、OSI參考模型

OSI參考模型,是國際標準化組織ISO提出的,把網絡通信的工作分為7層,分別是物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。也是我們在大學計算機網絡課程中認識的那樣。下面一張圖來看看。

java網絡編程(1)基礎知識

(1)物理層處於OSI的最底層,是開放系統的基礎,它的功能主要是為計算機提供傳送數據的通路以及傳輸數據。

  (2)數據鏈路層的主要任務是實現計算機網絡中相鄰節點之間的可靠傳輸,把原始的、有差錯的物理傳輸數據加上數據鏈路協議以後,構成邏輯上可靠的數據鏈路。

  (3)網絡層主要完成的功能主要包括路由選擇、網絡尋址、流量控制、擁塞控制、網絡互連等。實現兩個計算機節點之間的數據傳輸。

  (4)傳輸層涉及源端節點到目的端節點之間可靠的信息傳輸。也就是說是採用TCP/IP還是採用UDP協議。他需要三次握手四次揮手。  

  (5)會話層的主要功能是負責應用程序之間建立、維持和中斷會話,提供單工、半雙工和全雙工3種不同的通信方式,使系統和服務之間有序地進行通信。

  (6)表示層關心所傳輸數據信息的格式定義,其主要功能是把應用層提供的信息變換為能夠共同理解的形式,提供字符代碼、數據格式、控制信息格式、加密等的統一表示。

  (7)應用層是直接為應用進程提供服務的。其作用是多個系統應用進程相互通信的同時,完成一系列業務處理所需的服務。

2 、TCP/IP參考模型

  TCP/IP參考模型採用4層的層級結構,每一層都呼叫它的下一層所提供的協議來完成自己的需求,這4個層次分別是:網絡接口層、網絡層(IP層)、傳輸層(TCP層)、應用層。

java網絡編程(1)基礎知識

(1)網絡接口層:對應著OSI參考模型的物理層和數據鏈路層

  (2)網絡層(IP層):是整個TCP/IP協議棧的核心。它的功能是把分組數據發往目標網絡或主機。可以完成將不同類型的網絡(異構網)互連的任務。除此之外,還需要完成擁塞控制的功能。

  (3)傳輸層(TCP層):傳輸層負責在應用進程之間建立端到端的連接和可靠通信。TCP層涉及兩個協議,TCP和UDP。TCP協議提供面向連接的服務,提供按字節流的有序、可靠傳輸,可以實現連接管理、差錯控制、流量控制、擁塞控制等。也就是可靠傳輸。UDP協議提供無連接的服務,用於不需要或無法實現面向連接的網絡應用中。也就是不可靠傳輸。

  (4)應用層:為各種網絡應用提供服務。

3、網絡協議

  OSI參考模型和TCP/IP模型在不同的層次中有許多不同的網絡協議,如圖所示:

java網絡編程(1)基礎知識

網絡協議之間的關係圖如下:

"
java網絡編程(1)基礎知識

一. 概述

我們知道計算機之間的通信要經過一系列複雜的過程,計算機之間通過傳輸介質、通信設施和網絡通信協議互聯,實現資源共享和數據傳輸。而我們的網絡編程就是使用程序使互聯網的兩個(或多個)計算機之間進行數據傳輸。當然java語言,為了實現兩個計算機之間的數據傳輸,提供了一系列的接口,使得開發人員可以方便的實現。

不過在正式開始代碼編寫之前就先看看一些通信的基本知識。

二 、網絡體系結構

計算機之間的通信要經過一系列複雜的過程,必須將這兩臺計算機的物理邏輯和通信邏輯好好的規劃好。為此我們先看看計算機網絡的層次模型。然後再進行分析。

java網絡編程(1)基礎知識

從上面這張圖我們對計算機之間的通信特點進行整理一下:

(1)計算機之間的網絡通信被分解為多個層,層與層之間用接口連接。

(2)通信的雙方具有相同的層次,層次實現的功能由協議數據單元(PDU)來描述。

(3)不同系統中的同一層構成對等層,對等層之間通過對等層協議進行通信。

(4)在通信的時候數據必須由一層依次傳遞到下一層,不能跨級傳輸。

為了促進計算機網絡的發展,國際標準化組織ISO在現有網絡的基礎上,提出了不基於具體機型、操作系統或公司的網絡體系結構,稱為開放系統互連參考模型,即OSI/RM。但是ISO制定的OSI參考模型過於龐大、複雜招致了許多批評。因此美國國防部提出了TCP/IP協議棧參考模型,簡化了OSI參考模型,獲得了廣泛的應用。

1、OSI參考模型

OSI參考模型,是國際標準化組織ISO提出的,把網絡通信的工作分為7層,分別是物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。也是我們在大學計算機網絡課程中認識的那樣。下面一張圖來看看。

java網絡編程(1)基礎知識

(1)物理層處於OSI的最底層,是開放系統的基礎,它的功能主要是為計算機提供傳送數據的通路以及傳輸數據。

  (2)數據鏈路層的主要任務是實現計算機網絡中相鄰節點之間的可靠傳輸,把原始的、有差錯的物理傳輸數據加上數據鏈路協議以後,構成邏輯上可靠的數據鏈路。

  (3)網絡層主要完成的功能主要包括路由選擇、網絡尋址、流量控制、擁塞控制、網絡互連等。實現兩個計算機節點之間的數據傳輸。

  (4)傳輸層涉及源端節點到目的端節點之間可靠的信息傳輸。也就是說是採用TCP/IP還是採用UDP協議。他需要三次握手四次揮手。  

  (5)會話層的主要功能是負責應用程序之間建立、維持和中斷會話,提供單工、半雙工和全雙工3種不同的通信方式,使系統和服務之間有序地進行通信。

  (6)表示層關心所傳輸數據信息的格式定義,其主要功能是把應用層提供的信息變換為能夠共同理解的形式,提供字符代碼、數據格式、控制信息格式、加密等的統一表示。

  (7)應用層是直接為應用進程提供服務的。其作用是多個系統應用進程相互通信的同時,完成一系列業務處理所需的服務。

2 、TCP/IP參考模型

  TCP/IP參考模型採用4層的層級結構,每一層都呼叫它的下一層所提供的協議來完成自己的需求,這4個層次分別是:網絡接口層、網絡層(IP層)、傳輸層(TCP層)、應用層。

java網絡編程(1)基礎知識

(1)網絡接口層:對應著OSI參考模型的物理層和數據鏈路層

  (2)網絡層(IP層):是整個TCP/IP協議棧的核心。它的功能是把分組數據發往目標網絡或主機。可以完成將不同類型的網絡(異構網)互連的任務。除此之外,還需要完成擁塞控制的功能。

  (3)傳輸層(TCP層):傳輸層負責在應用進程之間建立端到端的連接和可靠通信。TCP層涉及兩個協議,TCP和UDP。TCP協議提供面向連接的服務,提供按字節流的有序、可靠傳輸,可以實現連接管理、差錯控制、流量控制、擁塞控制等。也就是可靠傳輸。UDP協議提供無連接的服務,用於不需要或無法實現面向連接的網絡應用中。也就是不可靠傳輸。

  (4)應用層:為各種網絡應用提供服務。

3、網絡協議

  OSI參考模型和TCP/IP模型在不同的層次中有許多不同的網絡協議,如圖所示:

java網絡編程(1)基礎知識

網絡協議之間的關係圖如下:

java網絡編程(1)基礎知識

下面我們抽出來一些重要的協議看一下。其他的協議用到的時候再說。

(1)IP協議

  IP協議的作用在於把各種數據包準備無誤的傳遞給對方。由於IP地址是稀有資源,不可能每個人都擁有一個IP地址,所以我們通常的IP地址是路由器給我們生成的IP地址,路由器裡面會記錄我們的MAC地址。而MAC地址是全球唯一的。舉例,IP地址就如同是我們居住小區的地址,而MAC地址就是我們住的那棟樓那個房間那個人。

(2)TCP協議

  TCP層是位於IP層之上,應用層之下的中間層。有可靠的、像管道一樣的TCP連接,還有不可靠的包交換的UDP鏈接。那tcp協議之間的通信數據格式是什麼樣子的呢?也就是什麼樣的數據在傳輸,下面一張圖來看一下:

  TCP報文段包括協議首部和數據兩部分,協議首部的固定部分是20個字節,首部的固定部分後面是選項部分。

"
java網絡編程(1)基礎知識

一. 概述

我們知道計算機之間的通信要經過一系列複雜的過程,計算機之間通過傳輸介質、通信設施和網絡通信協議互聯,實現資源共享和數據傳輸。而我們的網絡編程就是使用程序使互聯網的兩個(或多個)計算機之間進行數據傳輸。當然java語言,為了實現兩個計算機之間的數據傳輸,提供了一系列的接口,使得開發人員可以方便的實現。

不過在正式開始代碼編寫之前就先看看一些通信的基本知識。

二 、網絡體系結構

計算機之間的通信要經過一系列複雜的過程,必須將這兩臺計算機的物理邏輯和通信邏輯好好的規劃好。為此我們先看看計算機網絡的層次模型。然後再進行分析。

java網絡編程(1)基礎知識

從上面這張圖我們對計算機之間的通信特點進行整理一下:

(1)計算機之間的網絡通信被分解為多個層,層與層之間用接口連接。

(2)通信的雙方具有相同的層次,層次實現的功能由協議數據單元(PDU)來描述。

(3)不同系統中的同一層構成對等層,對等層之間通過對等層協議進行通信。

(4)在通信的時候數據必須由一層依次傳遞到下一層,不能跨級傳輸。

為了促進計算機網絡的發展,國際標準化組織ISO在現有網絡的基礎上,提出了不基於具體機型、操作系統或公司的網絡體系結構,稱為開放系統互連參考模型,即OSI/RM。但是ISO制定的OSI參考模型過於龐大、複雜招致了許多批評。因此美國國防部提出了TCP/IP協議棧參考模型,簡化了OSI參考模型,獲得了廣泛的應用。

1、OSI參考模型

OSI參考模型,是國際標準化組織ISO提出的,把網絡通信的工作分為7層,分別是物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。也是我們在大學計算機網絡課程中認識的那樣。下面一張圖來看看。

java網絡編程(1)基礎知識

(1)物理層處於OSI的最底層,是開放系統的基礎,它的功能主要是為計算機提供傳送數據的通路以及傳輸數據。

  (2)數據鏈路層的主要任務是實現計算機網絡中相鄰節點之間的可靠傳輸,把原始的、有差錯的物理傳輸數據加上數據鏈路協議以後,構成邏輯上可靠的數據鏈路。

  (3)網絡層主要完成的功能主要包括路由選擇、網絡尋址、流量控制、擁塞控制、網絡互連等。實現兩個計算機節點之間的數據傳輸。

  (4)傳輸層涉及源端節點到目的端節點之間可靠的信息傳輸。也就是說是採用TCP/IP還是採用UDP協議。他需要三次握手四次揮手。  

  (5)會話層的主要功能是負責應用程序之間建立、維持和中斷會話,提供單工、半雙工和全雙工3種不同的通信方式,使系統和服務之間有序地進行通信。

  (6)表示層關心所傳輸數據信息的格式定義,其主要功能是把應用層提供的信息變換為能夠共同理解的形式,提供字符代碼、數據格式、控制信息格式、加密等的統一表示。

  (7)應用層是直接為應用進程提供服務的。其作用是多個系統應用進程相互通信的同時,完成一系列業務處理所需的服務。

2 、TCP/IP參考模型

  TCP/IP參考模型採用4層的層級結構,每一層都呼叫它的下一層所提供的協議來完成自己的需求,這4個層次分別是:網絡接口層、網絡層(IP層)、傳輸層(TCP層)、應用層。

java網絡編程(1)基礎知識

(1)網絡接口層:對應著OSI參考模型的物理層和數據鏈路層

  (2)網絡層(IP層):是整個TCP/IP協議棧的核心。它的功能是把分組數據發往目標網絡或主機。可以完成將不同類型的網絡(異構網)互連的任務。除此之外,還需要完成擁塞控制的功能。

  (3)傳輸層(TCP層):傳輸層負責在應用進程之間建立端到端的連接和可靠通信。TCP層涉及兩個協議,TCP和UDP。TCP協議提供面向連接的服務,提供按字節流的有序、可靠傳輸,可以實現連接管理、差錯控制、流量控制、擁塞控制等。也就是可靠傳輸。UDP協議提供無連接的服務,用於不需要或無法實現面向連接的網絡應用中。也就是不可靠傳輸。

  (4)應用層:為各種網絡應用提供服務。

3、網絡協議

  OSI參考模型和TCP/IP模型在不同的層次中有許多不同的網絡協議,如圖所示:

java網絡編程(1)基礎知識

網絡協議之間的關係圖如下:

java網絡編程(1)基礎知識

下面我們抽出來一些重要的協議看一下。其他的協議用到的時候再說。

(1)IP協議

  IP協議的作用在於把各種數據包準備無誤的傳遞給對方。由於IP地址是稀有資源,不可能每個人都擁有一個IP地址,所以我們通常的IP地址是路由器給我們生成的IP地址,路由器裡面會記錄我們的MAC地址。而MAC地址是全球唯一的。舉例,IP地址就如同是我們居住小區的地址,而MAC地址就是我們住的那棟樓那個房間那個人。

(2)TCP協議

  TCP層是位於IP層之上,應用層之下的中間層。有可靠的、像管道一樣的TCP連接,還有不可靠的包交換的UDP鏈接。那tcp協議之間的通信數據格式是什麼樣子的呢?也就是什麼樣的數據在傳輸,下面一張圖來看一下:

  TCP報文段包括協議首部和數據兩部分,協議首部的固定部分是20個字節,首部的固定部分後面是選項部分。

java網絡編程(1)基礎知識

下面是報文段首部各個字段的含義,也是《計算機網絡》書中的說明:

  1. 源端口號以及目的端口號:各佔2個字節,端口是傳輸層和應用層的服務接口,用於尋找發送端和接收端的進程,一般來講,通過端口號和IP地址,可以唯一確定一個TCP連接,在網絡編程中,通常被稱為一個socket接口。
  2. 序號:Seq序號,佔4個字節、32位。用來標識從TCP發送端向TCP接收端發送的數據字節流。發起方發送數據時對此進行標記。
  3. 確認序號:Ack序號,佔4個字節、32位。包含發送確認的一端所期望收到的下一個序號。只有ACK標記位為1時,確認序號字段才有效,因此,確認序號應該是上次已經成功收到數據字節序號加1,即Ack=Seq + 1。
  4. 數據偏移:佔4個字節,用於指出TCP首部長度,若不存在選項,則這個值為20字節,數據偏移的最大值為60字節。
  5. 保留字段佔6位,暫時可忽略,值全為0。
  6. 標誌位,6個
  • URG(緊急):為1時表明緊急指針字段有效
  • ACK(確認):為1時表明確認號字段有效
  • PSH(推送):為1時接收方應儘快將這個報文段交給應用層
  • RST(復位):為1時表明TCP連接出現故障必須重建連接
  • SYN(同步):在連接建立時用來同步序號
  • FIN(終止):為1時表明發送端數據發送完畢要求釋放連接

7. 接收窗口:佔2個字節,用於流量控制和擁塞控制,表示當前接收緩衝區的大小。在計算機網絡中,通常是用接收方的接收能力的大小來控制發送方的數據發送量。TCP連接的一端根據緩衝區大小確定自己的接收窗口值,告訴對方,使對方可以確定發送數據的字節數。

8.校驗和:佔2個字節,範圍包括首部和數據兩部分。

9.選項是可選的,默認情況是不選。

三次握手與四次揮手(超級重要。面試必問)

  TCP是面向連接的協議,因此每個TCP連接都有3個階段:連接建立、數據傳送和連接釋放。連接建立經歷三個步驟,通常稱為“三次握手”。

  TCP三次握手過程如下:

"
java網絡編程(1)基礎知識

一. 概述

我們知道計算機之間的通信要經過一系列複雜的過程,計算機之間通過傳輸介質、通信設施和網絡通信協議互聯,實現資源共享和數據傳輸。而我們的網絡編程就是使用程序使互聯網的兩個(或多個)計算機之間進行數據傳輸。當然java語言,為了實現兩個計算機之間的數據傳輸,提供了一系列的接口,使得開發人員可以方便的實現。

不過在正式開始代碼編寫之前就先看看一些通信的基本知識。

二 、網絡體系結構

計算機之間的通信要經過一系列複雜的過程,必須將這兩臺計算機的物理邏輯和通信邏輯好好的規劃好。為此我們先看看計算機網絡的層次模型。然後再進行分析。

java網絡編程(1)基礎知識

從上面這張圖我們對計算機之間的通信特點進行整理一下:

(1)計算機之間的網絡通信被分解為多個層,層與層之間用接口連接。

(2)通信的雙方具有相同的層次,層次實現的功能由協議數據單元(PDU)來描述。

(3)不同系統中的同一層構成對等層,對等層之間通過對等層協議進行通信。

(4)在通信的時候數據必須由一層依次傳遞到下一層,不能跨級傳輸。

為了促進計算機網絡的發展,國際標準化組織ISO在現有網絡的基礎上,提出了不基於具體機型、操作系統或公司的網絡體系結構,稱為開放系統互連參考模型,即OSI/RM。但是ISO制定的OSI參考模型過於龐大、複雜招致了許多批評。因此美國國防部提出了TCP/IP協議棧參考模型,簡化了OSI參考模型,獲得了廣泛的應用。

1、OSI參考模型

OSI參考模型,是國際標準化組織ISO提出的,把網絡通信的工作分為7層,分別是物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。也是我們在大學計算機網絡課程中認識的那樣。下面一張圖來看看。

java網絡編程(1)基礎知識

(1)物理層處於OSI的最底層,是開放系統的基礎,它的功能主要是為計算機提供傳送數據的通路以及傳輸數據。

  (2)數據鏈路層的主要任務是實現計算機網絡中相鄰節點之間的可靠傳輸,把原始的、有差錯的物理傳輸數據加上數據鏈路協議以後,構成邏輯上可靠的數據鏈路。

  (3)網絡層主要完成的功能主要包括路由選擇、網絡尋址、流量控制、擁塞控制、網絡互連等。實現兩個計算機節點之間的數據傳輸。

  (4)傳輸層涉及源端節點到目的端節點之間可靠的信息傳輸。也就是說是採用TCP/IP還是採用UDP協議。他需要三次握手四次揮手。  

  (5)會話層的主要功能是負責應用程序之間建立、維持和中斷會話,提供單工、半雙工和全雙工3種不同的通信方式,使系統和服務之間有序地進行通信。

  (6)表示層關心所傳輸數據信息的格式定義,其主要功能是把應用層提供的信息變換為能夠共同理解的形式,提供字符代碼、數據格式、控制信息格式、加密等的統一表示。

  (7)應用層是直接為應用進程提供服務的。其作用是多個系統應用進程相互通信的同時,完成一系列業務處理所需的服務。

2 、TCP/IP參考模型

  TCP/IP參考模型採用4層的層級結構,每一層都呼叫它的下一層所提供的協議來完成自己的需求,這4個層次分別是:網絡接口層、網絡層(IP層)、傳輸層(TCP層)、應用層。

java網絡編程(1)基礎知識

(1)網絡接口層:對應著OSI參考模型的物理層和數據鏈路層

  (2)網絡層(IP層):是整個TCP/IP協議棧的核心。它的功能是把分組數據發往目標網絡或主機。可以完成將不同類型的網絡(異構網)互連的任務。除此之外,還需要完成擁塞控制的功能。

  (3)傳輸層(TCP層):傳輸層負責在應用進程之間建立端到端的連接和可靠通信。TCP層涉及兩個協議,TCP和UDP。TCP協議提供面向連接的服務,提供按字節流的有序、可靠傳輸,可以實現連接管理、差錯控制、流量控制、擁塞控制等。也就是可靠傳輸。UDP協議提供無連接的服務,用於不需要或無法實現面向連接的網絡應用中。也就是不可靠傳輸。

  (4)應用層:為各種網絡應用提供服務。

3、網絡協議

  OSI參考模型和TCP/IP模型在不同的層次中有許多不同的網絡協議,如圖所示:

java網絡編程(1)基礎知識

網絡協議之間的關係圖如下:

java網絡編程(1)基礎知識

下面我們抽出來一些重要的協議看一下。其他的協議用到的時候再說。

(1)IP協議

  IP協議的作用在於把各種數據包準備無誤的傳遞給對方。由於IP地址是稀有資源,不可能每個人都擁有一個IP地址,所以我們通常的IP地址是路由器給我們生成的IP地址,路由器裡面會記錄我們的MAC地址。而MAC地址是全球唯一的。舉例,IP地址就如同是我們居住小區的地址,而MAC地址就是我們住的那棟樓那個房間那個人。

(2)TCP協議

  TCP層是位於IP層之上,應用層之下的中間層。有可靠的、像管道一樣的TCP連接,還有不可靠的包交換的UDP鏈接。那tcp協議之間的通信數據格式是什麼樣子的呢?也就是什麼樣的數據在傳輸,下面一張圖來看一下:

  TCP報文段包括協議首部和數據兩部分,協議首部的固定部分是20個字節,首部的固定部分後面是選項部分。

java網絡編程(1)基礎知識

下面是報文段首部各個字段的含義,也是《計算機網絡》書中的說明:

  1. 源端口號以及目的端口號:各佔2個字節,端口是傳輸層和應用層的服務接口,用於尋找發送端和接收端的進程,一般來講,通過端口號和IP地址,可以唯一確定一個TCP連接,在網絡編程中,通常被稱為一個socket接口。
  2. 序號:Seq序號,佔4個字節、32位。用來標識從TCP發送端向TCP接收端發送的數據字節流。發起方發送數據時對此進行標記。
  3. 確認序號:Ack序號,佔4個字節、32位。包含發送確認的一端所期望收到的下一個序號。只有ACK標記位為1時,確認序號字段才有效,因此,確認序號應該是上次已經成功收到數據字節序號加1,即Ack=Seq + 1。
  4. 數據偏移:佔4個字節,用於指出TCP首部長度,若不存在選項,則這個值為20字節,數據偏移的最大值為60字節。
  5. 保留字段佔6位,暫時可忽略,值全為0。
  6. 標誌位,6個
  • URG(緊急):為1時表明緊急指針字段有效
  • ACK(確認):為1時表明確認號字段有效
  • PSH(推送):為1時接收方應儘快將這個報文段交給應用層
  • RST(復位):為1時表明TCP連接出現故障必須重建連接
  • SYN(同步):在連接建立時用來同步序號
  • FIN(終止):為1時表明發送端數據發送完畢要求釋放連接

7. 接收窗口:佔2個字節,用於流量控制和擁塞控制,表示當前接收緩衝區的大小。在計算機網絡中,通常是用接收方的接收能力的大小來控制發送方的數據發送量。TCP連接的一端根據緩衝區大小確定自己的接收窗口值,告訴對方,使對方可以確定發送數據的字節數。

8.校驗和:佔2個字節,範圍包括首部和數據兩部分。

9.選項是可選的,默認情況是不選。

三次握手與四次揮手(超級重要。面試必問)

  TCP是面向連接的協議,因此每個TCP連接都有3個階段:連接建立、數據傳送和連接釋放。連接建立經歷三個步驟,通常稱為“三次握手”。

  TCP三次握手過程如下:

java網絡編程(1)基礎知識

 1. 第一次握手(客戶端發送請求)

   男孩:“咱倆處對象吧”,並等待對方回覆確認。

  2. 第二次握手(服務端回傳確認)

   女孩:告訴男孩說“可以”,

  3. 第三次握手(客戶端回傳確認)

   男孩說:“那就在一塊吧”,於是倆人有了情侶鏈接關係了。

  注意:握手過程中傳送的包裡不包含數據,三次握手完畢後,客戶端與服務器才正式開始傳送數據。

 TCP四次揮手過程如下

  

"
java網絡編程(1)基礎知識

一. 概述

我們知道計算機之間的通信要經過一系列複雜的過程,計算機之間通過傳輸介質、通信設施和網絡通信協議互聯,實現資源共享和數據傳輸。而我們的網絡編程就是使用程序使互聯網的兩個(或多個)計算機之間進行數據傳輸。當然java語言,為了實現兩個計算機之間的數據傳輸,提供了一系列的接口,使得開發人員可以方便的實現。

不過在正式開始代碼編寫之前就先看看一些通信的基本知識。

二 、網絡體系結構

計算機之間的通信要經過一系列複雜的過程,必須將這兩臺計算機的物理邏輯和通信邏輯好好的規劃好。為此我們先看看計算機網絡的層次模型。然後再進行分析。

java網絡編程(1)基礎知識

從上面這張圖我們對計算機之間的通信特點進行整理一下:

(1)計算機之間的網絡通信被分解為多個層,層與層之間用接口連接。

(2)通信的雙方具有相同的層次,層次實現的功能由協議數據單元(PDU)來描述。

(3)不同系統中的同一層構成對等層,對等層之間通過對等層協議進行通信。

(4)在通信的時候數據必須由一層依次傳遞到下一層,不能跨級傳輸。

為了促進計算機網絡的發展,國際標準化組織ISO在現有網絡的基礎上,提出了不基於具體機型、操作系統或公司的網絡體系結構,稱為開放系統互連參考模型,即OSI/RM。但是ISO制定的OSI參考模型過於龐大、複雜招致了許多批評。因此美國國防部提出了TCP/IP協議棧參考模型,簡化了OSI參考模型,獲得了廣泛的應用。

1、OSI參考模型

OSI參考模型,是國際標準化組織ISO提出的,把網絡通信的工作分為7層,分別是物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。也是我們在大學計算機網絡課程中認識的那樣。下面一張圖來看看。

java網絡編程(1)基礎知識

(1)物理層處於OSI的最底層,是開放系統的基礎,它的功能主要是為計算機提供傳送數據的通路以及傳輸數據。

  (2)數據鏈路層的主要任務是實現計算機網絡中相鄰節點之間的可靠傳輸,把原始的、有差錯的物理傳輸數據加上數據鏈路協議以後,構成邏輯上可靠的數據鏈路。

  (3)網絡層主要完成的功能主要包括路由選擇、網絡尋址、流量控制、擁塞控制、網絡互連等。實現兩個計算機節點之間的數據傳輸。

  (4)傳輸層涉及源端節點到目的端節點之間可靠的信息傳輸。也就是說是採用TCP/IP還是採用UDP協議。他需要三次握手四次揮手。  

  (5)會話層的主要功能是負責應用程序之間建立、維持和中斷會話,提供單工、半雙工和全雙工3種不同的通信方式,使系統和服務之間有序地進行通信。

  (6)表示層關心所傳輸數據信息的格式定義,其主要功能是把應用層提供的信息變換為能夠共同理解的形式,提供字符代碼、數據格式、控制信息格式、加密等的統一表示。

  (7)應用層是直接為應用進程提供服務的。其作用是多個系統應用進程相互通信的同時,完成一系列業務處理所需的服務。

2 、TCP/IP參考模型

  TCP/IP參考模型採用4層的層級結構,每一層都呼叫它的下一層所提供的協議來完成自己的需求,這4個層次分別是:網絡接口層、網絡層(IP層)、傳輸層(TCP層)、應用層。

java網絡編程(1)基礎知識

(1)網絡接口層:對應著OSI參考模型的物理層和數據鏈路層

  (2)網絡層(IP層):是整個TCP/IP協議棧的核心。它的功能是把分組數據發往目標網絡或主機。可以完成將不同類型的網絡(異構網)互連的任務。除此之外,還需要完成擁塞控制的功能。

  (3)傳輸層(TCP層):傳輸層負責在應用進程之間建立端到端的連接和可靠通信。TCP層涉及兩個協議,TCP和UDP。TCP協議提供面向連接的服務,提供按字節流的有序、可靠傳輸,可以實現連接管理、差錯控制、流量控制、擁塞控制等。也就是可靠傳輸。UDP協議提供無連接的服務,用於不需要或無法實現面向連接的網絡應用中。也就是不可靠傳輸。

  (4)應用層:為各種網絡應用提供服務。

3、網絡協議

  OSI參考模型和TCP/IP模型在不同的層次中有許多不同的網絡協議,如圖所示:

java網絡編程(1)基礎知識

網絡協議之間的關係圖如下:

java網絡編程(1)基礎知識

下面我們抽出來一些重要的協議看一下。其他的協議用到的時候再說。

(1)IP協議

  IP協議的作用在於把各種數據包準備無誤的傳遞給對方。由於IP地址是稀有資源,不可能每個人都擁有一個IP地址,所以我們通常的IP地址是路由器給我們生成的IP地址,路由器裡面會記錄我們的MAC地址。而MAC地址是全球唯一的。舉例,IP地址就如同是我們居住小區的地址,而MAC地址就是我們住的那棟樓那個房間那個人。

(2)TCP協議

  TCP層是位於IP層之上,應用層之下的中間層。有可靠的、像管道一樣的TCP連接,還有不可靠的包交換的UDP鏈接。那tcp協議之間的通信數據格式是什麼樣子的呢?也就是什麼樣的數據在傳輸,下面一張圖來看一下:

  TCP報文段包括協議首部和數據兩部分,協議首部的固定部分是20個字節,首部的固定部分後面是選項部分。

java網絡編程(1)基礎知識

下面是報文段首部各個字段的含義,也是《計算機網絡》書中的說明:

  1. 源端口號以及目的端口號:各佔2個字節,端口是傳輸層和應用層的服務接口,用於尋找發送端和接收端的進程,一般來講,通過端口號和IP地址,可以唯一確定一個TCP連接,在網絡編程中,通常被稱為一個socket接口。
  2. 序號:Seq序號,佔4個字節、32位。用來標識從TCP發送端向TCP接收端發送的數據字節流。發起方發送數據時對此進行標記。
  3. 確認序號:Ack序號,佔4個字節、32位。包含發送確認的一端所期望收到的下一個序號。只有ACK標記位為1時,確認序號字段才有效,因此,確認序號應該是上次已經成功收到數據字節序號加1,即Ack=Seq + 1。
  4. 數據偏移:佔4個字節,用於指出TCP首部長度,若不存在選項,則這個值為20字節,數據偏移的最大值為60字節。
  5. 保留字段佔6位,暫時可忽略,值全為0。
  6. 標誌位,6個
  • URG(緊急):為1時表明緊急指針字段有效
  • ACK(確認):為1時表明確認號字段有效
  • PSH(推送):為1時接收方應儘快將這個報文段交給應用層
  • RST(復位):為1時表明TCP連接出現故障必須重建連接
  • SYN(同步):在連接建立時用來同步序號
  • FIN(終止):為1時表明發送端數據發送完畢要求釋放連接

7. 接收窗口:佔2個字節,用於流量控制和擁塞控制,表示當前接收緩衝區的大小。在計算機網絡中,通常是用接收方的接收能力的大小來控制發送方的數據發送量。TCP連接的一端根據緩衝區大小確定自己的接收窗口值,告訴對方,使對方可以確定發送數據的字節數。

8.校驗和:佔2個字節,範圍包括首部和數據兩部分。

9.選項是可選的,默認情況是不選。

三次握手與四次揮手(超級重要。面試必問)

  TCP是面向連接的協議,因此每個TCP連接都有3個階段:連接建立、數據傳送和連接釋放。連接建立經歷三個步驟,通常稱為“三次握手”。

  TCP三次握手過程如下:

java網絡編程(1)基礎知識

 1. 第一次握手(客戶端發送請求)

   男孩:“咱倆處對象吧”,並等待對方回覆確認。

  2. 第二次握手(服務端回傳確認)

   女孩:告訴男孩說“可以”,

  3. 第三次握手(客戶端回傳確認)

   男孩說:“那就在一塊吧”,於是倆人有了情侶鏈接關係了。

  注意:握手過程中傳送的包裡不包含數據,三次握手完畢後,客戶端與服務器才正式開始傳送數據。

 TCP四次揮手過程如下

  

java網絡編程(1)基礎知識

由於TCP連接是全雙工的,因此每個方向都必須單獨進行關閉。這原則是當一方完成它的數據發送任務後就能發送一個FIN來終止這個方向的連接。收到一個FIN只意味著這一方向上沒有數據流動,一個TCP連接在收到一個FIN後仍能發送數據。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。

  1. 女孩:要和男孩分手,並等待男孩迴應

  2. 男孩:回覆女孩,先同意分手,不過還是又考慮了一段時間。

  3. 男孩思考了一段時間,還是選擇了分手。

  4. 女孩收到消息,於是倆人正式分手。

  注意:為什麼連接的時候是三次握手,關閉的時候卻是四次揮手?

  因為當服務端收到客戶端的SYN連接請求報文後,可以直接發送SYN+ACK報文。其中ACK報文是用來應答的,SYN報文是用來同步的。但是關閉連接時,當服務端收到FIN報文時,很可能並不會立即關閉socket,所以只能先回復一個ACK報文,告訴客戶端,“你發的FIN報文,我收到了”。只有等到服務端所有的報文都發送完了,我才能發送FIN報文,因此不能一起發送,故需要四步揮手。

(3)UDP協議

  UDP,用戶數據報協議,它是TCP/IP協議簇中無連接的運輸層協議。

  1. UDP是一個非連接的協議,傳輸數據之前源端和終端不建立連接,當它想傳送時就簡單地去抓取來自應用程序的數據,並儘可能快地把它扔到網絡上。
  2. 由於傳輸數據不建立連接,因此也就不需要維護連接狀態,包括收發狀態等,因此一臺服務器可同時向多個客戶端傳輸相同的消息。
  3. UDP信息包的標題很短,只有8個字節,相對於TCP的20個字節信息包的額外開銷很小。
  4. 吞吐量不受擁擠控制算法的調節,只受應用軟件生成數據的速率、傳輸帶寬、源端和終端主機性能的限制。
  5. UDP使用盡量最大努力交付,即不保證可靠交付,因此主機不需要維持複雜的鏈接狀態表。
  6. UDP是面向報文的。發送方的UDP對應用程序交下來的報文,在添加首部受就向下交付給IP層。既不拆分,也不合並,而是保留這些報文的邊界,因此,應用程序需要選擇合適的報文大小。

2.2.3.1 UDP協議格式


"
java網絡編程(1)基礎知識

一. 概述

我們知道計算機之間的通信要經過一系列複雜的過程,計算機之間通過傳輸介質、通信設施和網絡通信協議互聯,實現資源共享和數據傳輸。而我們的網絡編程就是使用程序使互聯網的兩個(或多個)計算機之間進行數據傳輸。當然java語言,為了實現兩個計算機之間的數據傳輸,提供了一系列的接口,使得開發人員可以方便的實現。

不過在正式開始代碼編寫之前就先看看一些通信的基本知識。

二 、網絡體系結構

計算機之間的通信要經過一系列複雜的過程,必須將這兩臺計算機的物理邏輯和通信邏輯好好的規劃好。為此我們先看看計算機網絡的層次模型。然後再進行分析。

java網絡編程(1)基礎知識

從上面這張圖我們對計算機之間的通信特點進行整理一下:

(1)計算機之間的網絡通信被分解為多個層,層與層之間用接口連接。

(2)通信的雙方具有相同的層次,層次實現的功能由協議數據單元(PDU)來描述。

(3)不同系統中的同一層構成對等層,對等層之間通過對等層協議進行通信。

(4)在通信的時候數據必須由一層依次傳遞到下一層,不能跨級傳輸。

為了促進計算機網絡的發展,國際標準化組織ISO在現有網絡的基礎上,提出了不基於具體機型、操作系統或公司的網絡體系結構,稱為開放系統互連參考模型,即OSI/RM。但是ISO制定的OSI參考模型過於龐大、複雜招致了許多批評。因此美國國防部提出了TCP/IP協議棧參考模型,簡化了OSI參考模型,獲得了廣泛的應用。

1、OSI參考模型

OSI參考模型,是國際標準化組織ISO提出的,把網絡通信的工作分為7層,分別是物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。也是我們在大學計算機網絡課程中認識的那樣。下面一張圖來看看。

java網絡編程(1)基礎知識

(1)物理層處於OSI的最底層,是開放系統的基礎,它的功能主要是為計算機提供傳送數據的通路以及傳輸數據。

  (2)數據鏈路層的主要任務是實現計算機網絡中相鄰節點之間的可靠傳輸,把原始的、有差錯的物理傳輸數據加上數據鏈路協議以後,構成邏輯上可靠的數據鏈路。

  (3)網絡層主要完成的功能主要包括路由選擇、網絡尋址、流量控制、擁塞控制、網絡互連等。實現兩個計算機節點之間的數據傳輸。

  (4)傳輸層涉及源端節點到目的端節點之間可靠的信息傳輸。也就是說是採用TCP/IP還是採用UDP協議。他需要三次握手四次揮手。  

  (5)會話層的主要功能是負責應用程序之間建立、維持和中斷會話,提供單工、半雙工和全雙工3種不同的通信方式,使系統和服務之間有序地進行通信。

  (6)表示層關心所傳輸數據信息的格式定義,其主要功能是把應用層提供的信息變換為能夠共同理解的形式,提供字符代碼、數據格式、控制信息格式、加密等的統一表示。

  (7)應用層是直接為應用進程提供服務的。其作用是多個系統應用進程相互通信的同時,完成一系列業務處理所需的服務。

2 、TCP/IP參考模型

  TCP/IP參考模型採用4層的層級結構,每一層都呼叫它的下一層所提供的協議來完成自己的需求,這4個層次分別是:網絡接口層、網絡層(IP層)、傳輸層(TCP層)、應用層。

java網絡編程(1)基礎知識

(1)網絡接口層:對應著OSI參考模型的物理層和數據鏈路層

  (2)網絡層(IP層):是整個TCP/IP協議棧的核心。它的功能是把分組數據發往目標網絡或主機。可以完成將不同類型的網絡(異構網)互連的任務。除此之外,還需要完成擁塞控制的功能。

  (3)傳輸層(TCP層):傳輸層負責在應用進程之間建立端到端的連接和可靠通信。TCP層涉及兩個協議,TCP和UDP。TCP協議提供面向連接的服務,提供按字節流的有序、可靠傳輸,可以實現連接管理、差錯控制、流量控制、擁塞控制等。也就是可靠傳輸。UDP協議提供無連接的服務,用於不需要或無法實現面向連接的網絡應用中。也就是不可靠傳輸。

  (4)應用層:為各種網絡應用提供服務。

3、網絡協議

  OSI參考模型和TCP/IP模型在不同的層次中有許多不同的網絡協議,如圖所示:

java網絡編程(1)基礎知識

網絡協議之間的關係圖如下:

java網絡編程(1)基礎知識

下面我們抽出來一些重要的協議看一下。其他的協議用到的時候再說。

(1)IP協議

  IP協議的作用在於把各種數據包準備無誤的傳遞給對方。由於IP地址是稀有資源,不可能每個人都擁有一個IP地址,所以我們通常的IP地址是路由器給我們生成的IP地址,路由器裡面會記錄我們的MAC地址。而MAC地址是全球唯一的。舉例,IP地址就如同是我們居住小區的地址,而MAC地址就是我們住的那棟樓那個房間那個人。

(2)TCP協議

  TCP層是位於IP層之上,應用層之下的中間層。有可靠的、像管道一樣的TCP連接,還有不可靠的包交換的UDP鏈接。那tcp協議之間的通信數據格式是什麼樣子的呢?也就是什麼樣的數據在傳輸,下面一張圖來看一下:

  TCP報文段包括協議首部和數據兩部分,協議首部的固定部分是20個字節,首部的固定部分後面是選項部分。

java網絡編程(1)基礎知識

下面是報文段首部各個字段的含義,也是《計算機網絡》書中的說明:

  1. 源端口號以及目的端口號:各佔2個字節,端口是傳輸層和應用層的服務接口,用於尋找發送端和接收端的進程,一般來講,通過端口號和IP地址,可以唯一確定一個TCP連接,在網絡編程中,通常被稱為一個socket接口。
  2. 序號:Seq序號,佔4個字節、32位。用來標識從TCP發送端向TCP接收端發送的數據字節流。發起方發送數據時對此進行標記。
  3. 確認序號:Ack序號,佔4個字節、32位。包含發送確認的一端所期望收到的下一個序號。只有ACK標記位為1時,確認序號字段才有效,因此,確認序號應該是上次已經成功收到數據字節序號加1,即Ack=Seq + 1。
  4. 數據偏移:佔4個字節,用於指出TCP首部長度,若不存在選項,則這個值為20字節,數據偏移的最大值為60字節。
  5. 保留字段佔6位,暫時可忽略,值全為0。
  6. 標誌位,6個
  • URG(緊急):為1時表明緊急指針字段有效
  • ACK(確認):為1時表明確認號字段有效
  • PSH(推送):為1時接收方應儘快將這個報文段交給應用層
  • RST(復位):為1時表明TCP連接出現故障必須重建連接
  • SYN(同步):在連接建立時用來同步序號
  • FIN(終止):為1時表明發送端數據發送完畢要求釋放連接

7. 接收窗口:佔2個字節,用於流量控制和擁塞控制,表示當前接收緩衝區的大小。在計算機網絡中,通常是用接收方的接收能力的大小來控制發送方的數據發送量。TCP連接的一端根據緩衝區大小確定自己的接收窗口值,告訴對方,使對方可以確定發送數據的字節數。

8.校驗和:佔2個字節,範圍包括首部和數據兩部分。

9.選項是可選的,默認情況是不選。

三次握手與四次揮手(超級重要。面試必問)

  TCP是面向連接的協議,因此每個TCP連接都有3個階段:連接建立、數據傳送和連接釋放。連接建立經歷三個步驟,通常稱為“三次握手”。

  TCP三次握手過程如下:

java網絡編程(1)基礎知識

 1. 第一次握手(客戶端發送請求)

   男孩:“咱倆處對象吧”,並等待對方回覆確認。

  2. 第二次握手(服務端回傳確認)

   女孩:告訴男孩說“可以”,

  3. 第三次握手(客戶端回傳確認)

   男孩說:“那就在一塊吧”,於是倆人有了情侶鏈接關係了。

  注意:握手過程中傳送的包裡不包含數據,三次握手完畢後,客戶端與服務器才正式開始傳送數據。

 TCP四次揮手過程如下

  

java網絡編程(1)基礎知識

由於TCP連接是全雙工的,因此每個方向都必須單獨進行關閉。這原則是當一方完成它的數據發送任務後就能發送一個FIN來終止這個方向的連接。收到一個FIN只意味著這一方向上沒有數據流動,一個TCP連接在收到一個FIN後仍能發送數據。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。

  1. 女孩:要和男孩分手,並等待男孩迴應

  2. 男孩:回覆女孩,先同意分手,不過還是又考慮了一段時間。

  3. 男孩思考了一段時間,還是選擇了分手。

  4. 女孩收到消息,於是倆人正式分手。

  注意:為什麼連接的時候是三次握手,關閉的時候卻是四次揮手?

  因為當服務端收到客戶端的SYN連接請求報文後,可以直接發送SYN+ACK報文。其中ACK報文是用來應答的,SYN報文是用來同步的。但是關閉連接時,當服務端收到FIN報文時,很可能並不會立即關閉socket,所以只能先回復一個ACK報文,告訴客戶端,“你發的FIN報文,我收到了”。只有等到服務端所有的報文都發送完了,我才能發送FIN報文,因此不能一起發送,故需要四步揮手。

(3)UDP協議

  UDP,用戶數據報協議,它是TCP/IP協議簇中無連接的運輸層協議。

  1. UDP是一個非連接的協議,傳輸數據之前源端和終端不建立連接,當它想傳送時就簡單地去抓取來自應用程序的數據,並儘可能快地把它扔到網絡上。
  2. 由於傳輸數據不建立連接,因此也就不需要維護連接狀態,包括收發狀態等,因此一臺服務器可同時向多個客戶端傳輸相同的消息。
  3. UDP信息包的標題很短,只有8個字節,相對於TCP的20個字節信息包的額外開銷很小。
  4. 吞吐量不受擁擠控制算法的調節,只受應用軟件生成數據的速率、傳輸帶寬、源端和終端主機性能的限制。
  5. UDP使用盡量最大努力交付,即不保證可靠交付,因此主機不需要維持複雜的鏈接狀態表。
  6. UDP是面向報文的。發送方的UDP對應用程序交下來的報文,在添加首部受就向下交付給IP層。既不拆分,也不合並,而是保留這些報文的邊界,因此,應用程序需要選擇合適的報文大小。

2.2.3.1 UDP協議格式


java網絡編程(1)基礎知識

UDP協議由兩部分組成:首部和數據。其中,首部僅有8個字節,包括源端口和目的端口、長度(UDP用於數據報的長度)、校驗和。

(4) TCP與UDP的區別

  1. TCP基於連接,UDP是無連接的;
  2. 對系統資源的要求,TCP較多,UDP較少;
  3. UDP程序結構較簡單;
  4. TCP是流模式,而UDP是數據報模式;
  5. TCP保證數據正確性,而UDP可能丟包;TCP保證數據順序,而UDP不保證;

(5)HTTP協議

  HTTP,超文本傳輸協議,它是互聯網上應用最為廣泛的一種網絡協議。HTTP是一種應用層協議,它是基於TCP協議之上的請求/響應式的協議。

  對於從客戶端到服務器的每一個請求,都有4個步驟:

  1. 默認情況下,客戶端在端口80打開與服務器的一個TCP連接,URL中還可以指定其他端口。
  2. 客戶端向服務器發送消息,請求指定路徑上的資源。這個資源包括一個首部,可選地(取決於請求的性質)還可以有一個空行,後面是這個請求的數據。
  3. 服務器向客戶端發送響應。響應以響應碼開頭,後面是包含數據的首部、一個空行以及所請求的文檔或錯誤消息。
  4. 服務器關閉連接。

HTTP報文

HTTP協議是基於TCP協議之上的請求/響應式協議,下面主要介紹HTTP報文的格式,HTTP報文主要有請求報文和響應報文兩種。

首先看HTTP請求報文的格式

"
java網絡編程(1)基礎知識

一. 概述

我們知道計算機之間的通信要經過一系列複雜的過程,計算機之間通過傳輸介質、通信設施和網絡通信協議互聯,實現資源共享和數據傳輸。而我們的網絡編程就是使用程序使互聯網的兩個(或多個)計算機之間進行數據傳輸。當然java語言,為了實現兩個計算機之間的數據傳輸,提供了一系列的接口,使得開發人員可以方便的實現。

不過在正式開始代碼編寫之前就先看看一些通信的基本知識。

二 、網絡體系結構

計算機之間的通信要經過一系列複雜的過程,必須將這兩臺計算機的物理邏輯和通信邏輯好好的規劃好。為此我們先看看計算機網絡的層次模型。然後再進行分析。

java網絡編程(1)基礎知識

從上面這張圖我們對計算機之間的通信特點進行整理一下:

(1)計算機之間的網絡通信被分解為多個層,層與層之間用接口連接。

(2)通信的雙方具有相同的層次,層次實現的功能由協議數據單元(PDU)來描述。

(3)不同系統中的同一層構成對等層,對等層之間通過對等層協議進行通信。

(4)在通信的時候數據必須由一層依次傳遞到下一層,不能跨級傳輸。

為了促進計算機網絡的發展,國際標準化組織ISO在現有網絡的基礎上,提出了不基於具體機型、操作系統或公司的網絡體系結構,稱為開放系統互連參考模型,即OSI/RM。但是ISO制定的OSI參考模型過於龐大、複雜招致了許多批評。因此美國國防部提出了TCP/IP協議棧參考模型,簡化了OSI參考模型,獲得了廣泛的應用。

1、OSI參考模型

OSI參考模型,是國際標準化組織ISO提出的,把網絡通信的工作分為7層,分別是物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。也是我們在大學計算機網絡課程中認識的那樣。下面一張圖來看看。

java網絡編程(1)基礎知識

(1)物理層處於OSI的最底層,是開放系統的基礎,它的功能主要是為計算機提供傳送數據的通路以及傳輸數據。

  (2)數據鏈路層的主要任務是實現計算機網絡中相鄰節點之間的可靠傳輸,把原始的、有差錯的物理傳輸數據加上數據鏈路協議以後,構成邏輯上可靠的數據鏈路。

  (3)網絡層主要完成的功能主要包括路由選擇、網絡尋址、流量控制、擁塞控制、網絡互連等。實現兩個計算機節點之間的數據傳輸。

  (4)傳輸層涉及源端節點到目的端節點之間可靠的信息傳輸。也就是說是採用TCP/IP還是採用UDP協議。他需要三次握手四次揮手。  

  (5)會話層的主要功能是負責應用程序之間建立、維持和中斷會話,提供單工、半雙工和全雙工3種不同的通信方式,使系統和服務之間有序地進行通信。

  (6)表示層關心所傳輸數據信息的格式定義,其主要功能是把應用層提供的信息變換為能夠共同理解的形式,提供字符代碼、數據格式、控制信息格式、加密等的統一表示。

  (7)應用層是直接為應用進程提供服務的。其作用是多個系統應用進程相互通信的同時,完成一系列業務處理所需的服務。

2 、TCP/IP參考模型

  TCP/IP參考模型採用4層的層級結構,每一層都呼叫它的下一層所提供的協議來完成自己的需求,這4個層次分別是:網絡接口層、網絡層(IP層)、傳輸層(TCP層)、應用層。

java網絡編程(1)基礎知識

(1)網絡接口層:對應著OSI參考模型的物理層和數據鏈路層

  (2)網絡層(IP層):是整個TCP/IP協議棧的核心。它的功能是把分組數據發往目標網絡或主機。可以完成將不同類型的網絡(異構網)互連的任務。除此之外,還需要完成擁塞控制的功能。

  (3)傳輸層(TCP層):傳輸層負責在應用進程之間建立端到端的連接和可靠通信。TCP層涉及兩個協議,TCP和UDP。TCP協議提供面向連接的服務,提供按字節流的有序、可靠傳輸,可以實現連接管理、差錯控制、流量控制、擁塞控制等。也就是可靠傳輸。UDP協議提供無連接的服務,用於不需要或無法實現面向連接的網絡應用中。也就是不可靠傳輸。

  (4)應用層:為各種網絡應用提供服務。

3、網絡協議

  OSI參考模型和TCP/IP模型在不同的層次中有許多不同的網絡協議,如圖所示:

java網絡編程(1)基礎知識

網絡協議之間的關係圖如下:

java網絡編程(1)基礎知識

下面我們抽出來一些重要的協議看一下。其他的協議用到的時候再說。

(1)IP協議

  IP協議的作用在於把各種數據包準備無誤的傳遞給對方。由於IP地址是稀有資源,不可能每個人都擁有一個IP地址,所以我們通常的IP地址是路由器給我們生成的IP地址,路由器裡面會記錄我們的MAC地址。而MAC地址是全球唯一的。舉例,IP地址就如同是我們居住小區的地址,而MAC地址就是我們住的那棟樓那個房間那個人。

(2)TCP協議

  TCP層是位於IP層之上,應用層之下的中間層。有可靠的、像管道一樣的TCP連接,還有不可靠的包交換的UDP鏈接。那tcp協議之間的通信數據格式是什麼樣子的呢?也就是什麼樣的數據在傳輸,下面一張圖來看一下:

  TCP報文段包括協議首部和數據兩部分,協議首部的固定部分是20個字節,首部的固定部分後面是選項部分。

java網絡編程(1)基礎知識

下面是報文段首部各個字段的含義,也是《計算機網絡》書中的說明:

  1. 源端口號以及目的端口號:各佔2個字節,端口是傳輸層和應用層的服務接口,用於尋找發送端和接收端的進程,一般來講,通過端口號和IP地址,可以唯一確定一個TCP連接,在網絡編程中,通常被稱為一個socket接口。
  2. 序號:Seq序號,佔4個字節、32位。用來標識從TCP發送端向TCP接收端發送的數據字節流。發起方發送數據時對此進行標記。
  3. 確認序號:Ack序號,佔4個字節、32位。包含發送確認的一端所期望收到的下一個序號。只有ACK標記位為1時,確認序號字段才有效,因此,確認序號應該是上次已經成功收到數據字節序號加1,即Ack=Seq + 1。
  4. 數據偏移:佔4個字節,用於指出TCP首部長度,若不存在選項,則這個值為20字節,數據偏移的最大值為60字節。
  5. 保留字段佔6位,暫時可忽略,值全為0。
  6. 標誌位,6個
  • URG(緊急):為1時表明緊急指針字段有效
  • ACK(確認):為1時表明確認號字段有效
  • PSH(推送):為1時接收方應儘快將這個報文段交給應用層
  • RST(復位):為1時表明TCP連接出現故障必須重建連接
  • SYN(同步):在連接建立時用來同步序號
  • FIN(終止):為1時表明發送端數據發送完畢要求釋放連接

7. 接收窗口:佔2個字節,用於流量控制和擁塞控制,表示當前接收緩衝區的大小。在計算機網絡中,通常是用接收方的接收能力的大小來控制發送方的數據發送量。TCP連接的一端根據緩衝區大小確定自己的接收窗口值,告訴對方,使對方可以確定發送數據的字節數。

8.校驗和:佔2個字節,範圍包括首部和數據兩部分。

9.選項是可選的,默認情況是不選。

三次握手與四次揮手(超級重要。面試必問)

  TCP是面向連接的協議,因此每個TCP連接都有3個階段:連接建立、數據傳送和連接釋放。連接建立經歷三個步驟,通常稱為“三次握手”。

  TCP三次握手過程如下:

java網絡編程(1)基礎知識

 1. 第一次握手(客戶端發送請求)

   男孩:“咱倆處對象吧”,並等待對方回覆確認。

  2. 第二次握手(服務端回傳確認)

   女孩:告訴男孩說“可以”,

  3. 第三次握手(客戶端回傳確認)

   男孩說:“那就在一塊吧”,於是倆人有了情侶鏈接關係了。

  注意:握手過程中傳送的包裡不包含數據,三次握手完畢後,客戶端與服務器才正式開始傳送數據。

 TCP四次揮手過程如下

  

java網絡編程(1)基礎知識

由於TCP連接是全雙工的,因此每個方向都必須單獨進行關閉。這原則是當一方完成它的數據發送任務後就能發送一個FIN來終止這個方向的連接。收到一個FIN只意味著這一方向上沒有數據流動,一個TCP連接在收到一個FIN後仍能發送數據。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。

  1. 女孩:要和男孩分手,並等待男孩迴應

  2. 男孩:回覆女孩,先同意分手,不過還是又考慮了一段時間。

  3. 男孩思考了一段時間,還是選擇了分手。

  4. 女孩收到消息,於是倆人正式分手。

  注意:為什麼連接的時候是三次握手,關閉的時候卻是四次揮手?

  因為當服務端收到客戶端的SYN連接請求報文後,可以直接發送SYN+ACK報文。其中ACK報文是用來應答的,SYN報文是用來同步的。但是關閉連接時,當服務端收到FIN報文時,很可能並不會立即關閉socket,所以只能先回復一個ACK報文,告訴客戶端,“你發的FIN報文,我收到了”。只有等到服務端所有的報文都發送完了,我才能發送FIN報文,因此不能一起發送,故需要四步揮手。

(3)UDP協議

  UDP,用戶數據報協議,它是TCP/IP協議簇中無連接的運輸層協議。

  1. UDP是一個非連接的協議,傳輸數據之前源端和終端不建立連接,當它想傳送時就簡單地去抓取來自應用程序的數據,並儘可能快地把它扔到網絡上。
  2. 由於傳輸數據不建立連接,因此也就不需要維護連接狀態,包括收發狀態等,因此一臺服務器可同時向多個客戶端傳輸相同的消息。
  3. UDP信息包的標題很短,只有8個字節,相對於TCP的20個字節信息包的額外開銷很小。
  4. 吞吐量不受擁擠控制算法的調節,只受應用軟件生成數據的速率、傳輸帶寬、源端和終端主機性能的限制。
  5. UDP使用盡量最大努力交付,即不保證可靠交付,因此主機不需要維持複雜的鏈接狀態表。
  6. UDP是面向報文的。發送方的UDP對應用程序交下來的報文,在添加首部受就向下交付給IP層。既不拆分,也不合並,而是保留這些報文的邊界,因此,應用程序需要選擇合適的報文大小。

2.2.3.1 UDP協議格式


java網絡編程(1)基礎知識

UDP協議由兩部分組成:首部和數據。其中,首部僅有8個字節,包括源端口和目的端口、長度(UDP用於數據報的長度)、校驗和。

(4) TCP與UDP的區別

  1. TCP基於連接,UDP是無連接的;
  2. 對系統資源的要求,TCP較多,UDP較少;
  3. UDP程序結構較簡單;
  4. TCP是流模式,而UDP是數據報模式;
  5. TCP保證數據正確性,而UDP可能丟包;TCP保證數據順序,而UDP不保證;

(5)HTTP協議

  HTTP,超文本傳輸協議,它是互聯網上應用最為廣泛的一種網絡協議。HTTP是一種應用層協議,它是基於TCP協議之上的請求/響應式的協議。

  對於從客戶端到服務器的每一個請求,都有4個步驟:

  1. 默認情況下,客戶端在端口80打開與服務器的一個TCP連接,URL中還可以指定其他端口。
  2. 客戶端向服務器發送消息,請求指定路徑上的資源。這個資源包括一個首部,可選地(取決於請求的性質)還可以有一個空行,後面是這個請求的數據。
  3. 服務器向客戶端發送響應。響應以響應碼開頭,後面是包含數據的首部、一個空行以及所請求的文檔或錯誤消息。
  4. 服務器關閉連接。

HTTP報文

HTTP協議是基於TCP協議之上的請求/響應式協議,下面主要介紹HTTP報文的格式,HTTP報文主要有請求報文和響應報文兩種。

首先看HTTP請求報文的格式

java網絡編程(1)基礎知識

下圖是谷歌瀏覽器內訪問服務器查看的HTTP請求例子:

"
java網絡編程(1)基礎知識

一. 概述

我們知道計算機之間的通信要經過一系列複雜的過程,計算機之間通過傳輸介質、通信設施和網絡通信協議互聯,實現資源共享和數據傳輸。而我們的網絡編程就是使用程序使互聯網的兩個(或多個)計算機之間進行數據傳輸。當然java語言,為了實現兩個計算機之間的數據傳輸,提供了一系列的接口,使得開發人員可以方便的實現。

不過在正式開始代碼編寫之前就先看看一些通信的基本知識。

二 、網絡體系結構

計算機之間的通信要經過一系列複雜的過程,必須將這兩臺計算機的物理邏輯和通信邏輯好好的規劃好。為此我們先看看計算機網絡的層次模型。然後再進行分析。

java網絡編程(1)基礎知識

從上面這張圖我們對計算機之間的通信特點進行整理一下:

(1)計算機之間的網絡通信被分解為多個層,層與層之間用接口連接。

(2)通信的雙方具有相同的層次,層次實現的功能由協議數據單元(PDU)來描述。

(3)不同系統中的同一層構成對等層,對等層之間通過對等層協議進行通信。

(4)在通信的時候數據必須由一層依次傳遞到下一層,不能跨級傳輸。

為了促進計算機網絡的發展,國際標準化組織ISO在現有網絡的基礎上,提出了不基於具體機型、操作系統或公司的網絡體系結構,稱為開放系統互連參考模型,即OSI/RM。但是ISO制定的OSI參考模型過於龐大、複雜招致了許多批評。因此美國國防部提出了TCP/IP協議棧參考模型,簡化了OSI參考模型,獲得了廣泛的應用。

1、OSI參考模型

OSI參考模型,是國際標準化組織ISO提出的,把網絡通信的工作分為7層,分別是物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。也是我們在大學計算機網絡課程中認識的那樣。下面一張圖來看看。

java網絡編程(1)基礎知識

(1)物理層處於OSI的最底層,是開放系統的基礎,它的功能主要是為計算機提供傳送數據的通路以及傳輸數據。

  (2)數據鏈路層的主要任務是實現計算機網絡中相鄰節點之間的可靠傳輸,把原始的、有差錯的物理傳輸數據加上數據鏈路協議以後,構成邏輯上可靠的數據鏈路。

  (3)網絡層主要完成的功能主要包括路由選擇、網絡尋址、流量控制、擁塞控制、網絡互連等。實現兩個計算機節點之間的數據傳輸。

  (4)傳輸層涉及源端節點到目的端節點之間可靠的信息傳輸。也就是說是採用TCP/IP還是採用UDP協議。他需要三次握手四次揮手。  

  (5)會話層的主要功能是負責應用程序之間建立、維持和中斷會話,提供單工、半雙工和全雙工3種不同的通信方式,使系統和服務之間有序地進行通信。

  (6)表示層關心所傳輸數據信息的格式定義,其主要功能是把應用層提供的信息變換為能夠共同理解的形式,提供字符代碼、數據格式、控制信息格式、加密等的統一表示。

  (7)應用層是直接為應用進程提供服務的。其作用是多個系統應用進程相互通信的同時,完成一系列業務處理所需的服務。

2 、TCP/IP參考模型

  TCP/IP參考模型採用4層的層級結構,每一層都呼叫它的下一層所提供的協議來完成自己的需求,這4個層次分別是:網絡接口層、網絡層(IP層)、傳輸層(TCP層)、應用層。

java網絡編程(1)基礎知識

(1)網絡接口層:對應著OSI參考模型的物理層和數據鏈路層

  (2)網絡層(IP層):是整個TCP/IP協議棧的核心。它的功能是把分組數據發往目標網絡或主機。可以完成將不同類型的網絡(異構網)互連的任務。除此之外,還需要完成擁塞控制的功能。

  (3)傳輸層(TCP層):傳輸層負責在應用進程之間建立端到端的連接和可靠通信。TCP層涉及兩個協議,TCP和UDP。TCP協議提供面向連接的服務,提供按字節流的有序、可靠傳輸,可以實現連接管理、差錯控制、流量控制、擁塞控制等。也就是可靠傳輸。UDP協議提供無連接的服務,用於不需要或無法實現面向連接的網絡應用中。也就是不可靠傳輸。

  (4)應用層:為各種網絡應用提供服務。

3、網絡協議

  OSI參考模型和TCP/IP模型在不同的層次中有許多不同的網絡協議,如圖所示:

java網絡編程(1)基礎知識

網絡協議之間的關係圖如下:

java網絡編程(1)基礎知識

下面我們抽出來一些重要的協議看一下。其他的協議用到的時候再說。

(1)IP協議

  IP協議的作用在於把各種數據包準備無誤的傳遞給對方。由於IP地址是稀有資源,不可能每個人都擁有一個IP地址,所以我們通常的IP地址是路由器給我們生成的IP地址,路由器裡面會記錄我們的MAC地址。而MAC地址是全球唯一的。舉例,IP地址就如同是我們居住小區的地址,而MAC地址就是我們住的那棟樓那個房間那個人。

(2)TCP協議

  TCP層是位於IP層之上,應用層之下的中間層。有可靠的、像管道一樣的TCP連接,還有不可靠的包交換的UDP鏈接。那tcp協議之間的通信數據格式是什麼樣子的呢?也就是什麼樣的數據在傳輸,下面一張圖來看一下:

  TCP報文段包括協議首部和數據兩部分,協議首部的固定部分是20個字節,首部的固定部分後面是選項部分。

java網絡編程(1)基礎知識

下面是報文段首部各個字段的含義,也是《計算機網絡》書中的說明:

  1. 源端口號以及目的端口號:各佔2個字節,端口是傳輸層和應用層的服務接口,用於尋找發送端和接收端的進程,一般來講,通過端口號和IP地址,可以唯一確定一個TCP連接,在網絡編程中,通常被稱為一個socket接口。
  2. 序號:Seq序號,佔4個字節、32位。用來標識從TCP發送端向TCP接收端發送的數據字節流。發起方發送數據時對此進行標記。
  3. 確認序號:Ack序號,佔4個字節、32位。包含發送確認的一端所期望收到的下一個序號。只有ACK標記位為1時,確認序號字段才有效,因此,確認序號應該是上次已經成功收到數據字節序號加1,即Ack=Seq + 1。
  4. 數據偏移:佔4個字節,用於指出TCP首部長度,若不存在選項,則這個值為20字節,數據偏移的最大值為60字節。
  5. 保留字段佔6位,暫時可忽略,值全為0。
  6. 標誌位,6個
  • URG(緊急):為1時表明緊急指針字段有效
  • ACK(確認):為1時表明確認號字段有效
  • PSH(推送):為1時接收方應儘快將這個報文段交給應用層
  • RST(復位):為1時表明TCP連接出現故障必須重建連接
  • SYN(同步):在連接建立時用來同步序號
  • FIN(終止):為1時表明發送端數據發送完畢要求釋放連接

7. 接收窗口:佔2個字節,用於流量控制和擁塞控制,表示當前接收緩衝區的大小。在計算機網絡中,通常是用接收方的接收能力的大小來控制發送方的數據發送量。TCP連接的一端根據緩衝區大小確定自己的接收窗口值,告訴對方,使對方可以確定發送數據的字節數。

8.校驗和:佔2個字節,範圍包括首部和數據兩部分。

9.選項是可選的,默認情況是不選。

三次握手與四次揮手(超級重要。面試必問)

  TCP是面向連接的協議,因此每個TCP連接都有3個階段:連接建立、數據傳送和連接釋放。連接建立經歷三個步驟,通常稱為“三次握手”。

  TCP三次握手過程如下:

java網絡編程(1)基礎知識

 1. 第一次握手(客戶端發送請求)

   男孩:“咱倆處對象吧”,並等待對方回覆確認。

  2. 第二次握手(服務端回傳確認)

   女孩:告訴男孩說“可以”,

  3. 第三次握手(客戶端回傳確認)

   男孩說:“那就在一塊吧”,於是倆人有了情侶鏈接關係了。

  注意:握手過程中傳送的包裡不包含數據,三次握手完畢後,客戶端與服務器才正式開始傳送數據。

 TCP四次揮手過程如下

  

java網絡編程(1)基礎知識

由於TCP連接是全雙工的,因此每個方向都必須單獨進行關閉。這原則是當一方完成它的數據發送任務後就能發送一個FIN來終止這個方向的連接。收到一個FIN只意味著這一方向上沒有數據流動,一個TCP連接在收到一個FIN後仍能發送數據。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。

  1. 女孩:要和男孩分手,並等待男孩迴應

  2. 男孩:回覆女孩,先同意分手,不過還是又考慮了一段時間。

  3. 男孩思考了一段時間,還是選擇了分手。

  4. 女孩收到消息,於是倆人正式分手。

  注意:為什麼連接的時候是三次握手,關閉的時候卻是四次揮手?

  因為當服務端收到客戶端的SYN連接請求報文後,可以直接發送SYN+ACK報文。其中ACK報文是用來應答的,SYN報文是用來同步的。但是關閉連接時,當服務端收到FIN報文時,很可能並不會立即關閉socket,所以只能先回復一個ACK報文,告訴客戶端,“你發的FIN報文,我收到了”。只有等到服務端所有的報文都發送完了,我才能發送FIN報文,因此不能一起發送,故需要四步揮手。

(3)UDP協議

  UDP,用戶數據報協議,它是TCP/IP協議簇中無連接的運輸層協議。

  1. UDP是一個非連接的協議,傳輸數據之前源端和終端不建立連接,當它想傳送時就簡單地去抓取來自應用程序的數據,並儘可能快地把它扔到網絡上。
  2. 由於傳輸數據不建立連接,因此也就不需要維護連接狀態,包括收發狀態等,因此一臺服務器可同時向多個客戶端傳輸相同的消息。
  3. UDP信息包的標題很短,只有8個字節,相對於TCP的20個字節信息包的額外開銷很小。
  4. 吞吐量不受擁擠控制算法的調節,只受應用軟件生成數據的速率、傳輸帶寬、源端和終端主機性能的限制。
  5. UDP使用盡量最大努力交付,即不保證可靠交付,因此主機不需要維持複雜的鏈接狀態表。
  6. UDP是面向報文的。發送方的UDP對應用程序交下來的報文,在添加首部受就向下交付給IP層。既不拆分,也不合並,而是保留這些報文的邊界,因此,應用程序需要選擇合適的報文大小。

2.2.3.1 UDP協議格式


java網絡編程(1)基礎知識

UDP協議由兩部分組成:首部和數據。其中,首部僅有8個字節,包括源端口和目的端口、長度(UDP用於數據報的長度)、校驗和。

(4) TCP與UDP的區別

  1. TCP基於連接,UDP是無連接的;
  2. 對系統資源的要求,TCP較多,UDP較少;
  3. UDP程序結構較簡單;
  4. TCP是流模式,而UDP是數據報模式;
  5. TCP保證數據正確性,而UDP可能丟包;TCP保證數據順序,而UDP不保證;

(5)HTTP協議

  HTTP,超文本傳輸協議,它是互聯網上應用最為廣泛的一種網絡協議。HTTP是一種應用層協議,它是基於TCP協議之上的請求/響應式的協議。

  對於從客戶端到服務器的每一個請求,都有4個步驟:

  1. 默認情況下,客戶端在端口80打開與服務器的一個TCP連接,URL中還可以指定其他端口。
  2. 客戶端向服務器發送消息,請求指定路徑上的資源。這個資源包括一個首部,可選地(取決於請求的性質)還可以有一個空行,後面是這個請求的數據。
  3. 服務器向客戶端發送響應。響應以響應碼開頭,後面是包含數據的首部、一個空行以及所請求的文檔或錯誤消息。
  4. 服務器關閉連接。

HTTP報文

HTTP協議是基於TCP協議之上的請求/響應式協議,下面主要介紹HTTP報文的格式,HTTP報文主要有請求報文和響應報文兩種。

首先看HTTP請求報文的格式

java網絡編程(1)基礎知識

下圖是谷歌瀏覽器內訪問服務器查看的HTTP請求例子:

java網絡編程(1)基礎知識

HTTP響應報文格式

"
java網絡編程(1)基礎知識

一. 概述

我們知道計算機之間的通信要經過一系列複雜的過程,計算機之間通過傳輸介質、通信設施和網絡通信協議互聯,實現資源共享和數據傳輸。而我們的網絡編程就是使用程序使互聯網的兩個(或多個)計算機之間進行數據傳輸。當然java語言,為了實現兩個計算機之間的數據傳輸,提供了一系列的接口,使得開發人員可以方便的實現。

不過在正式開始代碼編寫之前就先看看一些通信的基本知識。

二 、網絡體系結構

計算機之間的通信要經過一系列複雜的過程,必須將這兩臺計算機的物理邏輯和通信邏輯好好的規劃好。為此我們先看看計算機網絡的層次模型。然後再進行分析。

java網絡編程(1)基礎知識

從上面這張圖我們對計算機之間的通信特點進行整理一下:

(1)計算機之間的網絡通信被分解為多個層,層與層之間用接口連接。

(2)通信的雙方具有相同的層次,層次實現的功能由協議數據單元(PDU)來描述。

(3)不同系統中的同一層構成對等層,對等層之間通過對等層協議進行通信。

(4)在通信的時候數據必須由一層依次傳遞到下一層,不能跨級傳輸。

為了促進計算機網絡的發展,國際標準化組織ISO在現有網絡的基礎上,提出了不基於具體機型、操作系統或公司的網絡體系結構,稱為開放系統互連參考模型,即OSI/RM。但是ISO制定的OSI參考模型過於龐大、複雜招致了許多批評。因此美國國防部提出了TCP/IP協議棧參考模型,簡化了OSI參考模型,獲得了廣泛的應用。

1、OSI參考模型

OSI參考模型,是國際標準化組織ISO提出的,把網絡通信的工作分為7層,分別是物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。也是我們在大學計算機網絡課程中認識的那樣。下面一張圖來看看。

java網絡編程(1)基礎知識

(1)物理層處於OSI的最底層,是開放系統的基礎,它的功能主要是為計算機提供傳送數據的通路以及傳輸數據。

  (2)數據鏈路層的主要任務是實現計算機網絡中相鄰節點之間的可靠傳輸,把原始的、有差錯的物理傳輸數據加上數據鏈路協議以後,構成邏輯上可靠的數據鏈路。

  (3)網絡層主要完成的功能主要包括路由選擇、網絡尋址、流量控制、擁塞控制、網絡互連等。實現兩個計算機節點之間的數據傳輸。

  (4)傳輸層涉及源端節點到目的端節點之間可靠的信息傳輸。也就是說是採用TCP/IP還是採用UDP協議。他需要三次握手四次揮手。  

  (5)會話層的主要功能是負責應用程序之間建立、維持和中斷會話,提供單工、半雙工和全雙工3種不同的通信方式,使系統和服務之間有序地進行通信。

  (6)表示層關心所傳輸數據信息的格式定義,其主要功能是把應用層提供的信息變換為能夠共同理解的形式,提供字符代碼、數據格式、控制信息格式、加密等的統一表示。

  (7)應用層是直接為應用進程提供服務的。其作用是多個系統應用進程相互通信的同時,完成一系列業務處理所需的服務。

2 、TCP/IP參考模型

  TCP/IP參考模型採用4層的層級結構,每一層都呼叫它的下一層所提供的協議來完成自己的需求,這4個層次分別是:網絡接口層、網絡層(IP層)、傳輸層(TCP層)、應用層。

java網絡編程(1)基礎知識

(1)網絡接口層:對應著OSI參考模型的物理層和數據鏈路層

  (2)網絡層(IP層):是整個TCP/IP協議棧的核心。它的功能是把分組數據發往目標網絡或主機。可以完成將不同類型的網絡(異構網)互連的任務。除此之外,還需要完成擁塞控制的功能。

  (3)傳輸層(TCP層):傳輸層負責在應用進程之間建立端到端的連接和可靠通信。TCP層涉及兩個協議,TCP和UDP。TCP協議提供面向連接的服務,提供按字節流的有序、可靠傳輸,可以實現連接管理、差錯控制、流量控制、擁塞控制等。也就是可靠傳輸。UDP協議提供無連接的服務,用於不需要或無法實現面向連接的網絡應用中。也就是不可靠傳輸。

  (4)應用層:為各種網絡應用提供服務。

3、網絡協議

  OSI參考模型和TCP/IP模型在不同的層次中有許多不同的網絡協議,如圖所示:

java網絡編程(1)基礎知識

網絡協議之間的關係圖如下:

java網絡編程(1)基礎知識

下面我們抽出來一些重要的協議看一下。其他的協議用到的時候再說。

(1)IP協議

  IP協議的作用在於把各種數據包準備無誤的傳遞給對方。由於IP地址是稀有資源,不可能每個人都擁有一個IP地址,所以我們通常的IP地址是路由器給我們生成的IP地址,路由器裡面會記錄我們的MAC地址。而MAC地址是全球唯一的。舉例,IP地址就如同是我們居住小區的地址,而MAC地址就是我們住的那棟樓那個房間那個人。

(2)TCP協議

  TCP層是位於IP層之上,應用層之下的中間層。有可靠的、像管道一樣的TCP連接,還有不可靠的包交換的UDP鏈接。那tcp協議之間的通信數據格式是什麼樣子的呢?也就是什麼樣的數據在傳輸,下面一張圖來看一下:

  TCP報文段包括協議首部和數據兩部分,協議首部的固定部分是20個字節,首部的固定部分後面是選項部分。

java網絡編程(1)基礎知識

下面是報文段首部各個字段的含義,也是《計算機網絡》書中的說明:

  1. 源端口號以及目的端口號:各佔2個字節,端口是傳輸層和應用層的服務接口,用於尋找發送端和接收端的進程,一般來講,通過端口號和IP地址,可以唯一確定一個TCP連接,在網絡編程中,通常被稱為一個socket接口。
  2. 序號:Seq序號,佔4個字節、32位。用來標識從TCP發送端向TCP接收端發送的數據字節流。發起方發送數據時對此進行標記。
  3. 確認序號:Ack序號,佔4個字節、32位。包含發送確認的一端所期望收到的下一個序號。只有ACK標記位為1時,確認序號字段才有效,因此,確認序號應該是上次已經成功收到數據字節序號加1,即Ack=Seq + 1。
  4. 數據偏移:佔4個字節,用於指出TCP首部長度,若不存在選項,則這個值為20字節,數據偏移的最大值為60字節。
  5. 保留字段佔6位,暫時可忽略,值全為0。
  6. 標誌位,6個
  • URG(緊急):為1時表明緊急指針字段有效
  • ACK(確認):為1時表明確認號字段有效
  • PSH(推送):為1時接收方應儘快將這個報文段交給應用層
  • RST(復位):為1時表明TCP連接出現故障必須重建連接
  • SYN(同步):在連接建立時用來同步序號
  • FIN(終止):為1時表明發送端數據發送完畢要求釋放連接

7. 接收窗口:佔2個字節,用於流量控制和擁塞控制,表示當前接收緩衝區的大小。在計算機網絡中,通常是用接收方的接收能力的大小來控制發送方的數據發送量。TCP連接的一端根據緩衝區大小確定自己的接收窗口值,告訴對方,使對方可以確定發送數據的字節數。

8.校驗和:佔2個字節,範圍包括首部和數據兩部分。

9.選項是可選的,默認情況是不選。

三次握手與四次揮手(超級重要。面試必問)

  TCP是面向連接的協議,因此每個TCP連接都有3個階段:連接建立、數據傳送和連接釋放。連接建立經歷三個步驟,通常稱為“三次握手”。

  TCP三次握手過程如下:

java網絡編程(1)基礎知識

 1. 第一次握手(客戶端發送請求)

   男孩:“咱倆處對象吧”,並等待對方回覆確認。

  2. 第二次握手(服務端回傳確認)

   女孩:告訴男孩說“可以”,

  3. 第三次握手(客戶端回傳確認)

   男孩說:“那就在一塊吧”,於是倆人有了情侶鏈接關係了。

  注意:握手過程中傳送的包裡不包含數據,三次握手完畢後,客戶端與服務器才正式開始傳送數據。

 TCP四次揮手過程如下

  

java網絡編程(1)基礎知識

由於TCP連接是全雙工的,因此每個方向都必須單獨進行關閉。這原則是當一方完成它的數據發送任務後就能發送一個FIN來終止這個方向的連接。收到一個FIN只意味著這一方向上沒有數據流動,一個TCP連接在收到一個FIN後仍能發送數據。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。

  1. 女孩:要和男孩分手,並等待男孩迴應

  2. 男孩:回覆女孩,先同意分手,不過還是又考慮了一段時間。

  3. 男孩思考了一段時間,還是選擇了分手。

  4. 女孩收到消息,於是倆人正式分手。

  注意:為什麼連接的時候是三次握手,關閉的時候卻是四次揮手?

  因為當服務端收到客戶端的SYN連接請求報文後,可以直接發送SYN+ACK報文。其中ACK報文是用來應答的,SYN報文是用來同步的。但是關閉連接時,當服務端收到FIN報文時,很可能並不會立即關閉socket,所以只能先回復一個ACK報文,告訴客戶端,“你發的FIN報文,我收到了”。只有等到服務端所有的報文都發送完了,我才能發送FIN報文,因此不能一起發送,故需要四步揮手。

(3)UDP協議

  UDP,用戶數據報協議,它是TCP/IP協議簇中無連接的運輸層協議。

  1. UDP是一個非連接的協議,傳輸數據之前源端和終端不建立連接,當它想傳送時就簡單地去抓取來自應用程序的數據,並儘可能快地把它扔到網絡上。
  2. 由於傳輸數據不建立連接,因此也就不需要維護連接狀態,包括收發狀態等,因此一臺服務器可同時向多個客戶端傳輸相同的消息。
  3. UDP信息包的標題很短,只有8個字節,相對於TCP的20個字節信息包的額外開銷很小。
  4. 吞吐量不受擁擠控制算法的調節,只受應用軟件生成數據的速率、傳輸帶寬、源端和終端主機性能的限制。
  5. UDP使用盡量最大努力交付,即不保證可靠交付,因此主機不需要維持複雜的鏈接狀態表。
  6. UDP是面向報文的。發送方的UDP對應用程序交下來的報文,在添加首部受就向下交付給IP層。既不拆分,也不合並,而是保留這些報文的邊界,因此,應用程序需要選擇合適的報文大小。

2.2.3.1 UDP協議格式


java網絡編程(1)基礎知識

UDP協議由兩部分組成:首部和數據。其中,首部僅有8個字節,包括源端口和目的端口、長度(UDP用於數據報的長度)、校驗和。

(4) TCP與UDP的區別

  1. TCP基於連接,UDP是無連接的;
  2. 對系統資源的要求,TCP較多,UDP較少;
  3. UDP程序結構較簡單;
  4. TCP是流模式,而UDP是數據報模式;
  5. TCP保證數據正確性,而UDP可能丟包;TCP保證數據順序,而UDP不保證;

(5)HTTP協議

  HTTP,超文本傳輸協議,它是互聯網上應用最為廣泛的一種網絡協議。HTTP是一種應用層協議,它是基於TCP協議之上的請求/響應式的協議。

  對於從客戶端到服務器的每一個請求,都有4個步驟:

  1. 默認情況下,客戶端在端口80打開與服務器的一個TCP連接,URL中還可以指定其他端口。
  2. 客戶端向服務器發送消息,請求指定路徑上的資源。這個資源包括一個首部,可選地(取決於請求的性質)還可以有一個空行,後面是這個請求的數據。
  3. 服務器向客戶端發送響應。響應以響應碼開頭,後面是包含數據的首部、一個空行以及所請求的文檔或錯誤消息。
  4. 服務器關閉連接。

HTTP報文

HTTP協議是基於TCP協議之上的請求/響應式協議,下面主要介紹HTTP報文的格式,HTTP報文主要有請求報文和響應報文兩種。

首先看HTTP請求報文的格式

java網絡編程(1)基礎知識

下圖是谷歌瀏覽器內訪問服務器查看的HTTP請求例子:

java網絡編程(1)基礎知識

HTTP響應報文格式

java網絡編程(1)基礎知識

上面這張圖是HTTP響應報文,它由狀態行、首部行和實體主體組成。下圖為HTTP響應報文例子:

"
java網絡編程(1)基礎知識

一. 概述

我們知道計算機之間的通信要經過一系列複雜的過程,計算機之間通過傳輸介質、通信設施和網絡通信協議互聯,實現資源共享和數據傳輸。而我們的網絡編程就是使用程序使互聯網的兩個(或多個)計算機之間進行數據傳輸。當然java語言,為了實現兩個計算機之間的數據傳輸,提供了一系列的接口,使得開發人員可以方便的實現。

不過在正式開始代碼編寫之前就先看看一些通信的基本知識。

二 、網絡體系結構

計算機之間的通信要經過一系列複雜的過程,必須將這兩臺計算機的物理邏輯和通信邏輯好好的規劃好。為此我們先看看計算機網絡的層次模型。然後再進行分析。

java網絡編程(1)基礎知識

從上面這張圖我們對計算機之間的通信特點進行整理一下:

(1)計算機之間的網絡通信被分解為多個層,層與層之間用接口連接。

(2)通信的雙方具有相同的層次,層次實現的功能由協議數據單元(PDU)來描述。

(3)不同系統中的同一層構成對等層,對等層之間通過對等層協議進行通信。

(4)在通信的時候數據必須由一層依次傳遞到下一層,不能跨級傳輸。

為了促進計算機網絡的發展,國際標準化組織ISO在現有網絡的基礎上,提出了不基於具體機型、操作系統或公司的網絡體系結構,稱為開放系統互連參考模型,即OSI/RM。但是ISO制定的OSI參考模型過於龐大、複雜招致了許多批評。因此美國國防部提出了TCP/IP協議棧參考模型,簡化了OSI參考模型,獲得了廣泛的應用。

1、OSI參考模型

OSI參考模型,是國際標準化組織ISO提出的,把網絡通信的工作分為7層,分別是物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。也是我們在大學計算機網絡課程中認識的那樣。下面一張圖來看看。

java網絡編程(1)基礎知識

(1)物理層處於OSI的最底層,是開放系統的基礎,它的功能主要是為計算機提供傳送數據的通路以及傳輸數據。

  (2)數據鏈路層的主要任務是實現計算機網絡中相鄰節點之間的可靠傳輸,把原始的、有差錯的物理傳輸數據加上數據鏈路協議以後,構成邏輯上可靠的數據鏈路。

  (3)網絡層主要完成的功能主要包括路由選擇、網絡尋址、流量控制、擁塞控制、網絡互連等。實現兩個計算機節點之間的數據傳輸。

  (4)傳輸層涉及源端節點到目的端節點之間可靠的信息傳輸。也就是說是採用TCP/IP還是採用UDP協議。他需要三次握手四次揮手。  

  (5)會話層的主要功能是負責應用程序之間建立、維持和中斷會話,提供單工、半雙工和全雙工3種不同的通信方式,使系統和服務之間有序地進行通信。

  (6)表示層關心所傳輸數據信息的格式定義,其主要功能是把應用層提供的信息變換為能夠共同理解的形式,提供字符代碼、數據格式、控制信息格式、加密等的統一表示。

  (7)應用層是直接為應用進程提供服務的。其作用是多個系統應用進程相互通信的同時,完成一系列業務處理所需的服務。

2 、TCP/IP參考模型

  TCP/IP參考模型採用4層的層級結構,每一層都呼叫它的下一層所提供的協議來完成自己的需求,這4個層次分別是:網絡接口層、網絡層(IP層)、傳輸層(TCP層)、應用層。

java網絡編程(1)基礎知識

(1)網絡接口層:對應著OSI參考模型的物理層和數據鏈路層

  (2)網絡層(IP層):是整個TCP/IP協議棧的核心。它的功能是把分組數據發往目標網絡或主機。可以完成將不同類型的網絡(異構網)互連的任務。除此之外,還需要完成擁塞控制的功能。

  (3)傳輸層(TCP層):傳輸層負責在應用進程之間建立端到端的連接和可靠通信。TCP層涉及兩個協議,TCP和UDP。TCP協議提供面向連接的服務,提供按字節流的有序、可靠傳輸,可以實現連接管理、差錯控制、流量控制、擁塞控制等。也就是可靠傳輸。UDP協議提供無連接的服務,用於不需要或無法實現面向連接的網絡應用中。也就是不可靠傳輸。

  (4)應用層:為各種網絡應用提供服務。

3、網絡協議

  OSI參考模型和TCP/IP模型在不同的層次中有許多不同的網絡協議,如圖所示:

java網絡編程(1)基礎知識

網絡協議之間的關係圖如下:

java網絡編程(1)基礎知識

下面我們抽出來一些重要的協議看一下。其他的協議用到的時候再說。

(1)IP協議

  IP協議的作用在於把各種數據包準備無誤的傳遞給對方。由於IP地址是稀有資源,不可能每個人都擁有一個IP地址,所以我們通常的IP地址是路由器給我們生成的IP地址,路由器裡面會記錄我們的MAC地址。而MAC地址是全球唯一的。舉例,IP地址就如同是我們居住小區的地址,而MAC地址就是我們住的那棟樓那個房間那個人。

(2)TCP協議

  TCP層是位於IP層之上,應用層之下的中間層。有可靠的、像管道一樣的TCP連接,還有不可靠的包交換的UDP鏈接。那tcp協議之間的通信數據格式是什麼樣子的呢?也就是什麼樣的數據在傳輸,下面一張圖來看一下:

  TCP報文段包括協議首部和數據兩部分,協議首部的固定部分是20個字節,首部的固定部分後面是選項部分。

java網絡編程(1)基礎知識

下面是報文段首部各個字段的含義,也是《計算機網絡》書中的說明:

  1. 源端口號以及目的端口號:各佔2個字節,端口是傳輸層和應用層的服務接口,用於尋找發送端和接收端的進程,一般來講,通過端口號和IP地址,可以唯一確定一個TCP連接,在網絡編程中,通常被稱為一個socket接口。
  2. 序號:Seq序號,佔4個字節、32位。用來標識從TCP發送端向TCP接收端發送的數據字節流。發起方發送數據時對此進行標記。
  3. 確認序號:Ack序號,佔4個字節、32位。包含發送確認的一端所期望收到的下一個序號。只有ACK標記位為1時,確認序號字段才有效,因此,確認序號應該是上次已經成功收到數據字節序號加1,即Ack=Seq + 1。
  4. 數據偏移:佔4個字節,用於指出TCP首部長度,若不存在選項,則這個值為20字節,數據偏移的最大值為60字節。
  5. 保留字段佔6位,暫時可忽略,值全為0。
  6. 標誌位,6個
  • URG(緊急):為1時表明緊急指針字段有效
  • ACK(確認):為1時表明確認號字段有效
  • PSH(推送):為1時接收方應儘快將這個報文段交給應用層
  • RST(復位):為1時表明TCP連接出現故障必須重建連接
  • SYN(同步):在連接建立時用來同步序號
  • FIN(終止):為1時表明發送端數據發送完畢要求釋放連接

7. 接收窗口:佔2個字節,用於流量控制和擁塞控制,表示當前接收緩衝區的大小。在計算機網絡中,通常是用接收方的接收能力的大小來控制發送方的數據發送量。TCP連接的一端根據緩衝區大小確定自己的接收窗口值,告訴對方,使對方可以確定發送數據的字節數。

8.校驗和:佔2個字節,範圍包括首部和數據兩部分。

9.選項是可選的,默認情況是不選。

三次握手與四次揮手(超級重要。面試必問)

  TCP是面向連接的協議,因此每個TCP連接都有3個階段:連接建立、數據傳送和連接釋放。連接建立經歷三個步驟,通常稱為“三次握手”。

  TCP三次握手過程如下:

java網絡編程(1)基礎知識

 1. 第一次握手(客戶端發送請求)

   男孩:“咱倆處對象吧”,並等待對方回覆確認。

  2. 第二次握手(服務端回傳確認)

   女孩:告訴男孩說“可以”,

  3. 第三次握手(客戶端回傳確認)

   男孩說:“那就在一塊吧”,於是倆人有了情侶鏈接關係了。

  注意:握手過程中傳送的包裡不包含數據,三次握手完畢後,客戶端與服務器才正式開始傳送數據。

 TCP四次揮手過程如下

  

java網絡編程(1)基礎知識

由於TCP連接是全雙工的,因此每個方向都必須單獨進行關閉。這原則是當一方完成它的數據發送任務後就能發送一個FIN來終止這個方向的連接。收到一個FIN只意味著這一方向上沒有數據流動,一個TCP連接在收到一個FIN後仍能發送數據。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。

  1. 女孩:要和男孩分手,並等待男孩迴應

  2. 男孩:回覆女孩,先同意分手,不過還是又考慮了一段時間。

  3. 男孩思考了一段時間,還是選擇了分手。

  4. 女孩收到消息,於是倆人正式分手。

  注意:為什麼連接的時候是三次握手,關閉的時候卻是四次揮手?

  因為當服務端收到客戶端的SYN連接請求報文後,可以直接發送SYN+ACK報文。其中ACK報文是用來應答的,SYN報文是用來同步的。但是關閉連接時,當服務端收到FIN報文時,很可能並不會立即關閉socket,所以只能先回復一個ACK報文,告訴客戶端,“你發的FIN報文,我收到了”。只有等到服務端所有的報文都發送完了,我才能發送FIN報文,因此不能一起發送,故需要四步揮手。

(3)UDP協議

  UDP,用戶數據報協議,它是TCP/IP協議簇中無連接的運輸層協議。

  1. UDP是一個非連接的協議,傳輸數據之前源端和終端不建立連接,當它想傳送時就簡單地去抓取來自應用程序的數據,並儘可能快地把它扔到網絡上。
  2. 由於傳輸數據不建立連接,因此也就不需要維護連接狀態,包括收發狀態等,因此一臺服務器可同時向多個客戶端傳輸相同的消息。
  3. UDP信息包的標題很短,只有8個字節,相對於TCP的20個字節信息包的額外開銷很小。
  4. 吞吐量不受擁擠控制算法的調節,只受應用軟件生成數據的速率、傳輸帶寬、源端和終端主機性能的限制。
  5. UDP使用盡量最大努力交付,即不保證可靠交付,因此主機不需要維持複雜的鏈接狀態表。
  6. UDP是面向報文的。發送方的UDP對應用程序交下來的報文,在添加首部受就向下交付給IP層。既不拆分,也不合並,而是保留這些報文的邊界,因此,應用程序需要選擇合適的報文大小。

2.2.3.1 UDP協議格式


java網絡編程(1)基礎知識

UDP協議由兩部分組成:首部和數據。其中,首部僅有8個字節,包括源端口和目的端口、長度(UDP用於數據報的長度)、校驗和。

(4) TCP與UDP的區別

  1. TCP基於連接,UDP是無連接的;
  2. 對系統資源的要求,TCP較多,UDP較少;
  3. UDP程序結構較簡單;
  4. TCP是流模式,而UDP是數據報模式;
  5. TCP保證數據正確性,而UDP可能丟包;TCP保證數據順序,而UDP不保證;

(5)HTTP協議

  HTTP,超文本傳輸協議,它是互聯網上應用最為廣泛的一種網絡協議。HTTP是一種應用層協議,它是基於TCP協議之上的請求/響應式的協議。

  對於從客戶端到服務器的每一個請求,都有4個步驟:

  1. 默認情況下,客戶端在端口80打開與服務器的一個TCP連接,URL中還可以指定其他端口。
  2. 客戶端向服務器發送消息,請求指定路徑上的資源。這個資源包括一個首部,可選地(取決於請求的性質)還可以有一個空行,後面是這個請求的數據。
  3. 服務器向客戶端發送響應。響應以響應碼開頭,後面是包含數據的首部、一個空行以及所請求的文檔或錯誤消息。
  4. 服務器關閉連接。

HTTP報文

HTTP協議是基於TCP協議之上的請求/響應式協議,下面主要介紹HTTP報文的格式,HTTP報文主要有請求報文和響應報文兩種。

首先看HTTP請求報文的格式

java網絡編程(1)基礎知識

下圖是谷歌瀏覽器內訪問服務器查看的HTTP請求例子:

java網絡編程(1)基礎知識

HTTP響應報文格式

java網絡編程(1)基礎知識

上面這張圖是HTTP響應報文,它由狀態行、首部行和實體主體組成。下圖為HTTP響應報文例子:

java網絡編程(1)基礎知識

HTTP請求方法和響應狀態碼

  在上面的HTTP請求報文例子中,我們可以看到請求方法是GET,這表示請求讀取由URL所標誌的信息,除了GET,還有其他幾種常用的方法。

 

"
java網絡編程(1)基礎知識

一. 概述

我們知道計算機之間的通信要經過一系列複雜的過程,計算機之間通過傳輸介質、通信設施和網絡通信協議互聯,實現資源共享和數據傳輸。而我們的網絡編程就是使用程序使互聯網的兩個(或多個)計算機之間進行數據傳輸。當然java語言,為了實現兩個計算機之間的數據傳輸,提供了一系列的接口,使得開發人員可以方便的實現。

不過在正式開始代碼編寫之前就先看看一些通信的基本知識。

二 、網絡體系結構

計算機之間的通信要經過一系列複雜的過程,必須將這兩臺計算機的物理邏輯和通信邏輯好好的規劃好。為此我們先看看計算機網絡的層次模型。然後再進行分析。

java網絡編程(1)基礎知識

從上面這張圖我們對計算機之間的通信特點進行整理一下:

(1)計算機之間的網絡通信被分解為多個層,層與層之間用接口連接。

(2)通信的雙方具有相同的層次,層次實現的功能由協議數據單元(PDU)來描述。

(3)不同系統中的同一層構成對等層,對等層之間通過對等層協議進行通信。

(4)在通信的時候數據必須由一層依次傳遞到下一層,不能跨級傳輸。

為了促進計算機網絡的發展,國際標準化組織ISO在現有網絡的基礎上,提出了不基於具體機型、操作系統或公司的網絡體系結構,稱為開放系統互連參考模型,即OSI/RM。但是ISO制定的OSI參考模型過於龐大、複雜招致了許多批評。因此美國國防部提出了TCP/IP協議棧參考模型,簡化了OSI參考模型,獲得了廣泛的應用。

1、OSI參考模型

OSI參考模型,是國際標準化組織ISO提出的,把網絡通信的工作分為7層,分別是物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。也是我們在大學計算機網絡課程中認識的那樣。下面一張圖來看看。

java網絡編程(1)基礎知識

(1)物理層處於OSI的最底層,是開放系統的基礎,它的功能主要是為計算機提供傳送數據的通路以及傳輸數據。

  (2)數據鏈路層的主要任務是實現計算機網絡中相鄰節點之間的可靠傳輸,把原始的、有差錯的物理傳輸數據加上數據鏈路協議以後,構成邏輯上可靠的數據鏈路。

  (3)網絡層主要完成的功能主要包括路由選擇、網絡尋址、流量控制、擁塞控制、網絡互連等。實現兩個計算機節點之間的數據傳輸。

  (4)傳輸層涉及源端節點到目的端節點之間可靠的信息傳輸。也就是說是採用TCP/IP還是採用UDP協議。他需要三次握手四次揮手。  

  (5)會話層的主要功能是負責應用程序之間建立、維持和中斷會話,提供單工、半雙工和全雙工3種不同的通信方式,使系統和服務之間有序地進行通信。

  (6)表示層關心所傳輸數據信息的格式定義,其主要功能是把應用層提供的信息變換為能夠共同理解的形式,提供字符代碼、數據格式、控制信息格式、加密等的統一表示。

  (7)應用層是直接為應用進程提供服務的。其作用是多個系統應用進程相互通信的同時,完成一系列業務處理所需的服務。

2 、TCP/IP參考模型

  TCP/IP參考模型採用4層的層級結構,每一層都呼叫它的下一層所提供的協議來完成自己的需求,這4個層次分別是:網絡接口層、網絡層(IP層)、傳輸層(TCP層)、應用層。

java網絡編程(1)基礎知識

(1)網絡接口層:對應著OSI參考模型的物理層和數據鏈路層

  (2)網絡層(IP層):是整個TCP/IP協議棧的核心。它的功能是把分組數據發往目標網絡或主機。可以完成將不同類型的網絡(異構網)互連的任務。除此之外,還需要完成擁塞控制的功能。

  (3)傳輸層(TCP層):傳輸層負責在應用進程之間建立端到端的連接和可靠通信。TCP層涉及兩個協議,TCP和UDP。TCP協議提供面向連接的服務,提供按字節流的有序、可靠傳輸,可以實現連接管理、差錯控制、流量控制、擁塞控制等。也就是可靠傳輸。UDP協議提供無連接的服務,用於不需要或無法實現面向連接的網絡應用中。也就是不可靠傳輸。

  (4)應用層:為各種網絡應用提供服務。

3、網絡協議

  OSI參考模型和TCP/IP模型在不同的層次中有許多不同的網絡協議,如圖所示:

java網絡編程(1)基礎知識

網絡協議之間的關係圖如下:

java網絡編程(1)基礎知識

下面我們抽出來一些重要的協議看一下。其他的協議用到的時候再說。

(1)IP協議

  IP協議的作用在於把各種數據包準備無誤的傳遞給對方。由於IP地址是稀有資源,不可能每個人都擁有一個IP地址,所以我們通常的IP地址是路由器給我們生成的IP地址,路由器裡面會記錄我們的MAC地址。而MAC地址是全球唯一的。舉例,IP地址就如同是我們居住小區的地址,而MAC地址就是我們住的那棟樓那個房間那個人。

(2)TCP協議

  TCP層是位於IP層之上,應用層之下的中間層。有可靠的、像管道一樣的TCP連接,還有不可靠的包交換的UDP鏈接。那tcp協議之間的通信數據格式是什麼樣子的呢?也就是什麼樣的數據在傳輸,下面一張圖來看一下:

  TCP報文段包括協議首部和數據兩部分,協議首部的固定部分是20個字節,首部的固定部分後面是選項部分。

java網絡編程(1)基礎知識

下面是報文段首部各個字段的含義,也是《計算機網絡》書中的說明:

  1. 源端口號以及目的端口號:各佔2個字節,端口是傳輸層和應用層的服務接口,用於尋找發送端和接收端的進程,一般來講,通過端口號和IP地址,可以唯一確定一個TCP連接,在網絡編程中,通常被稱為一個socket接口。
  2. 序號:Seq序號,佔4個字節、32位。用來標識從TCP發送端向TCP接收端發送的數據字節流。發起方發送數據時對此進行標記。
  3. 確認序號:Ack序號,佔4個字節、32位。包含發送確認的一端所期望收到的下一個序號。只有ACK標記位為1時,確認序號字段才有效,因此,確認序號應該是上次已經成功收到數據字節序號加1,即Ack=Seq + 1。
  4. 數據偏移:佔4個字節,用於指出TCP首部長度,若不存在選項,則這個值為20字節,數據偏移的最大值為60字節。
  5. 保留字段佔6位,暫時可忽略,值全為0。
  6. 標誌位,6個
  • URG(緊急):為1時表明緊急指針字段有效
  • ACK(確認):為1時表明確認號字段有效
  • PSH(推送):為1時接收方應儘快將這個報文段交給應用層
  • RST(復位):為1時表明TCP連接出現故障必須重建連接
  • SYN(同步):在連接建立時用來同步序號
  • FIN(終止):為1時表明發送端數據發送完畢要求釋放連接

7. 接收窗口:佔2個字節,用於流量控制和擁塞控制,表示當前接收緩衝區的大小。在計算機網絡中,通常是用接收方的接收能力的大小來控制發送方的數據發送量。TCP連接的一端根據緩衝區大小確定自己的接收窗口值,告訴對方,使對方可以確定發送數據的字節數。

8.校驗和:佔2個字節,範圍包括首部和數據兩部分。

9.選項是可選的,默認情況是不選。

三次握手與四次揮手(超級重要。面試必問)

  TCP是面向連接的協議,因此每個TCP連接都有3個階段:連接建立、數據傳送和連接釋放。連接建立經歷三個步驟,通常稱為“三次握手”。

  TCP三次握手過程如下:

java網絡編程(1)基礎知識

 1. 第一次握手(客戶端發送請求)

   男孩:“咱倆處對象吧”,並等待對方回覆確認。

  2. 第二次握手(服務端回傳確認)

   女孩:告訴男孩說“可以”,

  3. 第三次握手(客戶端回傳確認)

   男孩說:“那就在一塊吧”,於是倆人有了情侶鏈接關係了。

  注意:握手過程中傳送的包裡不包含數據,三次握手完畢後,客戶端與服務器才正式開始傳送數據。

 TCP四次揮手過程如下

  

java網絡編程(1)基礎知識

由於TCP連接是全雙工的,因此每個方向都必須單獨進行關閉。這原則是當一方完成它的數據發送任務後就能發送一個FIN來終止這個方向的連接。收到一個FIN只意味著這一方向上沒有數據流動,一個TCP連接在收到一個FIN後仍能發送數據。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。

  1. 女孩:要和男孩分手,並等待男孩迴應

  2. 男孩:回覆女孩,先同意分手,不過還是又考慮了一段時間。

  3. 男孩思考了一段時間,還是選擇了分手。

  4. 女孩收到消息,於是倆人正式分手。

  注意:為什麼連接的時候是三次握手,關閉的時候卻是四次揮手?

  因為當服務端收到客戶端的SYN連接請求報文後,可以直接發送SYN+ACK報文。其中ACK報文是用來應答的,SYN報文是用來同步的。但是關閉連接時,當服務端收到FIN報文時,很可能並不會立即關閉socket,所以只能先回復一個ACK報文,告訴客戶端,“你發的FIN報文,我收到了”。只有等到服務端所有的報文都發送完了,我才能發送FIN報文,因此不能一起發送,故需要四步揮手。

(3)UDP協議

  UDP,用戶數據報協議,它是TCP/IP協議簇中無連接的運輸層協議。

  1. UDP是一個非連接的協議,傳輸數據之前源端和終端不建立連接,當它想傳送時就簡單地去抓取來自應用程序的數據,並儘可能快地把它扔到網絡上。
  2. 由於傳輸數據不建立連接,因此也就不需要維護連接狀態,包括收發狀態等,因此一臺服務器可同時向多個客戶端傳輸相同的消息。
  3. UDP信息包的標題很短,只有8個字節,相對於TCP的20個字節信息包的額外開銷很小。
  4. 吞吐量不受擁擠控制算法的調節,只受應用軟件生成數據的速率、傳輸帶寬、源端和終端主機性能的限制。
  5. UDP使用盡量最大努力交付,即不保證可靠交付,因此主機不需要維持複雜的鏈接狀態表。
  6. UDP是面向報文的。發送方的UDP對應用程序交下來的報文,在添加首部受就向下交付給IP層。既不拆分,也不合並,而是保留這些報文的邊界,因此,應用程序需要選擇合適的報文大小。

2.2.3.1 UDP協議格式


java網絡編程(1)基礎知識

UDP協議由兩部分組成:首部和數據。其中,首部僅有8個字節,包括源端口和目的端口、長度(UDP用於數據報的長度)、校驗和。

(4) TCP與UDP的區別

  1. TCP基於連接,UDP是無連接的;
  2. 對系統資源的要求,TCP較多,UDP較少;
  3. UDP程序結構較簡單;
  4. TCP是流模式,而UDP是數據報模式;
  5. TCP保證數據正確性,而UDP可能丟包;TCP保證數據順序,而UDP不保證;

(5)HTTP協議

  HTTP,超文本傳輸協議,它是互聯網上應用最為廣泛的一種網絡協議。HTTP是一種應用層協議,它是基於TCP協議之上的請求/響應式的協議。

  對於從客戶端到服務器的每一個請求,都有4個步驟:

  1. 默認情況下,客戶端在端口80打開與服務器的一個TCP連接,URL中還可以指定其他端口。
  2. 客戶端向服務器發送消息,請求指定路徑上的資源。這個資源包括一個首部,可選地(取決於請求的性質)還可以有一個空行,後面是這個請求的數據。
  3. 服務器向客戶端發送響應。響應以響應碼開頭,後面是包含數據的首部、一個空行以及所請求的文檔或錯誤消息。
  4. 服務器關閉連接。

HTTP報文

HTTP協議是基於TCP協議之上的請求/響應式協議,下面主要介紹HTTP報文的格式,HTTP報文主要有請求報文和響應報文兩種。

首先看HTTP請求報文的格式

java網絡編程(1)基礎知識

下圖是谷歌瀏覽器內訪問服務器查看的HTTP請求例子:

java網絡編程(1)基礎知識

HTTP響應報文格式

java網絡編程(1)基礎知識

上面這張圖是HTTP響應報文,它由狀態行、首部行和實體主體組成。下圖為HTTP響應報文例子:

java網絡編程(1)基礎知識

HTTP請求方法和響應狀態碼

  在上面的HTTP請求報文例子中,我們可以看到請求方法是GET,這表示請求讀取由URL所標誌的信息,除了GET,還有其他幾種常用的方法。

 

java網絡編程(1)基礎知識

在HTTP響應報文的例子中,我們可以看到狀態碼是200,表示響應成功。下表是其他狀態碼,總共5大類,33種。

"
java網絡編程(1)基礎知識

一. 概述

我們知道計算機之間的通信要經過一系列複雜的過程,計算機之間通過傳輸介質、通信設施和網絡通信協議互聯,實現資源共享和數據傳輸。而我們的網絡編程就是使用程序使互聯網的兩個(或多個)計算機之間進行數據傳輸。當然java語言,為了實現兩個計算機之間的數據傳輸,提供了一系列的接口,使得開發人員可以方便的實現。

不過在正式開始代碼編寫之前就先看看一些通信的基本知識。

二 、網絡體系結構

計算機之間的通信要經過一系列複雜的過程,必須將這兩臺計算機的物理邏輯和通信邏輯好好的規劃好。為此我們先看看計算機網絡的層次模型。然後再進行分析。

java網絡編程(1)基礎知識

從上面這張圖我們對計算機之間的通信特點進行整理一下:

(1)計算機之間的網絡通信被分解為多個層,層與層之間用接口連接。

(2)通信的雙方具有相同的層次,層次實現的功能由協議數據單元(PDU)來描述。

(3)不同系統中的同一層構成對等層,對等層之間通過對等層協議進行通信。

(4)在通信的時候數據必須由一層依次傳遞到下一層,不能跨級傳輸。

為了促進計算機網絡的發展,國際標準化組織ISO在現有網絡的基礎上,提出了不基於具體機型、操作系統或公司的網絡體系結構,稱為開放系統互連參考模型,即OSI/RM。但是ISO制定的OSI參考模型過於龐大、複雜招致了許多批評。因此美國國防部提出了TCP/IP協議棧參考模型,簡化了OSI參考模型,獲得了廣泛的應用。

1、OSI參考模型

OSI參考模型,是國際標準化組織ISO提出的,把網絡通信的工作分為7層,分別是物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。也是我們在大學計算機網絡課程中認識的那樣。下面一張圖來看看。

java網絡編程(1)基礎知識

(1)物理層處於OSI的最底層,是開放系統的基礎,它的功能主要是為計算機提供傳送數據的通路以及傳輸數據。

  (2)數據鏈路層的主要任務是實現計算機網絡中相鄰節點之間的可靠傳輸,把原始的、有差錯的物理傳輸數據加上數據鏈路協議以後,構成邏輯上可靠的數據鏈路。

  (3)網絡層主要完成的功能主要包括路由選擇、網絡尋址、流量控制、擁塞控制、網絡互連等。實現兩個計算機節點之間的數據傳輸。

  (4)傳輸層涉及源端節點到目的端節點之間可靠的信息傳輸。也就是說是採用TCP/IP還是採用UDP協議。他需要三次握手四次揮手。  

  (5)會話層的主要功能是負責應用程序之間建立、維持和中斷會話,提供單工、半雙工和全雙工3種不同的通信方式,使系統和服務之間有序地進行通信。

  (6)表示層關心所傳輸數據信息的格式定義,其主要功能是把應用層提供的信息變換為能夠共同理解的形式,提供字符代碼、數據格式、控制信息格式、加密等的統一表示。

  (7)應用層是直接為應用進程提供服務的。其作用是多個系統應用進程相互通信的同時,完成一系列業務處理所需的服務。

2 、TCP/IP參考模型

  TCP/IP參考模型採用4層的層級結構,每一層都呼叫它的下一層所提供的協議來完成自己的需求,這4個層次分別是:網絡接口層、網絡層(IP層)、傳輸層(TCP層)、應用層。

java網絡編程(1)基礎知識

(1)網絡接口層:對應著OSI參考模型的物理層和數據鏈路層

  (2)網絡層(IP層):是整個TCP/IP協議棧的核心。它的功能是把分組數據發往目標網絡或主機。可以完成將不同類型的網絡(異構網)互連的任務。除此之外,還需要完成擁塞控制的功能。

  (3)傳輸層(TCP層):傳輸層負責在應用進程之間建立端到端的連接和可靠通信。TCP層涉及兩個協議,TCP和UDP。TCP協議提供面向連接的服務,提供按字節流的有序、可靠傳輸,可以實現連接管理、差錯控制、流量控制、擁塞控制等。也就是可靠傳輸。UDP協議提供無連接的服務,用於不需要或無法實現面向連接的網絡應用中。也就是不可靠傳輸。

  (4)應用層:為各種網絡應用提供服務。

3、網絡協議

  OSI參考模型和TCP/IP模型在不同的層次中有許多不同的網絡協議,如圖所示:

java網絡編程(1)基礎知識

網絡協議之間的關係圖如下:

java網絡編程(1)基礎知識

下面我們抽出來一些重要的協議看一下。其他的協議用到的時候再說。

(1)IP協議

  IP協議的作用在於把各種數據包準備無誤的傳遞給對方。由於IP地址是稀有資源,不可能每個人都擁有一個IP地址,所以我們通常的IP地址是路由器給我們生成的IP地址,路由器裡面會記錄我們的MAC地址。而MAC地址是全球唯一的。舉例,IP地址就如同是我們居住小區的地址,而MAC地址就是我們住的那棟樓那個房間那個人。

(2)TCP協議

  TCP層是位於IP層之上,應用層之下的中間層。有可靠的、像管道一樣的TCP連接,還有不可靠的包交換的UDP鏈接。那tcp協議之間的通信數據格式是什麼樣子的呢?也就是什麼樣的數據在傳輸,下面一張圖來看一下:

  TCP報文段包括協議首部和數據兩部分,協議首部的固定部分是20個字節,首部的固定部分後面是選項部分。

java網絡編程(1)基礎知識

下面是報文段首部各個字段的含義,也是《計算機網絡》書中的說明:

  1. 源端口號以及目的端口號:各佔2個字節,端口是傳輸層和應用層的服務接口,用於尋找發送端和接收端的進程,一般來講,通過端口號和IP地址,可以唯一確定一個TCP連接,在網絡編程中,通常被稱為一個socket接口。
  2. 序號:Seq序號,佔4個字節、32位。用來標識從TCP發送端向TCP接收端發送的數據字節流。發起方發送數據時對此進行標記。
  3. 確認序號:Ack序號,佔4個字節、32位。包含發送確認的一端所期望收到的下一個序號。只有ACK標記位為1時,確認序號字段才有效,因此,確認序號應該是上次已經成功收到數據字節序號加1,即Ack=Seq + 1。
  4. 數據偏移:佔4個字節,用於指出TCP首部長度,若不存在選項,則這個值為20字節,數據偏移的最大值為60字節。
  5. 保留字段佔6位,暫時可忽略,值全為0。
  6. 標誌位,6個
  • URG(緊急):為1時表明緊急指針字段有效
  • ACK(確認):為1時表明確認號字段有效
  • PSH(推送):為1時接收方應儘快將這個報文段交給應用層
  • RST(復位):為1時表明TCP連接出現故障必須重建連接
  • SYN(同步):在連接建立時用來同步序號
  • FIN(終止):為1時表明發送端數據發送完畢要求釋放連接

7. 接收窗口:佔2個字節,用於流量控制和擁塞控制,表示當前接收緩衝區的大小。在計算機網絡中,通常是用接收方的接收能力的大小來控制發送方的數據發送量。TCP連接的一端根據緩衝區大小確定自己的接收窗口值,告訴對方,使對方可以確定發送數據的字節數。

8.校驗和:佔2個字節,範圍包括首部和數據兩部分。

9.選項是可選的,默認情況是不選。

三次握手與四次揮手(超級重要。面試必問)

  TCP是面向連接的協議,因此每個TCP連接都有3個階段:連接建立、數據傳送和連接釋放。連接建立經歷三個步驟,通常稱為“三次握手”。

  TCP三次握手過程如下:

java網絡編程(1)基礎知識

 1. 第一次握手(客戶端發送請求)

   男孩:“咱倆處對象吧”,並等待對方回覆確認。

  2. 第二次握手(服務端回傳確認)

   女孩:告訴男孩說“可以”,

  3. 第三次握手(客戶端回傳確認)

   男孩說:“那就在一塊吧”,於是倆人有了情侶鏈接關係了。

  注意:握手過程中傳送的包裡不包含數據,三次握手完畢後,客戶端與服務器才正式開始傳送數據。

 TCP四次揮手過程如下

  

java網絡編程(1)基礎知識

由於TCP連接是全雙工的,因此每個方向都必須單獨進行關閉。這原則是當一方完成它的數據發送任務後就能發送一個FIN來終止這個方向的連接。收到一個FIN只意味著這一方向上沒有數據流動,一個TCP連接在收到一個FIN後仍能發送數據。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。

  1. 女孩:要和男孩分手,並等待男孩迴應

  2. 男孩:回覆女孩,先同意分手,不過還是又考慮了一段時間。

  3. 男孩思考了一段時間,還是選擇了分手。

  4. 女孩收到消息,於是倆人正式分手。

  注意:為什麼連接的時候是三次握手,關閉的時候卻是四次揮手?

  因為當服務端收到客戶端的SYN連接請求報文後,可以直接發送SYN+ACK報文。其中ACK報文是用來應答的,SYN報文是用來同步的。但是關閉連接時,當服務端收到FIN報文時,很可能並不會立即關閉socket,所以只能先回復一個ACK報文,告訴客戶端,“你發的FIN報文,我收到了”。只有等到服務端所有的報文都發送完了,我才能發送FIN報文,因此不能一起發送,故需要四步揮手。

(3)UDP協議

  UDP,用戶數據報協議,它是TCP/IP協議簇中無連接的運輸層協議。

  1. UDP是一個非連接的協議,傳輸數據之前源端和終端不建立連接,當它想傳送時就簡單地去抓取來自應用程序的數據,並儘可能快地把它扔到網絡上。
  2. 由於傳輸數據不建立連接,因此也就不需要維護連接狀態,包括收發狀態等,因此一臺服務器可同時向多個客戶端傳輸相同的消息。
  3. UDP信息包的標題很短,只有8個字節,相對於TCP的20個字節信息包的額外開銷很小。
  4. 吞吐量不受擁擠控制算法的調節,只受應用軟件生成數據的速率、傳輸帶寬、源端和終端主機性能的限制。
  5. UDP使用盡量最大努力交付,即不保證可靠交付,因此主機不需要維持複雜的鏈接狀態表。
  6. UDP是面向報文的。發送方的UDP對應用程序交下來的報文,在添加首部受就向下交付給IP層。既不拆分,也不合並,而是保留這些報文的邊界,因此,應用程序需要選擇合適的報文大小。

2.2.3.1 UDP協議格式


java網絡編程(1)基礎知識

UDP協議由兩部分組成:首部和數據。其中,首部僅有8個字節,包括源端口和目的端口、長度(UDP用於數據報的長度)、校驗和。

(4) TCP與UDP的區別

  1. TCP基於連接,UDP是無連接的;
  2. 對系統資源的要求,TCP較多,UDP較少;
  3. UDP程序結構較簡單;
  4. TCP是流模式,而UDP是數據報模式;
  5. TCP保證數據正確性,而UDP可能丟包;TCP保證數據順序,而UDP不保證;

(5)HTTP協議

  HTTP,超文本傳輸協議,它是互聯網上應用最為廣泛的一種網絡協議。HTTP是一種應用層協議,它是基於TCP協議之上的請求/響應式的協議。

  對於從客戶端到服務器的每一個請求,都有4個步驟:

  1. 默認情況下,客戶端在端口80打開與服務器的一個TCP連接,URL中還可以指定其他端口。
  2. 客戶端向服務器發送消息,請求指定路徑上的資源。這個資源包括一個首部,可選地(取決於請求的性質)還可以有一個空行,後面是這個請求的數據。
  3. 服務器向客戶端發送響應。響應以響應碼開頭,後面是包含數據的首部、一個空行以及所請求的文檔或錯誤消息。
  4. 服務器關閉連接。

HTTP報文

HTTP協議是基於TCP協議之上的請求/響應式協議,下面主要介紹HTTP報文的格式,HTTP報文主要有請求報文和響應報文兩種。

首先看HTTP請求報文的格式

java網絡編程(1)基礎知識

下圖是谷歌瀏覽器內訪問服務器查看的HTTP請求例子:

java網絡編程(1)基礎知識

HTTP響應報文格式

java網絡編程(1)基礎知識

上面這張圖是HTTP響應報文,它由狀態行、首部行和實體主體組成。下圖為HTTP響應報文例子:

java網絡編程(1)基礎知識

HTTP請求方法和響應狀態碼

  在上面的HTTP請求報文例子中,我們可以看到請求方法是GET,這表示請求讀取由URL所標誌的信息,除了GET,還有其他幾種常用的方法。

 

java網絡編程(1)基礎知識

在HTTP響應報文的例子中,我們可以看到狀態碼是200,表示響應成功。下表是其他狀態碼,總共5大類,33種。

java網絡編程(1)基礎知識

HTTP和HTTPS的區別

  超文本傳輸協議HTTP協議被用於在Web瀏覽器和網站服務器之間傳遞信息。HTTP協議以明文方式發送內容,不提供任何方式的數據加密,如果攻擊者截取了Web瀏覽器和網站服務器之間的傳輸報文,就可以直接讀懂其中的信息,因此HTTP協議不適合傳輸一些敏感信息,比如信用開號、密碼等。

  為了解決HTTP協議的這一缺陷,需要使用另一種協議:安全套接字層超文本傳輸協議HTTPS。為了數據傳輸的安全,HTTPS在HTTP的基礎上加入了SSL協議,SSL依靠證書來驗證服務器的身份,併為瀏覽器和服務器之間的通信加密。

  HTTPS和HTTP的區別主要為以下四點:

  • https協議需要到ca申請證書,一般免費證書很少,需要繳費。
  • http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議。
  • http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,後者是443。
  • http的連接很簡單,是無狀態的;https協議是有ssl+http協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。

HTTP和TCP/IP協議的關係

  “我們在傳輸數據時,可以只使用(傳輸層)TCP/IP協議,但是那樣的話,如 果沒有應用層,便無法識別數據內容,如果想要使傳輸的數據有意義,則必須使用到應用層協議,應用層協議有很多,比如HTTP、FTP、TELNET等,也 可以自己定義應用層協議。WEB使用HTTP協議作應用層協議,以封裝HTTP文本信息,然後使用TCP/IP做傳輸層協議將它發到網絡上。”

如有問題還請批評指正,歡迎私信交流以及需要JAVA學習資料的都可以找我。

"
java網絡編程(1)基礎知識

一. 概述

我們知道計算機之間的通信要經過一系列複雜的過程,計算機之間通過傳輸介質、通信設施和網絡通信協議互聯,實現資源共享和數據傳輸。而我們的網絡編程就是使用程序使互聯網的兩個(或多個)計算機之間進行數據傳輸。當然java語言,為了實現兩個計算機之間的數據傳輸,提供了一系列的接口,使得開發人員可以方便的實現。

不過在正式開始代碼編寫之前就先看看一些通信的基本知識。

二 、網絡體系結構

計算機之間的通信要經過一系列複雜的過程,必須將這兩臺計算機的物理邏輯和通信邏輯好好的規劃好。為此我們先看看計算機網絡的層次模型。然後再進行分析。

java網絡編程(1)基礎知識

從上面這張圖我們對計算機之間的通信特點進行整理一下:

(1)計算機之間的網絡通信被分解為多個層,層與層之間用接口連接。

(2)通信的雙方具有相同的層次,層次實現的功能由協議數據單元(PDU)來描述。

(3)不同系統中的同一層構成對等層,對等層之間通過對等層協議進行通信。

(4)在通信的時候數據必須由一層依次傳遞到下一層,不能跨級傳輸。

為了促進計算機網絡的發展,國際標準化組織ISO在現有網絡的基礎上,提出了不基於具體機型、操作系統或公司的網絡體系結構,稱為開放系統互連參考模型,即OSI/RM。但是ISO制定的OSI參考模型過於龐大、複雜招致了許多批評。因此美國國防部提出了TCP/IP協議棧參考模型,簡化了OSI參考模型,獲得了廣泛的應用。

1、OSI參考模型

OSI參考模型,是國際標準化組織ISO提出的,把網絡通信的工作分為7層,分別是物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。也是我們在大學計算機網絡課程中認識的那樣。下面一張圖來看看。

java網絡編程(1)基礎知識

(1)物理層處於OSI的最底層,是開放系統的基礎,它的功能主要是為計算機提供傳送數據的通路以及傳輸數據。

  (2)數據鏈路層的主要任務是實現計算機網絡中相鄰節點之間的可靠傳輸,把原始的、有差錯的物理傳輸數據加上數據鏈路協議以後,構成邏輯上可靠的數據鏈路。

  (3)網絡層主要完成的功能主要包括路由選擇、網絡尋址、流量控制、擁塞控制、網絡互連等。實現兩個計算機節點之間的數據傳輸。

  (4)傳輸層涉及源端節點到目的端節點之間可靠的信息傳輸。也就是說是採用TCP/IP還是採用UDP協議。他需要三次握手四次揮手。  

  (5)會話層的主要功能是負責應用程序之間建立、維持和中斷會話,提供單工、半雙工和全雙工3種不同的通信方式,使系統和服務之間有序地進行通信。

  (6)表示層關心所傳輸數據信息的格式定義,其主要功能是把應用層提供的信息變換為能夠共同理解的形式,提供字符代碼、數據格式、控制信息格式、加密等的統一表示。

  (7)應用層是直接為應用進程提供服務的。其作用是多個系統應用進程相互通信的同時,完成一系列業務處理所需的服務。

2 、TCP/IP參考模型

  TCP/IP參考模型採用4層的層級結構,每一層都呼叫它的下一層所提供的協議來完成自己的需求,這4個層次分別是:網絡接口層、網絡層(IP層)、傳輸層(TCP層)、應用層。

java網絡編程(1)基礎知識

(1)網絡接口層:對應著OSI參考模型的物理層和數據鏈路層

  (2)網絡層(IP層):是整個TCP/IP協議棧的核心。它的功能是把分組數據發往目標網絡或主機。可以完成將不同類型的網絡(異構網)互連的任務。除此之外,還需要完成擁塞控制的功能。

  (3)傳輸層(TCP層):傳輸層負責在應用進程之間建立端到端的連接和可靠通信。TCP層涉及兩個協議,TCP和UDP。TCP協議提供面向連接的服務,提供按字節流的有序、可靠傳輸,可以實現連接管理、差錯控制、流量控制、擁塞控制等。也就是可靠傳輸。UDP協議提供無連接的服務,用於不需要或無法實現面向連接的網絡應用中。也就是不可靠傳輸。

  (4)應用層:為各種網絡應用提供服務。

3、網絡協議

  OSI參考模型和TCP/IP模型在不同的層次中有許多不同的網絡協議,如圖所示:

java網絡編程(1)基礎知識

網絡協議之間的關係圖如下:

java網絡編程(1)基礎知識

下面我們抽出來一些重要的協議看一下。其他的協議用到的時候再說。

(1)IP協議

  IP協議的作用在於把各種數據包準備無誤的傳遞給對方。由於IP地址是稀有資源,不可能每個人都擁有一個IP地址,所以我們通常的IP地址是路由器給我們生成的IP地址,路由器裡面會記錄我們的MAC地址。而MAC地址是全球唯一的。舉例,IP地址就如同是我們居住小區的地址,而MAC地址就是我們住的那棟樓那個房間那個人。

(2)TCP協議

  TCP層是位於IP層之上,應用層之下的中間層。有可靠的、像管道一樣的TCP連接,還有不可靠的包交換的UDP鏈接。那tcp協議之間的通信數據格式是什麼樣子的呢?也就是什麼樣的數據在傳輸,下面一張圖來看一下:

  TCP報文段包括協議首部和數據兩部分,協議首部的固定部分是20個字節,首部的固定部分後面是選項部分。

java網絡編程(1)基礎知識

下面是報文段首部各個字段的含義,也是《計算機網絡》書中的說明:

  1. 源端口號以及目的端口號:各佔2個字節,端口是傳輸層和應用層的服務接口,用於尋找發送端和接收端的進程,一般來講,通過端口號和IP地址,可以唯一確定一個TCP連接,在網絡編程中,通常被稱為一個socket接口。
  2. 序號:Seq序號,佔4個字節、32位。用來標識從TCP發送端向TCP接收端發送的數據字節流。發起方發送數據時對此進行標記。
  3. 確認序號:Ack序號,佔4個字節、32位。包含發送確認的一端所期望收到的下一個序號。只有ACK標記位為1時,確認序號字段才有效,因此,確認序號應該是上次已經成功收到數據字節序號加1,即Ack=Seq + 1。
  4. 數據偏移:佔4個字節,用於指出TCP首部長度,若不存在選項,則這個值為20字節,數據偏移的最大值為60字節。
  5. 保留字段佔6位,暫時可忽略,值全為0。
  6. 標誌位,6個
  • URG(緊急):為1時表明緊急指針字段有效
  • ACK(確認):為1時表明確認號字段有效
  • PSH(推送):為1時接收方應儘快將這個報文段交給應用層
  • RST(復位):為1時表明TCP連接出現故障必須重建連接
  • SYN(同步):在連接建立時用來同步序號
  • FIN(終止):為1時表明發送端數據發送完畢要求釋放連接

7. 接收窗口:佔2個字節,用於流量控制和擁塞控制,表示當前接收緩衝區的大小。在計算機網絡中,通常是用接收方的接收能力的大小來控制發送方的數據發送量。TCP連接的一端根據緩衝區大小確定自己的接收窗口值,告訴對方,使對方可以確定發送數據的字節數。

8.校驗和:佔2個字節,範圍包括首部和數據兩部分。

9.選項是可選的,默認情況是不選。

三次握手與四次揮手(超級重要。面試必問)

  TCP是面向連接的協議,因此每個TCP連接都有3個階段:連接建立、數據傳送和連接釋放。連接建立經歷三個步驟,通常稱為“三次握手”。

  TCP三次握手過程如下:

java網絡編程(1)基礎知識

 1. 第一次握手(客戶端發送請求)

   男孩:“咱倆處對象吧”,並等待對方回覆確認。

  2. 第二次握手(服務端回傳確認)

   女孩:告訴男孩說“可以”,

  3. 第三次握手(客戶端回傳確認)

   男孩說:“那就在一塊吧”,於是倆人有了情侶鏈接關係了。

  注意:握手過程中傳送的包裡不包含數據,三次握手完畢後,客戶端與服務器才正式開始傳送數據。

 TCP四次揮手過程如下

  

java網絡編程(1)基礎知識

由於TCP連接是全雙工的,因此每個方向都必須單獨進行關閉。這原則是當一方完成它的數據發送任務後就能發送一個FIN來終止這個方向的連接。收到一個FIN只意味著這一方向上沒有數據流動,一個TCP連接在收到一個FIN後仍能發送數據。首先進行關閉的一方將執行主動關閉,而另一方執行被動關閉。

  1. 女孩:要和男孩分手,並等待男孩迴應

  2. 男孩:回覆女孩,先同意分手,不過還是又考慮了一段時間。

  3. 男孩思考了一段時間,還是選擇了分手。

  4. 女孩收到消息,於是倆人正式分手。

  注意:為什麼連接的時候是三次握手,關閉的時候卻是四次揮手?

  因為當服務端收到客戶端的SYN連接請求報文後,可以直接發送SYN+ACK報文。其中ACK報文是用來應答的,SYN報文是用來同步的。但是關閉連接時,當服務端收到FIN報文時,很可能並不會立即關閉socket,所以只能先回復一個ACK報文,告訴客戶端,“你發的FIN報文,我收到了”。只有等到服務端所有的報文都發送完了,我才能發送FIN報文,因此不能一起發送,故需要四步揮手。

(3)UDP協議

  UDP,用戶數據報協議,它是TCP/IP協議簇中無連接的運輸層協議。

  1. UDP是一個非連接的協議,傳輸數據之前源端和終端不建立連接,當它想傳送時就簡單地去抓取來自應用程序的數據,並儘可能快地把它扔到網絡上。
  2. 由於傳輸數據不建立連接,因此也就不需要維護連接狀態,包括收發狀態等,因此一臺服務器可同時向多個客戶端傳輸相同的消息。
  3. UDP信息包的標題很短,只有8個字節,相對於TCP的20個字節信息包的額外開銷很小。
  4. 吞吐量不受擁擠控制算法的調節,只受應用軟件生成數據的速率、傳輸帶寬、源端和終端主機性能的限制。
  5. UDP使用盡量最大努力交付,即不保證可靠交付,因此主機不需要維持複雜的鏈接狀態表。
  6. UDP是面向報文的。發送方的UDP對應用程序交下來的報文,在添加首部受就向下交付給IP層。既不拆分,也不合並,而是保留這些報文的邊界,因此,應用程序需要選擇合適的報文大小。

2.2.3.1 UDP協議格式


java網絡編程(1)基礎知識

UDP協議由兩部分組成:首部和數據。其中,首部僅有8個字節,包括源端口和目的端口、長度(UDP用於數據報的長度)、校驗和。

(4) TCP與UDP的區別

  1. TCP基於連接,UDP是無連接的;
  2. 對系統資源的要求,TCP較多,UDP較少;
  3. UDP程序結構較簡單;
  4. TCP是流模式,而UDP是數據報模式;
  5. TCP保證數據正確性,而UDP可能丟包;TCP保證數據順序,而UDP不保證;

(5)HTTP協議

  HTTP,超文本傳輸協議,它是互聯網上應用最為廣泛的一種網絡協議。HTTP是一種應用層協議,它是基於TCP協議之上的請求/響應式的協議。

  對於從客戶端到服務器的每一個請求,都有4個步驟:

  1. 默認情況下,客戶端在端口80打開與服務器的一個TCP連接,URL中還可以指定其他端口。
  2. 客戶端向服務器發送消息,請求指定路徑上的資源。這個資源包括一個首部,可選地(取決於請求的性質)還可以有一個空行,後面是這個請求的數據。
  3. 服務器向客戶端發送響應。響應以響應碼開頭,後面是包含數據的首部、一個空行以及所請求的文檔或錯誤消息。
  4. 服務器關閉連接。

HTTP報文

HTTP協議是基於TCP協議之上的請求/響應式協議,下面主要介紹HTTP報文的格式,HTTP報文主要有請求報文和響應報文兩種。

首先看HTTP請求報文的格式

java網絡編程(1)基礎知識

下圖是谷歌瀏覽器內訪問服務器查看的HTTP請求例子:

java網絡編程(1)基礎知識

HTTP響應報文格式

java網絡編程(1)基礎知識

上面這張圖是HTTP響應報文,它由狀態行、首部行和實體主體組成。下圖為HTTP響應報文例子:

java網絡編程(1)基礎知識

HTTP請求方法和響應狀態碼

  在上面的HTTP請求報文例子中,我們可以看到請求方法是GET,這表示請求讀取由URL所標誌的信息,除了GET,還有其他幾種常用的方法。

 

java網絡編程(1)基礎知識

在HTTP響應報文的例子中,我們可以看到狀態碼是200,表示響應成功。下表是其他狀態碼,總共5大類,33種。

java網絡編程(1)基礎知識

HTTP和HTTPS的區別

  超文本傳輸協議HTTP協議被用於在Web瀏覽器和網站服務器之間傳遞信息。HTTP協議以明文方式發送內容,不提供任何方式的數據加密,如果攻擊者截取了Web瀏覽器和網站服務器之間的傳輸報文,就可以直接讀懂其中的信息,因此HTTP協議不適合傳輸一些敏感信息,比如信用開號、密碼等。

  為了解決HTTP協議的這一缺陷,需要使用另一種協議:安全套接字層超文本傳輸協議HTTPS。為了數據傳輸的安全,HTTPS在HTTP的基礎上加入了SSL協議,SSL依靠證書來驗證服務器的身份,併為瀏覽器和服務器之間的通信加密。

  HTTPS和HTTP的區別主要為以下四點:

  • https協議需要到ca申請證書,一般免費證書很少,需要繳費。
  • http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl加密傳輸協議。
  • http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,後者是443。
  • http的連接很簡單,是無狀態的;https協議是有ssl+http協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。

HTTP和TCP/IP協議的關係

  “我們在傳輸數據時,可以只使用(傳輸層)TCP/IP協議,但是那樣的話,如 果沒有應用層,便無法識別數據內容,如果想要使傳輸的數據有意義,則必須使用到應用層協議,應用層協議有很多,比如HTTP、FTP、TELNET等,也 可以自己定義應用層協議。WEB使用HTTP協議作應用層協議,以封裝HTTP文本信息,然後使用TCP/IP做傳輸層協議將它發到網絡上。”

如有問題還請批評指正,歡迎私信交流以及需要JAVA學習資料的都可以找我。

java網絡編程(1)基礎知識

"

相關推薦

推薦中...