1. 程式人生 > >Android中的TCP/IP協議,Socket,Http協議間的關係

Android中的TCP/IP協議,Socket,Http協議間的關係

前提:本片文章的名字叫做"Android開發中的TCP/IP協議,Socket程式設計",其實TCP/IP協議是一種網路協議,並不是在Android中才有的,也不只是在java中有,其他的開發語言中同樣也可以使用TCP/IP協議進行網路程式設計。之所以這麼說是因為在不久的以前,作者也是一個對於各種協議、什麼socket程式設計、什麼http等等完全沒有概念,直到現在,我也還是在不斷的學習,去嘗試慢慢的理解它們。

很多帖子都會介紹一下網路程式設計的發展史。。但是我感覺對我來說並沒有什麼卵用,我只關心這玩意兒怎麼用,所以我們跳過介紹的部分直接講重點。

首先你得大概知道網路是分層的,細分可分為7層,分別為: 物理層-->資料鏈路層-->網路層-->傳輸層-->會話層-->表示層-->應用層,還可以分為: 物理+資料鏈路(物理層,資料鏈路層)-->網路層-->傳輸層-->應用層(會話層,表示層,應用層)

之所以用箭頭表示,是因為每個上一層都要基於底下一層而來,比如說應用層少了表示層是不行的。首先我們的IP協議是位於網路層,TCP協議是位於傳輸層。TCP協議是基於IP協議的,但是由於TCP協議和IP協議是互補的,就組成了我們常說的TCP/IP協議。

在TCP/IP協議中,TCP協議通過三次握手建立一個可靠的連線,這三次握手大概記一下,面試的時候可以裝下逼。 第一次握手:客戶端嘗試連線伺服器,向伺服器傳送syn包(同步序列編號Synchronize Sequence Numbers),syn=j,客戶端進入SYN_SEND狀態等待伺服器確認 第二次握手:伺服器接收客戶端syn包並確認(ack=j+1),同時向客戶端傳送一個SYN包(syn=k),即SYN+ACK包,此時伺服器進入SYN_RECV狀態 第三次握手:第三次握手:客戶端收到伺服器的SYN+ACK包,向伺服器傳送確認包ACK(ack=k+1),此包傳送完畢,客戶端和伺服器進入ESTABLISHED狀態,完成三次握手

說完TCP/IP協議就來說一下Socket。首先我們從字面上理解“協議”兩個字,可以把它當成是某種規定,就你進入公司,公司會有很多規章制度,但是如果光有這些所有的規章制度是完全起不到作用的,公司必須把這些制定成勞動合同或者員工手冊才能夠正真的生效。TCP/IP協議就好比公司的規章制度,而Socket就相當於勞動合同,是履行這些規章制度的基本單元。

Socket是對協議的一種抽象,是使用協議的最小單元,我們可以直接New出Socket物件進行操作,但是卻無法New出TCP/IP協議直接操作吧?Socket是對TCP/IP協議的一種封裝,當然,Socket還可以指定其他的協議,例如UDP協議或者其他協議。Socket的實際操作我就不演示了,百度上一搜,使用很簡單。

再來說一下HTTP協議,介面大家都用過吧?例如:http://192.168.1.233:8080/login?username=wo&password=123,url地址熟悉吧?我們用的最多的就是這玩意兒吧,拿著url帶上引數往伺服器一傳,伺服器會返回我們一個響應。這其中使用的就是http協議啊,像什麼okhttp,volley都是封裝了這玩意兒啊。上面不是說了TCP/IP協議嘛,這HTTP協議就是基於TCP/IP封裝的一種協議,他有一個很明顯的特點:就是與伺服器建立連線後,你請求伺服器,伺服器會給你響應,基於這個特性,我們對於這個協議使用很多。

然後還說一下UDP協議和TCP協議的差別吧,他們都是基於IP協議的,TCP協議就相當於打電話,你給你朋友打電話,你朋友必須接了電話你們才能聊天,TCP協議就是這樣,伺服器和客戶端要連線起來,所以可信度是比較高的。然後UDP呢,相當於發簡訊,你給你朋友發簡訊,只管發就行了,至於他收的到收不到你不用管,等到他什麼時候看到了自然會給你回,UDP協議就是這樣,所以可信度是比較低的。

然後,Socket和HTTP的關係,說實話這個我自己也有點矇蔽,按道理HTTP是基於TCP/IP協議的一種協議,Socket是使用TCP/IP協議的最小單元,那Socket和HTTP協議又有啥關係呢?網上有很多說話,我感覺HTTP是把Socket也包裝進去了,CSDN上有個比較形象的描述:HTTP是轎車,提供了封裝或者顯示資料的具體形式;Socket是發動機,提供了網路通訊的能力。實際上,傳輸層的TCP是基於網路層的IP協議的,而應用層的HTTP協議又是基於傳輸層的TCP協議的,而Socket本身不算是協議,就像上面所說,它只是提供了一個針對TCP或者UDP程式設計的介面。大家自行理解。。。

說了這麼多,讀者應該對socket,tcp/ip,http有了一個簡單的理解,不要慌張和矇蔽,在不同的專案中,會根據不同協議的特點(比如http,請求就比較穩定可靠,但是要消耗更多資源),來使用合適的協議和方法,在專案中學習去理解就會很快掌握,總結一下: 1.TCP/IP協議是一種協議!請好好理解協議這2個字的意思。 2.Socket是操作TCP/IP協議的最小單元。 3.HTTP是基於TCP/IP協議的且包含了Socket使用的一種協議,平時大家寫的介面使用的就是這個協議。 原文:https://blog.csdn.net/u010618194/article/details/62439168