TCP/IP 协议——知识集锦
精通 TCP/IP,熟練使用 Socket 進(jìn)行網(wǎng)路編程。
這句話在招聘要求里經(jīng)常見,但是平時(shí)壓根用不到,雖然筆者用Unity3D 如果做聯(lián)網(wǎng)需要用到Socket通信,奈何我還沒做過網(wǎng)絡(luò)游戲 :(
這里補(bǔ)下相關(guān)知識(shí)。
目錄
1.什么是 TCP/IP?
2.數(shù)據(jù)包
3.網(wǎng)絡(luò)接口層
4.網(wǎng)絡(luò)層
1) IP:
注意:
2)地址解析協(xié)議 ARP
3)子網(wǎng)
5.傳輸層
特點(diǎn):
6.應(yīng)用層
?
1.什么是 TCP/IP?
TCP/IP 是一類協(xié)議系統(tǒng),它是用于網(wǎng)絡(luò)通信的一套協(xié)議集合。
傳統(tǒng)上來說 TCP/IP 被認(rèn)為是一個(gè)四層協(xié)議
在 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é)議)
?
在TCP / IP協(xié)議族中有兩個(gè)互不相同的傳輸協(xié)議: TCP(Transmission Control Protocol?傳輸控制協(xié)議)和 UDP(User Datagram Protocol用戶數(shù)據(jù)報(bào)協(xié)議)
?
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è)過程有點(diǎn)像俄羅斯套娃,所以有時(shí)候人們也會(huì)用俄羅斯套娃來形容這個(gè)過程.
?
3.網(wǎng)絡(luò)接口層
這一塊主要主要涉及到一些物理傳輸,比如以太網(wǎng),無線局域網(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)用越來越廣泛了(但是下面的介紹都是基于 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)制來顯示,比如大家非常熟悉的 192.168.0.1
IP 地址分為兩個(gè)部分:
- 網(wǎng)絡(luò) ID
- 主機(jī) ID
但是具體哪部分屬于網(wǎng)絡(luò) ID,哪些屬于主機(jī) ID 并沒有規(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 開頭,那么它就是一個(gè) A 類地址。
- 如果 32 位的 IP 地址以 10 開頭,那么它就是一個(gè) B 類地址。
- 如果 32 位的 IP 地址以 110 開頭,那么它就是一個(gè) C 類地址。
那么轉(zhuǎn)化為十進(jìn)制(四段)的話,我們就能以第一段中的十進(jìn)制數(shù)來區(qū)分 IP 地址到底是哪類地址了。
注意:
- 十進(jìn)制第一段大于 223 的屬于 D 類和 E 類地址,這兩類比較特殊也不常見,這里就不做詳解介紹了。
- 每一類都有一些排除地址,這些地址并不屬于該類,他們是在一些特殊情況使用地址(后面會(huì)介紹)
- 除了這樣的方式來劃分網(wǎng)絡(luò),我們還可以把每個(gè)網(wǎng)絡(luò)劃分為更小的網(wǎng)絡(luò)塊,稱之為子網(wǎng)(后面會(huì)介紹)
全是 0 的主機(jī) ID 代表網(wǎng)絡(luò)本身,比如說 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 開頭的地址都是環(huán)回地址。目的地址是環(huán)回地址的消息,其實(shí)是由本地發(fā)送和接收的。主要是用于測(cè)試 TCP/IP 軟件是否正常工作。我們用 ping 功能的時(shí)候,一般用的環(huán)回地址是 127.0.0.1
?
2)地址解析協(xié)議 ARP
簡(jiǎn)單的來說 ARP 的作用就是把 IP 地址映射為物理地址,而與之相反的 RARP(逆向 ARP)就是將物理地址映射為 IP 地址。
?
3)子網(wǎng)
前面提到了 IP 地址的分類,但是對(duì)于 A 類和 B 類地址來說,每個(gè)網(wǎng)絡(luò)下的主機(jī)數(shù)量太多了,那么網(wǎng)絡(luò)的傳輸會(huì)變得很低效,并且很不靈活。比如說 IP地址為 100.0.0.0 的 A 類地址,這個(gè)網(wǎng)絡(luò)下的主機(jī)數(shù)量超過了 1600 萬臺(tái)。
所以子網(wǎng)掩碼的出現(xià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ù)來分段,他的每一位對(duì)應(yīng)著 IP 地址的相應(yīng)位置,數(shù)值為 1 時(shí)代表的是非主機(jī)位,數(shù)值為 0 時(shí)代表是主機(jī)位。
由表格可以很清晰的看出,網(wǎng)絡(luò) IP 仍是由之前的分類來決定到底是多少位,主機(jī) IP 則是由子網(wǎng)掩碼值為 0 的位數(shù)來決定,剩下的則是子網(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è)無連接的協(xié)議。
特點(diǎn):
1)UDP:
- 把數(shù)據(jù)打包
- 數(shù)據(jù)大小有限制(64k)
- 不建立連接
- 速度快,但可靠性低
2)TCP:
- 建立連接通道
- 數(shù)據(jù)大小無限制
- 速度慢,但是可靠性高
由于傳輸層涉及的東西比較多,比如端口,Socket等,都是我們做移動(dòng)開發(fā)需要了解的,之后的文章中我們?cè)倬唧w做介紹,這里就不講解了。
?
6.應(yīng)用層
應(yīng)用層做為 TCP/IP 協(xié)議的最高層級(jí),對(duì)于我們移動(dòng)開發(fā)來說,是接觸最多的。
運(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é)議),用來發(fā)送電子郵件。
- TELNET(Teletype over the Network,網(wǎng)絡(luò)電傳),通過一個(gè)終端(terminal)登陸到網(wǎng)絡(luò)。
- SSH(Secure Shell,用于替代安全性差的TELNET),用于加密安全登陸用。
運(yùn)行在UDP協(xié)議上的協(xié)議:
- BOOTP(Boot Protocol,啟動(dòng)協(xié)議),應(yīng)用于無盤設(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)硬件的地址。
?
?
總結(jié)
以上是生活随笔為你收集整理的TCP/IP 协议——知识集锦的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python爬虫多线程下载_Python
- 下一篇: originlab设置_Origin修改