- 我最近開了幾個專欄,誠信互三!
====> |||《算法專欄》::刷題教程來自網站《代碼隨想錄》。|||
====> |||《C++專欄》::記錄我學習C++的經歷,看完你一定會有收獲。|||
====> |||《Linux專欄》::記錄我學習Linux的經歷,看完你一定會有收獲。|||
====> |||《C#專欄》::記錄我復習C#的經歷,深度理解,查漏補缺,不定期更新。|||
====> |||《計算機網絡專欄》::記錄我學習計算機網絡,看完你一定會有收獲。|||
計算機網絡:應用層(一)
- 應用層要解決的問題
- 如何解決這些問題
- IP地址及端口初識
- 應用層協議
- socket初識(初次理解)
- TCP/UDP要提供的服務
- TCP/UDP初識
應用層要解決的問題
在之前的計網博客中,我們以及學習到了網絡和基于ISO,TCP/IP的網絡層狀結構,其中我們了解到了應用層要解決的問題是兩臺主機之間進程與進程之間的通訊問題。
如何解決這些問題
- 首先,要解決進程之間的通訊問題,我們首先需要知道我們要與那個主機進行通訊。
- 其次就要解決我們要與該主機的那個進程進行通訊。
- 在次我們還要解決雙方通訊所要遵守的規則,及協議。
IP地址及端口初識
要解決第一個問題,我們可以借助IP地址和端口,我們知道,IP地址表識了某個網絡,這樣我們就可以定位到接收方的網絡位置,而進程則需要端口號來確認,一個主機上有多個進程,端口號是一個數字,來標識唯一的進程,這樣我們就能定位到網絡,同時定位到精確的進程了。
定位到網絡并不能找到某一臺主機,還需要MAC地址,而這部分不屬于應用層的管轄,屬于數據鏈路層。
http的默認端口號為80號。
應用層協議
所謂的協議是層與層之間傳遞信息的一個規則的集合,協議中包含了很多東西,入語法,語義,時序等,應用層的主要協議有http,https協議,https協議是http+ssl協議,TCP/UDP是明碼發送的,所以https協議就是解決如何在TCP/UDP為上層提供的服務中保證安全性。
下圖是http報文格式。
socket初識(初次理解)
在我們傳輸數據的時候,我們要確認一些東西,比如:我是誰,我的那個進程要發送信息,接收方是誰,接收方的那個進程要接收該信息。 再比如我需要運輸層為應用層提供可靠傳輸還是非可靠傳輸(TCP/UDP)。 以及基于什么協議進行傳輸。
我們發現,如果每次發送消息/接收消息,我們都確認并發送一邊 “我是誰,我的那個進程要發送信息,接收方是誰,接收方的那個進程要接收該信息。”這樣的信息,首先會導致效率降低,并且對空間的利用也不夠好,socket解決的這個問題。
- socket是被操作系統維護的一個表格,在需要可靠傳輸時(TCP),這個表格中包含了本地IP地址,本地端口號,接收方IP地址, 接收方端口號。這四個信息,在發送的時候,將這4個信息集合到一個整形中,并為四元組,發送出去,接收方同時也維護一個表格,來接收該四元組信息。
- 對于非可靠傳輸(UDP)socket維護的是一個二元組表格,該表格內存有本地IP地址,本地端口號。
通過socket,我們不用在發送多條信息,只需發送四元組/二元組,就能確定所有信息,同時對于TCP來說,只需要確定不同的接收方的端口號,就可以直接發送數據,這樣就節約了時間,對于接收方也是如此,UDP只需要確定接收方的IP,和端口號,這樣就將很多重復工作的時間節約了下來。
TCP/UDP要提供的服務
我們知道在計算機體系結構中,下層要為上層提供服務,TCP/UDP協議要為應用層提供基于運輸層的可靠與否的服務。
TCP:可靠傳輸,基于TCP/IP協議。
UDP:非可靠傳輸。
它們互有優劣,選擇什么服務需要由應用層的進程決定。
但是這兩個協議都是明碼傳輸的,這在某些情況下是十分危險的,要解決這個問題,需要應用層的協議ssl,ssl是一個庫,它可以為數據提供安全的傳輸解決TCP/UDP無法安全傳輸的問題。
TCP/UDP初識
簡單認識以下TCP/UDP協議。
TCP:是運輸層提供可靠傳輸的協議,為了實現可靠傳輸基于TCP的運輸層會做以下工作
- 1.TCP協議會檢測當前信道的吞吐量,如果過高則TCP協議會減少發送的數據,保證數據的精確度。
- 2.在傳輸時,會保留副本,如果分組丟失了,則重發。
還有很多保證可靠傳輸的方法,這次簡單認識下
UDP:是運輸層提供非可靠傳輸的協議,由于是非可靠傳輸,所以對以上的要求都不高,入分組丟失不會重發,也不會保存分組,不會檢測吞吐量,運輸層數據接收速度與發送速度幾乎相等等等。
這兩種傳輸友好有壞,TCP提供可靠傳輸,用時間換取了數據的準確度,UDP則不會這樣做。
比如流媒體,網絡游戲等需要UDP提供服務,電子郵件等則需要TCP提供服務。