天天看點

學習幾個協定

TCP VS UDP

相同點:

首部都包含了16位的源端口号、目的端口号和校驗和。都是基于IP協定的傳輸層協定。

              圖一 TCP首部

              圖二 UDP首部

差異點:

1、  連接配接:TCP是面向連接配接的,需要通過三次握手建立連接配接,資料互動還有ACK機制,UDP沒有連接配接的概念;

2、  可靠:TCP是可靠的,UDP是不可靠的;

3、  資料包順序:TCP會對資料包進行重排序,而UDP本身不會重排序,隻能依賴應用對資料重排序;

4、  傳輸速度:TCP要慢于UDP,因為UDP隻管發送,一旦發出去就不管了;

5、  頭部大小:TCP大小20位元組,UDP大小8位元組;

6、  資料流:TCP是位元組流,UDP是資料報;

7、  資料流控:TCP通過滑動視窗和擁塞控制來進行流控,UDP沒有流控;

8、  錯誤檢查:TCP會進行錯誤檢查和錯誤恢複,通過快速重傳和快速恢複來實作,而UDP是不會進行錯誤檢查的,是以也沒有錯誤恢複的概念;

9、  頭部資料結構:從圖一、圖二知道TCP的資料結構比UDP複雜; 

基于TCP/UDP的協定

TCP UDP
HTTP, HTTPs, FTP, SMTP, Telnet等 DNS, DHCP, TFTP, SNMP, RIP, VOIP等

咱們借着生活中的上網這個場景來學習下幾個協定。

1、DHCP

随着網絡的發展,現在大家上網幾乎都是通過無線網卡對接路由器,路由器再對接營運商,很少自己再配置IP、子網路遮罩、網關等,因為這些對于大部分普通網民來說,都略顯專業,但是如果要上網,是不可能繞過IP位址等去實作的,這個時候就是DHCP協定發揮作用的時候。

學習幾個協定

                                 圖三 DHCP抓包

學習幾個協定

                        圖四 序号1

學習幾個協定

                        圖五 序号2

從如上截圖可以看出DHCP是基于UDP的,圖四對應圖三的序号1,圖五對應的是圖三的序号2。

序号1的Ethernet源位址就是本機MAC,目的位址這個時候不知道,就設定為ff: ff: ff: ff: ff: ff,通過廣播的方式發送出去,對應的網絡層,可以看到源位址和目的位址這個時候都不知道,是以分别設定為了0.0.0.0和255. 255. 255. 255,對應的應用層,按DHCP協定設定好的,發送方為68端口,接收方為67端口。資料報基本就是按照上述構造完成,然後廣播發送出去,因為Ethernet設定為了ff: ff: ff: ff: ff: ff,是以每個接收方收到後都必須進行分析,當看到發送方IP是0.0.0.0,接收方為255. 255. 255. 255,DHCP伺服器知道這個是給自己的,其他接收方則丢棄。

序号2就是DHCP伺服器給出響應,可以看出Ethernet發送方為TP-Link(我的無線路由器)和接收方(我的電腦 看圖六MAC位址),IP位址則分别為路由器IP和本機電腦IP,端口剛好和序号1相反。

經過DHCP協定,我的電腦擷取到可上網的IP和其他各項配置。

學習幾個協定

        圖六

2、ARP

配置設定好了IP之後,我的電腦就可以上網了,意味着可以傳輸IP資料了。傳輸IP資料又存在兩種情況,一種是發送方和接收方位于同一子網,直接通過IP協定就可以将資料給到接收方,另一種則是發送方和接收方不在同一子網,此時便需要通過IP路由尋找到位于同一子網的路由器進行IP資料轉發。這裡對于鑒定同一子網和IP路由方式暫且不表,後續有機會再深入學習,對于上述兩種方式,我們知道,不管怎麼發送都需要先找到主機(接收方)或者路由器。我們隻有IP位址,沒有實體位址,這個時候ARP協定派上用場,将IP位址轉換為實體硬體位址。

學習幾個協定

                               圖七

學習幾個協定

                        圖八 序号10

學習幾個協定

                        圖九 序号11

從圖八可以看出發送方是我的電腦(看圖六),接收方是ff: ff: ff: ff: ff: ff,這是個廣播位址,實際ARP本來也就是用作廣播,将資料報發送給Ethernet每個接口,每個接口都需要對這個資料進行處理,從中取出IP位址,與自身的IP位址進行比較。如果兩者相同,都做出回複,向對方報告自己的MAC位址,否則就丢棄這個包。

3、HTTP

HTTP(HyperText Transport Protocol)是超文本傳輸協定的縮寫,它用于傳送WWW方式的資料,HTTP基于TCP協定,是目前網際網路快速發展的基礎。以通路http://www.cnblogs.com/iou123lg/p/9017044.html為例來了解下這個協定。

學習幾個協定

                                      圖十

圖十是我用Wireshark抓取的該URL請求,由于整個過程很長,對應的抓取圖也比較長,是以我是多個圖拼接成的圖十。從圖中一頭一尾可以看出TCP的三次握手和四次揮手。中間展現的就是,在一次TCP連接配接中,依次發送了5次GET請求,可以看出每請求一次就要等待伺服器響應一次。從圖中也可以看出幾個問題:

3.1 發送方的發送是阻塞的,一起請求需等待一次響應,如果前一次響應失敗,必然影響後續的操作;

3.2 每次請求至少耗費一次RTT,這種非并發的請求,一旦量多就耗費的資源就很大了;

3.3 建立一次TCP連接配接,是很耗費資源,這種HTTP請求處理方式未充分的利用TCP連接配接資源。

這其實就是HTTP1.X和HTTP2.0一個重要的差別,HTTP1.X不支援多路複用,而新發展的HTTP2.0通過多路複用來解決上述問題,具體HTTP1.X和HTTP2.0的差別可以看參考連結。

4、DNS

學習幾個協定

                          圖十一

學習幾個協定

                         圖十二 序号852

學習幾個協定

                         圖十三 序号867

在學習HTTP的過程中,有個點沒有讨論,就是根據http://www.cnblogs.com/是怎樣轉換成去請求IP的,這個就是DNS的作用。DNS伺服器的配置是在DHCP階段已經配置設定好了,請求域名的時候,就是本機IP向DNS伺服器請求域名轉換過程,見圖十一。

從圖十二中可以看到DNS伺服器為10.64.0.100,本機IP向10.64.0.100請求cnblogs.com的IP,圖十三給出了響應位址116.62.82.XX。細心的人可以發現這個IP和圖十HTTP請求的IP不一樣,這是因為對外暴露的IP是和域名有一一對應的關系,而實際應用處理請求時會從主機IP通過負載均衡給到實際應用伺服器的IP。

以上是我對幾個協定的學習認知,如有不當描述,歡迎留言回報。

參考資料:

         http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html

         http://www.ruanyifeng.com/blog/2012/06/internet_protocol_suite_part_ii.html

         https://www.zhihu.com/question/34074946

         https://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol