TCP/IP編程基本知識(shí)
[TOC]
網(wǎng)絡(luò)定義
TCP協(xié)議分為兩個(gè)不同的協(xié)議
TCP:用來(lái)檢測(cè)網(wǎng)絡(luò)傳輸中差錯(cuò)的傳輸控制協(xié)議
IP:專(zhuān)門(mén)負(fù)責(zé)對(duì)不同網(wǎng)絡(luò)進(jìn)行互聯(lián)都的互聯(lián)網(wǎng)協(xié)議
分層思想
每一層實(shí)現(xiàn)不同的功能般哼,對(duì)上層的數(shù)據(jù)做同名傳輸
OSI模型
七層
應(yīng)用層
各種應(yīng)用程序協(xié)議:HTTP、FTP恢氯、SMTP娃承、POP3
表示層
信息的語(yǔ)法語(yǔ)義以及他們的關(guān)聯(lián)予弧,如加密解密昆淡、轉(zhuǎn)換翻譯嚼吞、壓縮解壓縮
會(huì)話層
不同機(jī)器上的用戶之間建立及管理回話
傳輸層
接受上一層的數(shù)據(jù)盒件,在必要的時(shí)候把數(shù)據(jù)進(jìn)行分割,并將這些數(shù)據(jù)交給網(wǎng)絡(luò)層并且保證這些數(shù)據(jù)段有效到達(dá)對(duì)端舱禽。
網(wǎng)絡(luò)層
控制子網(wǎng)的運(yùn)行炒刁,如邏輯編制、分組傳輸誊稚、路由選擇
數(shù)據(jù)鏈路層
物理尋址翔始,同事將原始比特流轉(zhuǎn)變?yōu)榱_技傳輸線路
物理層
機(jī)械、電子里伯、電視接口通信信道上原始比特流傳輸
四層
應(yīng)用層
Telnet城瞎,F(xiàn)TP,HTTP疾瓮,DNS脖镀,SMTP
傳輸層
TCP和UDP
網(wǎng)絡(luò)層
IP,ICMP狼电,IGMP
網(wǎng)絡(luò)接口和物理層
以太網(wǎng)蜒灰,令牌環(huán)網(wǎng),F(xiàn)DDI
協(xié)議解釋
網(wǎng)絡(luò)接口與物理層
MAC地址:48位全球唯一肩碟,網(wǎng)絡(luò)設(shè)備的身份標(biāo)識(shí)
ARP/RARP:
ARP:地址解析協(xié)議强窖,IP地址解析成MAC地址
RARP:MAC地址解析成IP地址
PPP協(xié)議
撥號(hào)協(xié)議(GPRS/3G/4G),從有線發(fā)展成無(wú)線
網(wǎng)絡(luò)層
IP協(xié)議:身為IPV4和IPV6協(xié)議
ICMP:Internet控制管理協(xié)議削祈,ping命令屬于ICMP
IGMP:Internet分組管理協(xié)議翅溺,廣播、組播
傳輸層
TCP:傳輸控制協(xié)議髓抑,提供面相連接的咙崎,一對(duì)一的可靠數(shù)據(jù)傳輸協(xié)議(即數(shù)據(jù)無(wú)誤、數(shù)據(jù)無(wú)丟失吨拍、數(shù)據(jù)無(wú)失序叙凡,數(shù)據(jù)無(wú)重復(fù))
UDP:用戶數(shù)據(jù)報(bào)協(xié)議,提供不可靠密末,無(wú)連接的盡力傳輸協(xié)議(實(shí)時(shí)性好于TCP握爷,不需要進(jìn)行連接跛璧,可以進(jìn)行高效率的數(shù)據(jù)傳輸)
SCTP:流控制傳輸協(xié)議,TCP增強(qiáng)版新啼,能實(shí)現(xiàn)多主機(jī)追城、多鏈路的通信
應(yīng)用層
網(wǎng)頁(yè)訪問(wèn)協(xié)議:HTTP/HTTPS
郵件發(fā)送接收協(xié)議:POP3(收)/SMTP(發(fā))、IMAP
文件傳輸:FTP
遠(yuǎn)程登錄:Telnet/SSH
Telnet:明文傳輸
SSH:加密傳輸
嵌入式相關(guān)
網(wǎng)絡(luò)時(shí)鐘協(xié)議:NTP
簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議(實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)設(shè)備集中式管理):SNMP
用傳輸音視頻的協(xié)議(安防監(jiān)控):RTP/RTSP(基于TCP與UDP共通實(shí)現(xiàn))
編程
socket編程
Socket是一個(gè)應(yīng)用編程接口
是一種特特殊的文件描述符(可執(zhí)行IO操作燥撞,比如read()座柱,write(),close())
不僅限于TCP/IP
面向鏈接(TCP/IP)
無(wú)鏈接(UDP物舒,IPX)
代表網(wǎng)絡(luò)的一種資源
Socket類(lèi)型
流式套接字
唯一對(duì)應(yīng)TCP
提供一個(gè)面向鏈接色洞,可靠的數(shù)據(jù)傳輸服務(wù),數(shù)據(jù)誤差錯(cuò)冠胯,無(wú)重復(fù)火诸,且按發(fā)送數(shù)據(jù)接收。內(nèi)設(shè)置流量控制荠察,避免數(shù)據(jù)流淹沒(méi)慢的接收方置蜀。數(shù)據(jù)被看作時(shí)字流,無(wú)長(zhǎng)度限制
數(shù)據(jù)報(bào)套接字
唯一對(duì)應(yīng)UDP
提供五連接服務(wù)悉盆,數(shù)據(jù)包已獨(dú)立數(shù)據(jù)包的形式被發(fā)送盯荤,不提供無(wú)差錯(cuò)保證數(shù)據(jù)可能丟失或重復(fù),順序發(fā)送焕盟,可能亂序接收秋秤。
原始套接字
對(duì)應(yīng)多個(gè)協(xié)議,發(fā)送穿透了傳輸層
可以對(duì)較低層次協(xié)議直接訪問(wèn)脚翘,如IP/ICMP
IP地址
分類(lèi)
IPV4:采用32位整數(shù)表示
IPV6:采用128位整數(shù)表示
mobileIPV6:local IP-本地注冊(cè)的IP灼卢,roam IP-漫游IP
IPV4
形式
點(diǎn)分形式:192.168.1.201
32位整數(shù)形式
特殊IP地址
局域網(wǎng):192.XXX.XXX.XXX;10.XXX.XXX.XXX
廣播IP:xxx.xxx.xxx.255堰怨;255.255.255.255(全網(wǎng)廣播)
組播IP:224.XXX.XXX.XXX~239.XXX.XXX.XXX
IP地址轉(zhuǎn)換函數(shù):
inet_addr()
in_addr_t inet_addr(const char *cp)
參數(shù):
cp:點(diǎn)分形式的IP地址,結(jié)果時(shí)32位(內(nèi)部包含了字節(jié)序的轉(zhuǎn)換蛇摸,默認(rèn)時(shí)網(wǎng)絡(luò)自己序模式)
特點(diǎn)
僅適用于IPv4
出錯(cuò)時(shí)返回-1
不能用于255.255.255.255的轉(zhuǎn)換
#include <arpa/inet.h>
int inet_pton(int af, const char *src, void *dst);
特點(diǎn)
適用于IPv4和IPv6
能正確處理255.255.255.255(-1)的轉(zhuǎn)換
參數(shù)
成功返回1备图,出錯(cuò)返回0,或-1
af:地址協(xié)議族(AF_INET或AF_INET6)
src:源IP的指針[點(diǎn)分形式]
dst:轉(zhuǎn)換結(jié)果
int inet_ntop(int af, const char *src, char *dst, socklen_t size);
特點(diǎn)
成功返回非空的指針赶袄,失敗返回NULL
適用于IPv4和IPv6
能正確處理255.255.255.255(-1)的轉(zhuǎn)換
參數(shù)
af:地址協(xié)議組(AF_INET或AF_INET6)
src:源IP的指針[32位網(wǎng)絡(luò)字節(jié)序IP地址]
dst:轉(zhuǎn)換結(jié)果給到dst[點(diǎn)分形式的IP地址揽涮,主要指IPv4]
大低高網(wǎng)(大端低地址存高字節(jié),網(wǎng)絡(luò)字節(jié)序?yàn)榇蠖耍?/em>
端口號(hào)
16位數(shù)字饿肺,1-65535
預(yù)留端口蒋困,1-1023
FTP:21
SSH:22
HTTP:80
HTTPS:469
保留端口,1024-5000
可使用的5000-65535
TCP端口和UDP的端口相互獨(dú)立
字節(jié)序
定義
不同的CPU訪問(wèn)內(nèi)存中的多字節(jié)數(shù)據(jù)的時(shí)候敬辣,存在大小端的問(wèn)題
如果CPU訪問(wèn)的是字符串雪标,則不存在大小端的問(wèn)題
小端模式
低對(duì)低
低序字節(jié)存儲(chǔ)在低地址
x86 / ARM
大端模式
高對(duì)低
高序字節(jié)存儲(chǔ)在低地址
PowerPC / MIPS / ARM作為路由器
本地字節(jié)序(HBO-Host Byte Order)
與所使用的處理器有關(guān)
網(wǎng)絡(luò)字節(jié)序(NBO-Network Byte Order)
必為大端字節(jié)序
轉(zhuǎn)換函數(shù)
主機(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 ntols(u_short short)