前言:
- 精通 TCP/IP,熟練使用 Socket 進(jìn)行網(wǎng)路編程。
看到這句話,有沒(méi)有感到很熟悉呀?相信很多人在投遞簡(jiǎn)歷的時(shí)候都看到過(guò)這條要求,很多人會(huì)覺(jué)得我們?cè)趯?shí)際開(kāi)發(fā)中一般用不到這些知識(shí),所以對(duì)這些東西不屑一顧.
但是筆者認(rèn)為想要做出更好的 APP,那么對(duì)這些基礎(chǔ)知識(shí)必須要有一定的了解,這樣你才能考慮得更加全面和完善,下面就讓我們一起來(lái)了解一下,什么是 TCP/IP.
1.什么是 TCP/IP?
TCP/IP 是一類協(xié)議系統(tǒng),它是用于網(wǎng)絡(luò)通信的一套協(xié)議集合.
傳統(tǒng)上來(lái)說(shuō) TCP/IP 被認(rèn)為是一個(gè)四層協(xié)議
1) 網(wǎng)絡(luò)接口層:
主要是指物理層次的一些接口,比如電纜等.
2) 網(wǎng)絡(luò)層:
提供獨(dú)立于硬件的邏輯尋址,實(shí)現(xiàn)物理地址與邏輯地址的轉(zhuǎn)換.
在 TCP / IP 協(xié)議族中,網(wǎng)絡(luò)層協(xié)議包括 IP 協(xié)議(網(wǎng)際協(xié)議),ICMP 協(xié)議( Internet 互聯(lián)網(wǎng)控制報(bào)文協(xié)議),以及 IGMP 協(xié)議( Internet 組管理協(xié)議).
3) 傳輸層:
為網(wǎng)絡(luò)提供了流量控制,錯(cuò)誤控制和確認(rèn)服務(wù).
在 TCP / IP 協(xié)議族中有兩個(gè)互不相同的傳輸協(xié)議: TCP(傳輸控制協(xié)議)和 UDP(用戶數(shù)據(jù)報(bào)協(xié)議).
4) 應(yīng)用層:
為網(wǎng)絡(luò)排錯(cuò),文件傳輸,遠(yuǎn)程控制和 Internet 操作提供具體的應(yīng)用程序
2.數(shù)據(jù)包
在 TCP / IP 協(xié)議中數(shù)據(jù)先由上往下將數(shù)據(jù)裝包,然后由下往上拆包
在裝包的時(shí)候,每一層都會(huì)增加一些信息用于傳輸,這部分信息就叫報(bào)頭,當(dāng)上層的數(shù)據(jù)到達(dá)本層的時(shí)候,會(huì)將數(shù)據(jù)加上本層的報(bào)頭打包在一起,繼續(xù)往下傳遞.
在拆包的時(shí)候,每一層將本層需要的報(bào)頭讀取后,就將剩下的數(shù)據(jù)往上傳.
這個(gè)過(guò)程有點(diǎn)像俄羅斯套娃,所以有時(shí)候人們也會(huì)用俄羅斯套娃來(lái)形容這個(gè)過(guò)程.
3.網(wǎng)絡(luò)接口層
這一塊主要主要涉及到一些物理傳輸,比如以太網(wǎng),無(wú)線局域網(wǎng).這里就不做詳細(xì)的介紹了
4.網(wǎng)絡(luò)層
前面有提到,網(wǎng)絡(luò)層主要就是做物理地址與邏輯地址之間的轉(zhuǎn)換.
目前市場(chǎng)上應(yīng)用的最多的是 32 位二進(jìn)制的 IPv4 ,因?yàn)?IPv4 的地址已經(jīng)不夠用了,所以 128 位二進(jìn)制的 IPv6 應(yīng)用越來(lái)越廣泛了(但是下面的介紹都是基于 IPv4 進(jìn)行的)
1) IP:
TCP/IP 協(xié)議網(wǎng)絡(luò)上的每一個(gè)網(wǎng)絡(luò)適配器都有一個(gè)唯一的 IP 地址.
IP 地址是一個(gè) 32 位的地址,這個(gè)地址通常分成 4 端,每 8 個(gè)二進(jìn)制為一段,但是為了方便閱讀,通常會(huì)將每段都轉(zhuǎn)換為十進(jìn)制來(lái)顯示,比如大家非常熟悉的 192.168.0.1
IP 地址分為兩個(gè)部分:
- 網(wǎng)絡(luò) ID
- 主機(jī) ID
但是具體哪部分屬于網(wǎng)絡(luò) ID,哪些屬于主機(jī) ID 并沒(méi)有規(guī)定.
因?yàn)橛行┚W(wǎng)絡(luò)是需要很多主機(jī)的,這樣的話代表主機(jī) ID 的部分就要更多,但是有些網(wǎng)絡(luò)需要的主機(jī)很少,這樣主機(jī) ID 的部分就應(yīng)該少一些.
絕大部分 IP 地址屬于以下幾類
- A 類地址:IP 地址的前 8 位代表網(wǎng)絡(luò) ID ,后 24 位代表主機(jī) ID。
- B 類地址:IP 地址的前 16 位代表網(wǎng)絡(luò) ID ,后 16 位代表主機(jī) ID。
- C 類地址:IP 地址的前 24 位代表網(wǎng)絡(luò) ID ,后 8 位代表主機(jī) ID。
這里能夠很明顯的看出 A 類地址能夠提供出的網(wǎng)絡(luò) ID 較少,但是每個(gè)網(wǎng)絡(luò)可以擁有非常多的主機(jī)
但是我們?cè)趺床拍芸闯鲆粋€(gè) IP 地址到底是哪類地址呢?
- 如果 32 位的 IP 地址以 0 開(kāi)頭,那么它就是一個(gè) A 類地址。
- 如果 32 位的 IP 地址以 10 開(kāi)頭,那么它就是一個(gè) B 類地址。
- 如果 32 位的 IP 地址以 110 開(kāi)頭,那么它就是一個(gè) C 類地址。
那么轉(zhuǎn)化為十進(jìn)制(四段)的話,我們就能以第一段中的十進(jìn)制數(shù)來(lái)區(qū)分 IP 地址到底是哪類地址了。
注意:
- 十進(jìn)制第一段大于 223 的屬于 D 類和 E 類地址,這兩類比較特殊也不常見(jiàn),這里就不做詳解介紹了。
- 每一類都有一些排除地址,這些地址并不屬于該類,他們是在一些特殊情況使用地址(后面會(huì)介紹)
- 除了這樣的方式來(lái)劃分網(wǎng)絡(luò),我們還可以把每個(gè)網(wǎng)絡(luò)劃分為更小的網(wǎng)絡(luò)塊,稱之為子網(wǎng)(后面會(huì)介紹)
全是 0 的主機(jī) ID 代表網(wǎng)絡(luò)本身,比如說(shuō) IP 地址為 130.100.0.0 指的是網(wǎng)絡(luò) ID 為130.100 的 B 類地址。
全是 1 的主機(jī) ID 代表廣播,是用于向該網(wǎng)絡(luò)中的全部主機(jī)方法消息的。 IP 地址為 130.100.255.255 就是網(wǎng)絡(luò) ID 為 130.100 網(wǎng)絡(luò)的廣播地址(二進(jìn)制 IP 地址中全是 1 ,轉(zhuǎn)換為十進(jìn)制就是 255 )
以十進(jìn)制 127 開(kāi)頭的地址都是環(huán)回地址。目的地址是環(huán)回地址的消息,其實(shí)是由本地發(fā)送和接收的。主要是用于測(cè)試 TCP/IP 軟件是否正常工作。我們用 ping 功能的時(shí)候,一般用的環(huán)回地址是 127.0.0.1
2)地址解析協(xié)議 ARP
簡(jiǎn)單的來(lái)說(shuō) ARP 的作用就是把 IP 地址映射為物理地址,而與之相反的 RARP(逆向 ARP)就是將物理地址映射為 IP 地址。
3)子網(wǎng)
前面提到了 IP 地址的分類,但是對(duì)于 A 類和 B 類地址來(lái)說(shuō),每個(gè)網(wǎng)絡(luò)下的主機(jī)數(shù)量太多了,那么網(wǎng)絡(luò)的傳輸會(huì)變得很低效,并且很不靈活。比如說(shuō) IP地址為 100.0.0.0 的 A 類地址,這個(gè)網(wǎng)絡(luò)下的主機(jī)數(shù)量超過(guò)了 1600 萬(wàn)臺(tái)。
所以子網(wǎng)掩碼的出現(xiàn)就是為了解決這樣的問(wèn)題。
我們先回顧一下之前如何區(qū)分主機(jī) IP 和網(wǎng)絡(luò) IP 的。
以 A 類地址 99.10.10.10 為例,前 8 位是網(wǎng)絡(luò) IP ,后 24 位是主機(jī) IP 。(如下圖)
子網(wǎng)掩碼也是一個(gè) 32 為的二進(jìn)制數(shù),也可以用四個(gè)十進(jìn)制數(shù)來(lái)分段,他的每一位對(duì)應(yīng)著 IP 地址的相應(yīng)位置,數(shù)值為 1 時(shí)代表的是非主機(jī)位,數(shù)值為 0 時(shí)代表是主機(jī)位。
由表格可以很清晰的看出,網(wǎng)絡(luò) IP 仍是由之前的分類來(lái)決定到底是多少位,主機(jī) IP 則是由子網(wǎng)掩碼值為 0 的位數(shù)來(lái)決定,剩下的則是子網(wǎng) IP
5 傳輸層
傳輸層提供了兩種到達(dá)目標(biāo)網(wǎng)絡(luò)的方式
- 傳輸控制協(xié)議(TCP):提供了完善的錯(cuò)誤控制和流量控制,能夠確保數(shù)據(jù)正常傳輸,是一個(gè)面向連接的協(xié)議。
- 用戶數(shù)據(jù)報(bào)協(xié)議(UDP):只提供了基本的錯(cuò)誤檢測(cè),是一個(gè)無(wú)連接的協(xié)議。
特點(diǎn):
1)UDP:
- 把數(shù)據(jù)打包
- 數(shù)據(jù)大小有限制(64k)
- 不建立連接
- 速度快,但可靠性低
2)TCP:
- 建立連接通道
- 數(shù)據(jù)大小無(wú)限制
- 速度慢,但是可靠性高
由于傳輸層涉及的東西比較多,比如端口,Socket等,都是我們做移動(dòng)開(kāi)發(fā)需要了解的,之后的文章中我們?cè)倬唧w做介紹,這里就不講解了。
6 應(yīng)用層
應(yīng)用層做為 TCP/IP 協(xié)議的最高層級(jí),對(duì)于我們移動(dòng)開(kāi)發(fā)來(lái)說(shuō),是接觸最多的。
運(yùn)行在TCP協(xié)議上的協(xié)議:
- HTTP(Hypertext Transfer Protocol,超文本傳輸協(xié)議),主要用于普通瀏覽。
- HTTPS(Hypertext Transfer Protocol over Secure Socket Layer, or HTTP over SSL,安全超文本傳輸協(xié)議),HTTP協(xié)議的安全版本。
- FTP(File Transfer Protocol,文件傳輸協(xié)議),由名知義,用于文件傳輸。
- POP3(Post Office Protocol, version 3,郵局協(xié)議),收郵件用。
- SMTP(Simple Mail Transfer Protocol,簡(jiǎn)單郵件傳輸協(xié)議),用來(lái)發(fā)送電子郵件。
- TELNET(Teletype over the Network,網(wǎng)絡(luò)電傳),通過(guò)一個(gè)終端(terminal)登陸到網(wǎng)絡(luò)。
- SSH(Secure Shell,用于替代安全性差的TELNET),用于加密安全登陸用。
運(yùn)行在UDP協(xié)議上的協(xié)議:
- BOOTP(Boot Protocol,啟動(dòng)協(xié)議),應(yīng)用于無(wú)盤(pán)設(shè)備。
- NTP(Network Time Protocol,網(wǎng)絡(luò)時(shí)間協(xié)議),用于網(wǎng)絡(luò)同步。
- DHCP(Dynamic Host Configuration Protocol,動(dòng)態(tài)主機(jī)配置協(xié)議),動(dòng)態(tài)配置IP地址。
其他:
- DNS(Domain Name Service,域名服務(wù)),用于完成地址查找,郵件轉(zhuǎn)發(fā)等工作(運(yùn)行在TCP和UDP協(xié)議上)。
- ECHO(Echo Protocol,回繞協(xié)議),用于查錯(cuò)及測(cè)量應(yīng)答時(shí)間(運(yùn)行在TCP和UDP協(xié)議上)。
- SNMP(Simple Network Management Protocol,簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議),用于網(wǎng)絡(luò)信息的收集和網(wǎng)絡(luò)管理。
- ARP(Address Resolution Protocol,地址解析協(xié)議),用于動(dòng)態(tài)解析以太網(wǎng)硬件的地址。
同樣的,由于應(yīng)用層我們需要涉及的東西太多,具體的介紹我們將在之后的文章中進(jìn)行介紹,本文就不進(jìn)行擴(kuò)展了,感興趣的朋友可以繼續(xù)關(guān)注我的博客:
熱門(mén)文章
- Glide-源碼詳解
- 漸進(jìn)式加載-基礎(chǔ)講解
- 活用productFlavors
- onTouch事件傳遞
- 那些年我們解決滑動(dòng)沖突時(shí)遇過(guò)的坑
- 進(jìn)程間通信--AIDL
- 序列化--Serializable與Parcelable
- 如何解決內(nèi)存溢出以及內(nèi)存泄漏
- Okhttputils終極封裝
- FaceBook推出的調(diào)試神器
- Android代碼優(yōu)化工具
- Glide-入門(mén)教程
- Glide-圖片預(yù)處理(圓角,高斯模糊等)
- Glide-圖片的壓縮
- Glide-內(nèi)存緩存與磁盤(pán)緩存
- Glide-自定義緩存