日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

在Android網絡編程-計算機網絡基礎一文中得知,IP協議屬于網絡層,TCP、UDP協議屬于傳輸層。

IP協議是TCP/IP協議族的動力,它為上層協議提供無狀態、無連接、不可靠的服務。

TCP協議是面向連接的傳輸層協議,提供一種面向連接的、可靠的字節流服務。

UDP協議是面向無連接的傳輸層協議,提供面向事務的簡單不可靠信息傳輸服務。

數據報文

在不同層傳輸的數據單位名稱不同,在網絡層傳輸的叫數據報,在傳輸層傳輸的叫報文段。

IP數據報

IP數據報格式如下圖:

Android網絡編程-TCP/IP協議

 

IP數據報

各個字段的詳細說明:名稱長度說明版本4bitIP協議的版本,目前的IP協議版本號為4,下一代IP協議版本號為6首部長度4bitIP報頭的長度,最大長度60字節(15*4),<br>分為固定部分的長度(20字節)和可變部分的長度服務類型8bitType Of Service總長度16bitIP報文的總長度。數據報的最大長度為 65535 字節標識16bit它是一個計數器,用來產生數據報的標識。<br>當IP報文長度超過傳輸網絡的MTU(最大傳輸單元)時必須分片,<br>此標識表示同一個數據報的分片。標志3bitR、DF、MF三位,目前只有后兩位有效。<br>DF位:為1表示不分片,為0表示分片。<br>MF:為1表示“更多的片”,為0表示這是最后一片。片偏移13bit本分片在原先數據報文中相對首位的偏移位。<br>片偏移以8個字節為偏移單位。生存時間8bitTTL (Time To Live)表示數據報在網絡中的壽命,其單位為秒。<br>在目前的實際應用中,常以“跳”為單位。協議8bit指出IP報文攜帶的數據使用的哪種協議,<br>以便目的主機的IP層能知道要將數據報上交到哪個進程。<br>TCP的協議號為6,UDP的協議號為17。<br>ICMP的協議號為1,IGMP的協議號為2.首部校驗和16bit計算IP頭部的校驗和,檢查IP報頭的完整性。源地址32bit標識IP數據報的源端設備。目的地址32bit標識IP數據報的目的地址。可選字段長度可變1~40 字節,用于增加IP數據報的控制功能。填充保證IP首部長度是4字節的整倍數

TCP報文

Android網絡編程-TCP/IP協議

 

TCP報文

名稱長度說明源端口16bit數據發送方的端口號目的端口16bit數據接受方的端口號序號32bit本數據報文中的的第一個字節的序號<br>(在數據流中每個字節都對應一個序號)確認號32bit希望收到的下一個數據報文中的第一個字節的序號數據偏移4bit表示本報文數據段距離報文段有多遠保留字段6bit保留為今后使用,但目前應置為0緊急比特URG當值為1時表示次報文段中有需要緊急處理確認比特ACK值為1時確認號有效,值為0時確認號無效復位比特RST值為1時表示TCP連接存在嚴重的錯誤,需要重新進行連接同步比特SYN值為1表示這是一個連接請求或連接接受報文終止比特FIN值為1表示要發送的數據報已經發送完畢,需要釋放傳送連接窗口16bitTCP連接的一端根據緩存空間的大小來確定自己接受窗口的大小<br>限制發送放的窗口上限檢驗和16bit用來檢驗首部和數據兩部分的正確性緊急指針字段16bit緊急指針指出在本報文段中的緊急數據的最后一個字節的序號選項字段長度可變TCP 首部可以有多達40字節的可選信息,<br>用于把附加信息傳遞給終點,或用來對齊其它選項

UDP報文

相對于TCP報文,UDP報文簡單了很多。

Android網絡編程-TCP/IP協議

 

UDP報文

名稱長度說明源端口16bit數據發送方的端口號目的端口16bit數據接受方的端口號包長度16bitUDP首部的長度和數據的長度之和。單位為字節校驗和16bit用來檢驗首部和數據兩部分的正確性

TCP三次握手和四次揮手

TCP用三次握手來創建連接,使用四次分手來釋放連接。

Android網絡編程-TCP/IP協議

 

三次握手

三次握手

三次握手的目的是同步連接雙方的序列號和確認號并交換TCP窗口大小的信息。

握手過程:

  • 第一次握手:建立連接,客戶端先發送連接請求報文,將SYN設置為1,Sequence Number為x。客戶端進入SYN+SEND狀態,等待服務器確認。
  • 第二次握手:服務器收到SYN報文。服務器收到客戶端的SYN報文,需要對這個SYN報文進行確認,設置Acknowledgment Number為x+1(Sequence+1);同時,自己還要送法SYN消息,將SYN位置為1,Sequence Number為y;服務器將上述所有信息放到一個報文段(即SYN+ACK報文段)中,一并發送給客戶端,此時服務器進入SYN+RECV狀態。
  • 第三次握手:客戶端收到服務器的 SYN+ACK報文段。然后將Acknowlegment Number設為y+1,向服務器發送ACK報文段,這個報文段發送完畢后,客戶端端服務器都進入ESTABLISHED狀態,完成TCP三次握手。

完成了三次握手,客戶端和服務器就可以開始傳送數據了。

四次揮手

當客戶端和服務端傳輸數據完畢后,需要斷開TCP連接。TCP斷開的過程,就是四次揮手。

  • 第一次揮手:客戶端(也可以是服務器),設置Sequence Number和Acknowledgment Number,向服務器發送一個FIN報文段。此時客戶端進入FIN_WAIT_1狀態;這表示客戶端沒有數據發送給主機了。
  • 第二次揮手:服務器收到客戶端發來的FIN報文段,向客戶端回一個ACK報文段,Acknowledgement Number為Sequence Number加1;客戶端進入FIN_WAIT_2狀態,服務器進入CLOSE_WAIT狀態;服務器告訴客戶端,我同意你的”關閉”請求。
  • 第三次揮手:服務器向客戶端發送FIN報文段,請求關閉連接,同時服務器進入LAST_ACK狀態。
  • 第四次揮手:客戶端收到服務器發送的FIN報文段,向主機發送ACK報文段,然后客戶端進入TIME_WAIT狀態,服務器收到客戶端的ACK報文段以后,就關閉連接,此時,客戶端等待2MSL后一次沒有到收到回復,則證明服務端已正常關閉,那好,客戶端也可以關閉連接了。

TCP三次握手的必要性

防止服務器端因接收了早已失效的連接請求報文,從而一直等待客戶端請求,最終導致形成死鎖、浪費資源。

TCP四次揮手的必要性

為了保證通信雙方都能通知對方,需釋放、斷開連接。

為什么客戶端關閉連接前要等待2MSL時間

MSL: 最大報文段生存時間

四個報文發送完畢后,就可以直接進入CLOSE狀態了,但是有可能網絡是不可靠的,一切都可能發生,比如有可能最后一個ACK丟失。所以TIME_WAIT狀態是用來重發可能丟失的ACK報文。展開具體來講:

  • 為了保證客戶端發送的最后1個連接釋放確認報文 能到達服務器,從而使得服務器能正常釋放連接。
  • 防止早已失效的連接請求報文,出現在本連接中。客戶端發送了最后1個連接釋放請求確認報文后,再經過2MSL時間,則可使本連接持續時間內所產生的所有報文段都從網絡中消失。

TCP、UDP比較

TCPUDP可靠性可靠不可靠連接性面向連接無連接報文面向字節流面向報文效率低效高效雙工性全雙工一對一,一對多,多對一,多對多<br>支持多播和廣播流量控制滑動窗口機制擁塞控制慢開始/擁塞避免<br>快重傳/快恢復傳輸速度慢快應用場景效率要求相對低,準確要求相對高。<br>要求有連接的場景效率要求相對高,準確要求相對低應用SMTP,TELNET,HTTP,FTPDNS,RIP,NFS,SNMP,<br>IP電話,流媒體

參考

  • 計算機網絡:這是一份全面 & 詳細 的TCP協議攻略
  • 《圖解TCP/IP》讀書筆記
  • Android網絡編程:基礎理論匯總

分享到:
標簽:網絡編程 Android
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定