目錄
1.網(wǎng)絡(luò)的歷史和協(xié)議的分成
2.網(wǎng)絡(luò)互聯(lián)促成了TCP/IP協(xié)議的產(chǎn)生
3.網(wǎng)絡(luò)的體系結(jié)構(gòu)
4.TCP/IP協(xié)議族體系
5.網(wǎng)絡(luò)各層的協(xié)議解釋
6.網(wǎng)絡(luò)的封包和拆包
7.網(wǎng)絡(luò)預(yù)備知識(shí)? ? ?
1.網(wǎng)絡(luò)的歷史和協(xié)議的分成
Internet-"冷戰(zhàn)"的產(chǎn)物
1957年十月和十一月,前蘇聯(lián)先后歐兩顆”Spuinik”衛(wèi)星上天
1958年美國(guó)總統(tǒng)艾森豪威爾向美國(guó)國(guó)會(huì)提出建立DARPA,即國(guó)防部高級(jí)研究計(jì)劃署,簡(jiǎn)稱ARPA.1968年6月DARPA提出“資源共享計(jì)算機(jī)網(wǎng)絡(luò)”,目的在于讓DARPA的所有電腦互連起來(lái),這個(gè)網(wǎng)絡(luò)就叫做ARPAnet,即“阿帕網(wǎng)”,是Internet的最早雛形。
2.網(wǎng)絡(luò)互聯(lián)促成了TCP/IP協(xié)議的產(chǎn)生
早期的ARPAnet使用網(wǎng)絡(luò)控制協(xié)議,不能互聯(lián)不同類型的計(jì)算機(jī)和不同類型的操作系統(tǒng),沒(méi)有糾錯(cuò)功能
1973年有Rober Kahn 和 Vinton Cerf 兩人合作為ARPAnet開(kāi)發(fā)了新的互聯(lián)網(wǎng)協(xié)議
1974年12月兩人正式發(fā)表第一份TCP協(xié)議詳細(xì)說(shuō)明,但此協(xié)議在有數(shù)據(jù)包丟失時(shí)不能有效的糾正
TCP協(xié)議分成了兩個(gè)不同的協(xié)議:
- 用來(lái)檢測(cè)網(wǎng)絡(luò)傳輸中差錯(cuò)的傳輸控制協(xié)議TCP
- 專門負(fù)責(zé)對(duì)不同網(wǎng)絡(luò)進(jìn)行互聯(lián)的互聯(lián)網(wǎng)協(xié)議IP
- 從此TCP/IP協(xié)議誕生
1983年ARPAnet上停止使用NCP,互聯(lián)網(wǎng)上的主機(jī)全部使用TCP/IP協(xié)議,TCP/IP協(xié)議成為Internet中的“世界語(yǔ)”。
3.網(wǎng)絡(luò)的體系結(jié)構(gòu)
- 網(wǎng)絡(luò)采用分而治之的方法設(shè)計(jì),將網(wǎng)絡(luò)的功能劃分為不同的模塊,以分層的形式有機(jī)組合在一起
- 每層實(shí)現(xiàn)不同的功能,其內(nèi)部實(shí)現(xiàn)方法對(duì)外部其他層次來(lái)說(shuō)是透明的。每層向上層提供服務(wù),同時(shí)使用下層提供的服務(wù)。
- 網(wǎng)終體系結(jié)構(gòu)即指網(wǎng)絡(luò)的層次結(jié)構(gòu)和每層所使用的協(xié)議的集合
- 兩類非常重要的體系結(jié)構(gòu):OSI和 TCP/IP。
- OSI模型相關(guān)的協(xié)議已經(jīng)很少使用,但模型本身非常通用? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? OSI模型是一個(gè)理想化的模型,尚未有完整的實(shí)現(xiàn)
- OSI模型共有七層
- 二層交換機(jī),三層交換機(jī)
4.TCP/IP協(xié)議族體系
- TCP/IP協(xié)議族體系是Internet事實(shí)上的工業(yè)標(biāo)準(zhǔn)
- 一共有四層
應(yīng)用層 | Relnet,FTP,HTTP,DNS,SMTP等 |
傳輸層 | TCP和UDP |
網(wǎng)絡(luò)層 | IP,ICMP和IGMP,端到端傳輸 |
網(wǎng)絡(luò)接口和物理層 | 以太網(wǎng),令牌環(huán)網(wǎng),F(xiàn)DDI,wifi,gps/2G/3G/4G,驅(qū)動(dòng)(屏蔽硬件差異) |
5.網(wǎng)絡(luò)各層的協(xié)議解釋
1.網(wǎng)絡(luò)接口和物理層
?mac地址: 48位全球唯一,網(wǎng)絡(luò)設(shè)備的身份標(biāo)識(shí)
- ?ARP:地址解析協(xié)議,IP地址找到mac地址
- ?RARP:mac地址--找到P地址
- ?PPP協(xié)議: 撥號(hào)協(xié)議 (GPRS/3G/4G)
2.網(wǎng)絡(luò)層
- ?IP地址
- ?IP協(xié)議: Internet protocol(分為IPV4和IPv6)
- ?ICMP:Internet控制管理協(xié)議,Ping 命令屬于ICMP
- ?IGMP:Internet分組管理協(xié)議,廣播和組播
3.傳輸層
TCP: (Transfer Control protocol,傳輸控制協(xié)議) 提供面向連接的,一對(duì)一的可靠傳輸?shù)膮f(xié)議
- 數(shù)據(jù)無(wú)誤,數(shù)據(jù)不丟失,數(shù)據(jù)無(wú)失序
- 適用場(chǎng)景
- 適合對(duì)傳輸質(zhì)量要求較高,以及傳輸大量數(shù)據(jù)的通信
- 在需要可靠數(shù)據(jù)傳輸?shù)膱?chǎng)合,通常適用TCP協(xié)議
- ?MSN/QQ等即時(shí)通訊軟件的用戶登錄賬號(hào)管理相關(guān)的功能通常采用TCP協(xié)議
UDP: (user Datagram Protocol,用戶數(shù)據(jù)報(bào)協(xié)議) : 提供不可靠,無(wú)連接的傳輸協(xié)議
- 適用場(chǎng)景
- 發(fā)送小尺寸數(shù)據(jù) (如對(duì)DNS服務(wù)器進(jìn)行IP地址查詢時(shí))
- 在接收數(shù)據(jù),給出應(yīng)答較困難的網(wǎng)終中適用UDP (如無(wú)線網(wǎng)絡(luò))
- 適合于廣播/組播式通信中MSN/QQ/Skype等即時(shí)通訊軟件的點(diǎn)對(duì)點(diǎn)文本通訊以及音視頻通常采用UDP協(xié)議流媒體VOD,VoIP,IPTV等網(wǎng)絡(luò)多媒體服務(wù)中通常采用UDP方式進(jìn)行實(shí)時(shí)數(shù)據(jù)傳輸? ? ? ? ?
SCTP: (Stream Control Transmission Protocol:流控制傳輸協(xié)議),TCP的增強(qiáng)版,他能實(shí)現(xiàn)多主機(jī)多鏈路的通信。? ? ???
?4.應(yīng)用層 ? ? ? ? ? ?
網(wǎng)頁(yè)訪問(wèn)協(xié)議: HTTP/HTTPS0
郵件發(fā)送接收協(xié)議: POP3(收)/SMTP(發(fā)),IMAP(可接受郵件的一部分)
FTP: 文件傳輸協(xié)議
Telnet/ssh:遠(yuǎn)程登錄
嵌入式相關(guān)
- NTP:網(wǎng)絡(luò)時(shí)鐘協(xié)議
- SNMP:簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議 (實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)涉及集中式管理)
- RTP/RSTP:用于傳輸音視頻的協(xié)議 (安防監(jiān)控)? ? ? ? ?
6.網(wǎng)絡(luò)的封包和拆包
TCP/IP協(xié)議下的數(shù)據(jù)包
7.網(wǎng)絡(luò)預(yù)備知識(shí)? ? ?
1.socket
- 是一個(gè)編程接口,是一個(gè)特殊的文件描述符(對(duì)他執(zhí)行IO的操作函數(shù),比如read,write,close等),并不 僅限于TCP/IP協(xié)議,面向連接TCP,無(wú)連接UDP。? ?
- socket代表網(wǎng)絡(luò)編程的一種資源? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
分類
- 1.流式套接字(SOCK_STREAM)。唯一對(duì)應(yīng)TCP 提供了一個(gè)面向連接,可靠的數(shù)據(jù)傳輸服務(wù),數(shù)據(jù)無(wú)差錯(cuò),無(wú)重復(fù)的發(fā)送順序接收。內(nèi)射擊流量控 制,避免數(shù)據(jù)流淹沒(méi)慢的接收方。數(shù)據(jù)被看作式字節(jié)流,無(wú)長(zhǎng)度限制。
- 2.數(shù)據(jù)包套接字(SOCK_DGRAM)。唯一對(duì)應(yīng)UDP 提供無(wú)連接服務(wù)器,數(shù)據(jù)包以獨(dú)立數(shù)據(jù)包的形式被發(fā)送,不提供無(wú)差錯(cuò)保證,數(shù)據(jù)可能丟失或重 復(fù),順序發(fā)送,可能亂序接收。
- 3.原始套接字(SOCK_RAW)。對(duì)應(yīng)多個(gè)協(xié)議,發(fā)送穿透了傳輸層 可以對(duì)較低層次協(xié)議如IP,ICMP直接訪問(wèn)。
2.IP地址
- IP地址是Internet中主機(jī)的標(biāo)識(shí),Internet中的主機(jī)要與別的機(jī)器通信必須具有一個(gè)IP地址,IP地址為32 為(Ipv4)或者128位(Ipv6),每個(gè)數(shù)據(jù)包都必須攜帶目的IP地址和源IP地址,路由器依靠此信息為數(shù) 據(jù)包選擇路由
- 表示的形式:常用點(diǎn)分形式,如202.38.64.10,最后都會(huì)轉(zhuǎn)化成一個(gè)32位的無(wú)符號(hào)整數(shù)
- mobileIPV6:local IP(本地注冊(cè)的IP),roma IP(漫游IP)
特殊IP地址
- 局域網(wǎng)IP: 192.XXX.XXX.XXX 10.XXX.XXX.XXX
- 廣播IP:xxx.xxx.xxx.255 255.255.255.255(全網(wǎng)廣播) 網(wǎng)絡(luò)風(fēng)暴
- 組播IP:224.xxx.xxx.xxx ~239.xxx.xxx.xxx
3.端口號(hào)
- 16位數(shù)字,1-65535
- 為了區(qū)分一臺(tái)主機(jī)接收到的數(shù)據(jù)包應(yīng)該轉(zhuǎn)交給哪個(gè)任務(wù)進(jìn)程處理,使用端口號(hào)來(lái)區(qū)別
- 預(yù)留端口,1-1023 (FTP:24,SSH:22,HTTP: 80,HTTPS :469)
- 保留端口: 1024-5000 (不建議使用)
- 可以使用的端口: 5000~65535
- TCP端口號(hào)于UDP端口號(hào)獨(dú)立
- 網(wǎng)絡(luò)里的通信是由 IP地址+端口號(hào) 來(lái)決定的
4.字節(jié)序
- 字節(jié)序是指不同的CPU訪問(wèn)內(nèi)存中的多字節(jié)數(shù)據(jù)時(shí)候,存在大小端的問(wèn)題
- 如果CPU訪問(wèn)的是字符串,則不存在大小端問(wèn)題
- 一般來(lái)說(shuō)X86/ARM : 小端模式
- ?power/miop:arm作為路由時(shí),大端模式
- 網(wǎng)絡(luò)傳輸?shù)臅r(shí)候采用大端模式
字節(jié)轉(zhuǎn)換函數(shù)
- 把給定系統(tǒng)所采用的字節(jié)序稱為主機(jī)字節(jié)序,為了避免不同類別主機(jī)之間在數(shù)據(jù)交換時(shí)由于對(duì)于字 節(jié)序的不同而導(dǎo)致的差錯(cuò),引入了網(wǎng)絡(luò)字節(jié)序。
- 主機(jī)字節(jié)序到網(wǎng)絡(luò)字節(jié)序
- u_long htonl(u_long hostlong);
- u_short htons(u_short short);
- 網(wǎng)絡(luò)字節(jié)序到主機(jī)字節(jié)序
- u_long ntohl(u_long hostlong);
- u_short ntohs(u_short short);
IP地址的轉(zhuǎn)換
- inet_aton()
????????將strptr所指的字符串轉(zhuǎn)換成32位的網(wǎng)絡(luò)字節(jié)序二進(jìn)制值
- inet_addr()
????????功能同上,返回轉(zhuǎn)換后的地址 僅適用于IPV4,出錯(cuò)時(shí)返回-1。
????????局限性:不能用于255.255.255.255的轉(zhuǎn)換
- inet_ntoa()
????????將32位網(wǎng)絡(luò)字節(jié)序二進(jìn)制地址轉(zhuǎn)換成點(diǎn)分十進(jìn)制的字符串
- inet_pton()
????????int inet_pton(int af, const char* src ,void* dst)
????????將IPV4/IPV6 的地址轉(zhuǎn)換成binary格式
????????使用于IPV4/IPV6 能正確處理255.255.255.255的轉(zhuǎn)換問(wèn)題
????????參數(shù):
????????1.地址協(xié)議族(AF_INET或AF_INET6)
????????2.src:是一個(gè)指針(填寫分點(diǎn)形式的IP地址(主要指IPV4))
????????dst:轉(zhuǎn)換的結(jié)果給到dst
- inet_ntop(int af,const void *src,char *dst,socklen_t size)
????????把ipv4和ipv6的網(wǎng)絡(luò)字節(jié)序變成本地的字符串形式的IP地址
????????參數(shù)
????????1.af:地址協(xié)議族(AF_INET或AF_INET6)
????????2.src:是一個(gè)指針(32)
????????3.dst:輸出結(jié)果為32位點(diǎn)分形式的IP地址文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-689466.html
????????4.size:長(zhǎng)度文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-689466.html
到了這里,關(guān)于Linux網(wǎng)絡(luò)編程 網(wǎng)絡(luò)基礎(chǔ)知識(shí)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!