《TCP IP協(xié)議 知識(shí)總結(jié)》由會(huì)員分享,可在線閱讀,更多相關(guān)《TCP IP協(xié)議 知識(shí)總結(jié)(5頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、/***********************0809 TCP/IP知識(shí)總結(jié)*********************************/
1. OSI 開(kāi)放系統(tǒng)互連模型 (理想化的狀態(tài),在這個(gè)狀態(tài)內(nèi)給個(gè)層各司其職)
總共有7層。 應(yīng)用層:FTP,WWW,Telnet,NFS,SMTP,Gateway,SNMP
表示層: TIFF,GIF,JPEG(編解碼),PICT,ASCII,EBCDIC,
encryption,MPEG,MIDI,HTML
會(huì)話層:RPC,SQL,NFS,NetBIOS,names,AppleTalk,ASP,DECn
2、et,SCP
傳輸層:TCP,UDP,SPX
網(wǎng)絡(luò)層:IP(尋址方式),IPX(),AppleTalk (蘋果自定義的協(xié)議)
數(shù)據(jù)鏈路層:Frame Relay, HDLC, PPP(點(diǎn)對(duì)點(diǎn)), IEEE
802.3/802.2, FDDI, ATM, IEEE 802.5/802.2
物理層:EIA/TIA-232, EIA/TIA-499, V.35, V.24, RJ45,
Ethernet, 802.3, 802.5, FDDI, NRZI, NRZ, B8ZS
2. TCP/IP協(xié)議架構(gòu)體系
3、 應(yīng)用層:Telnet(超級(jí)終端,遠(yuǎn)程登錄),FTP,SMTP,SNMP.
用戶進(jìn)行操作;
傳輸層:TCP (重),UDP(重),UGP
獲取數(shù)據(jù);
網(wǎng)絡(luò)層: IP(地址標(biāo)識(shí)符),ICMP(跳過(guò)傳輸層,ping命令...),IGMP
主要用于尋找地址;
數(shù)據(jù)鏈路層:ARP,RARP 包括驅(qū)動(dòng)和硬件;
Ethernet(以太網(wǎng));IE802.ng(無(wú)線)
3.
數(shù)據(jù)鏈路層:負(fù)責(zé)在不同的傳輸媒介上處理物理信號(hào)硬件細(xì)節(jié),從而實(shí)現(xiàn)數(shù)據(jù)在不同媒介直接傳送對(duì)應(yīng)我們所說(shuō)的驅(qū)動(dòng)程序和網(wǎng)卡
網(wǎng)絡(luò)層:控制數(shù)據(jù)在網(wǎng)絡(luò)
4、中傳輸路徑,即是數(shù)據(jù)傳送給誰(shuí),包括地址標(biāo)識(shí)和尋址方式
管理協(xié)議:ICMP,ICMPv, IGMP, MLD
傳輸層:提供兩個(gè)主機(jī)之間的應(yīng)用程序提供數(shù)據(jù)傳輸服務(wù)。比如數(shù)據(jù)應(yīng)該交給哪個(gè)進(jìn)程處理,
當(dāng)數(shù)據(jù)沒(méi)有到達(dá)對(duì)方進(jìn)程時(shí),或者當(dāng)數(shù)據(jù)堵塞時(shí),該如何處理:流量控制
當(dāng)接收數(shù)據(jù),如何判斷數(shù)據(jù)的完整性:差錯(cuò)控制
會(huì)話層: 負(fù)責(zé)在網(wǎng)絡(luò)中的兩節(jié)點(diǎn)之間建立和維持通信。會(huì)話層的功能包括:建立通信鏈接,保持會(huì)話過(guò)程通信鏈接的暢通,同步兩個(gè)節(jié)點(diǎn)之間的對(duì) 話,決定通信是否被中斷以及通信中斷時(shí)決定從何處重新發(fā)送。你可能常常聽(tīng)到有人把會(huì)話層稱作網(wǎng)絡(luò)通信的“交通警察”當(dāng)通過(guò)撥號(hào)向你的 I S
5、 P (因特網(wǎng)服務(wù)提供商)請(qǐng)求連接到因特網(wǎng)時(shí), I S P 服務(wù)器上的會(huì)話層向你與你的P C 客戶機(jī)上的會(huì)話層進(jìn)行協(xié)商連接。若你的電話線偶然從墻上插孔脫落時(shí),你終端機(jī)上的會(huì)話層將檢測(cè)到連接中斷并重新發(fā)起連接。會(huì)話層通過(guò)決定節(jié)點(diǎn)通信的優(yōu)先級(jí)和通信時(shí)間的長(zhǎng)短來(lái)設(shè)置通信期限
表示層: 應(yīng)用程序和網(wǎng)絡(luò)之間的翻譯官,在表示層,數(shù)據(jù)將按照網(wǎng)絡(luò)能理解的方案進(jìn)行格式化;這種格式化也因所使用網(wǎng)絡(luò)的類型不同而不同。表示層管理數(shù)據(jù)的解密與加密,如系統(tǒng)口令的處理表示層協(xié)議還對(duì)圖片和文件格式信息進(jìn)行解碼和編碼
3.對(duì)于分層而言,每一個(gè)分層都有相應(yīng)的協(xié)議;并且個(gè)從上到下每一個(gè)分層的協(xié)議都是基于
下一個(gè)協(xié)
6、議的,如果沒(méi)有下一個(gè)分層的話,是沒(méi)有任何意義的。
4.用戶數(shù)據(jù)的打包過(guò)程:
Ethernet IP TCP APP user Ethernet
head head head head data trailer
以太網(wǎng)頭
5. 數(shù)據(jù)解析
在以太網(wǎng)驅(qū)動(dòng)解析時(shí),以太網(wǎng)得到是IP 將數(shù)據(jù)包交給IP來(lái)解析,IP解析后,得到TCP,,將數(shù)據(jù)包再交給TCP 來(lái)解析,當(dāng)TCP解析后,查看端口,將數(shù)據(jù)包根據(jù)記錄的端口號(hào)通過(guò)端口交給應(yīng)用;
6. 路由器的作用:
路由: 選擇最優(yōu)最好的路徑;
對(duì)打包好的數(shù)據(jù)進(jìn)行發(fā)送;
互換不同的網(wǎng)絡(luò)(有線和無(wú)線);
7
7、.以太網(wǎng)與令牌網(wǎng)的區(qū)別
本質(zhì)是硬件不同,用戶的網(wǎng)卡硬件決定;
8.TCP 協(xié)議特點(diǎn)(先建立連接,在發(fā)送數(shù)據(jù))
(傳輸控制協(xié)議)面向連接的傳輸層協(xié)議;提供可靠的通信;
SOCK_STREAM 流式套接字;
以字符流(character stream)的形式來(lái)發(fā)送數(shù)據(jù);但是,為了提高TCP傳輸效率,是將數(shù)據(jù)先存起來(lái),當(dāng)達(dá)到一定字節(jié)才按一定TCP數(shù)據(jù)報(bào)格式打包發(fā)送;在接受的過(guò)程需考慮數(shù)據(jù)邊界。如果沒(méi)有邊界,則將產(chǎn)生PTC粘包;
9.UDP協(xié)議特點(diǎn)(不可靠的無(wú)連接協(xié)議)
(數(shù)據(jù)報(bào)協(xié)議)無(wú)論接收方是否在線,知道對(duì)方地址都進(jìn)行數(shù)據(jù)發(fā)送??蛇M(jìn)行高效率的傳輸;但是不能保證數(shù)據(jù)的可靠性;
8、
SOCK_DGRAM 數(shù)據(jù)報(bào)套接字;
無(wú)論多少個(gè)字節(jié)都打包成UDP數(shù)據(jù)報(bào)進(jìn)行發(fā)送。
10.socket 套接字
特點(diǎn)a.插口的形式;
b.socket 是成對(duì)出現(xiàn)的;
c.socket 的類型:
流式套接字SOCK_STREAM;
數(shù)據(jù)報(bào)套接字SOCK_DGRAM
原始套接字 SOCK_RAW
d.編程接口 socket() 函數(shù);
11.字節(jié)序:數(shù)據(jù)存放在內(nèi)存的序列;
大段模式:高位先存(左邊為高位)
小段模式:低位先存(右邊為低位)
在讀取時(shí),都是從低位開(kāi)始讀,但是在廣域網(wǎng)中存儲(chǔ)均是大端模式,因此在網(wǎng)絡(luò)編程中,需將
9、字節(jié)轉(zhuǎn)換為大端;
12.TCP|UDP端口號(hào),端口號(hào)為short型的,個(gè)數(shù)為65535
在1-1024之間,端口號(hào)為眾所周知的,不能申請(qǐng)占用;
在1024-5000之間為系統(tǒng)占用,也不可申請(qǐng)占用;
在5000~65535之間,用戶可申請(qǐng)占用;
在使用過(guò)程中,申請(qǐng)5000以上的;
13.IP地址
32位存儲(chǔ);
24位為網(wǎng)絡(luò)號(hào);8位位主機(jī)號(hào);但是在使用過(guò)程中,一般不占用0,1,255.這3個(gè)用做特殊用途;
14.TCP |UDP 都存有1個(gè)進(jìn)程向系統(tǒng)申請(qǐng)的端口號(hào)。
15.對(duì)于端口和IP號(hào),都需轉(zhuǎn)換成大端的模式;
16.字節(jié)序轉(zhuǎn)換
1. 主機(jī)字節(jié)序到網(wǎng)絡(luò)字節(jié)序
10、 u_long htonl(u_long hostlong);
u_short htons(u_short short);
2. 網(wǎng)絡(luò)字節(jié)序到主機(jī)字節(jié)序
u_long ntohl(u_long hostlong)
u_short ntohs(u_short short)
3. IP地址轉(zhuǎn)換函數(shù)
a. int inet_aton(const char*strptr, struct in_addr*addptr);
b. char * inet_ntoa(struct in_addr addr)
將用inet_aton 轉(zhuǎn)換過(guò)的轉(zhuǎn)換回來(lái)
缺點(diǎn),不能轉(zhuǎn)換IPV6
11、的地址;
將讀出的東西存入struct in_addr addptr 中;
struct in_addr
{
in_addr_t s_addr;
}
a. in_addr_t inet_addr(const char *strptr)
缺點(diǎn),不能轉(zhuǎn)換255.255.255.255 若強(qiáng)制轉(zhuǎn)換轉(zhuǎn)換后為-1;
struct in_addr *addr
a. int pton(int af, const char *strptr, (void *)&addr)
b. const char *inet_ntop(int af, const void *src,char *
12、dst, socklen_t size);
將用inet_pton 轉(zhuǎn)換過(guò)的轉(zhuǎn)換回來(lái)
可轉(zhuǎn)換任意類型的
17.socket 函數(shù)
函數(shù)原型: int socket(int domain, int type, int protocol);
返回值:成功返回一個(gè)類似文件描述符的數(shù)字,也是從最小3開(kāi)始;錯(cuò)誤返回-1
參數(shù)解析:
domain通信域 AF_INET 因特網(wǎng)通信域,跨機(jī)器進(jìn)程間通信;
AF_UNIX AF_LOCA 本機(jī)中進(jìn)程與進(jìn)程間通信;
AF_INET6 因特網(wǎng)通訊,是IPV6類型;
AF_NETLINK 用戶進(jìn)程與內(nèi)
13、核之間的通信;
Type套接字類型; SOCK_STREAM 流式套接字
SOCK_DGRAM 數(shù)據(jù)報(bào)套接字
SOCK_RAW 原始套接字
Protocol (協(xié)議) 參數(shù)總是0;
18.協(xié)議結(jié)構(gòu)體
通用的協(xié)議結(jié)構(gòu)體
struct sockaddr
{
sa_family_t sa_family;
char sa_data[14];
}
Internet 協(xié)議結(jié)構(gòu)體
strcut so
14、caddr_in
{
u_short sin_family; //通信域
u_short sin_port; //端口號(hào)
struct in_addr sin_addr; //IP地址
char sin_zero[8]; //8個(gè)沒(méi)用的字節(jié);用于與通用結(jié)構(gòu)體大小保持一致;
}
Internet address 結(jié)構(gòu)體;
struct in_addr
{
in_addr_t s_addr;
}
19.給結(jié)構(gòu)體初始化;
Memset(struct struct1 *strptr, ‘char’, sizeof(st
15、ruct1));
Bzero(struct struct2*strptr, sizeof(struct2));
20.bind () 函數(shù) 綁定
將地址結(jié)構(gòu)體綁定到套接字(socket)描述符上;
(1);地址結(jié)構(gòu)體以包含IP和端口號(hào);
(2)想系統(tǒng)申請(qǐng)端口資源;
(3)不能將同一個(gè)地址結(jié)構(gòu)體綁定到同類型的套接字上;
(4)對(duì)于發(fā)送端,可以不綁定,也可以綁定;如果不綁定,系統(tǒng)自動(dòng)綁定;并且分配端口;但是對(duì)于接收端,必須要綁定;
函數(shù)原型 int bind(int sockfd, const struct sockaddr *addr, socklen_t ad
16、drlen);
返回值 成功返回0;不成功返回-1;
參數(shù)解析;
Sockfd 用socket 函數(shù)時(shí)返回的類似文件描述符的值;
Addr 定義的struct sockaddr addr;
Addlen sockaddr_in 結(jié)構(gòu)體的大?。?
21.listen()函數(shù)
監(jiān)聽(tīng)鏈接的套接字,將自己的套接字變成被動(dòng)連接類型;
函數(shù)原型 : int listen(int sockfd, int backlog);
返回值: 成功 0;
錯(cuò)誤-1;
參數(shù)解析:
Sockfd socket 函數(shù)的返回的類似文件描述符;
17、 Backlog 等待建立鏈接的客戶端數(shù)量:
一般設(shè)定5-10個(gè);
22.accept()函數(shù)
等待對(duì)方主動(dòng)鏈接;也就是等待對(duì)方的connect()主動(dòng)鏈接;
函數(shù)原型 int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
返回值 成功返回一個(gè)新的類似文件描述符的東西;也就是用connect()激活的accept()的那個(gè)端口號(hào);
錯(cuò)誤返回-1;
參數(shù)解析;
Sockfd 自己調(diào)用socket ()函數(shù)的返回的類似文件描述符
Addr 定義一個(gè)結(jié)構(gòu)體用于接收對(duì)方的地址結(jié)構(gòu);
Addrlen 接收的結(jié)構(gòu)體的大?。?
23.connect()函數(shù)
主動(dòng)鏈接服務(wù)器;等待accept()函數(shù)響應(yīng);
函數(shù)原型:int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
返回值:成功返回0;錯(cuò)誤返回-1;
參數(shù)解析;sockfd 自己調(diào)用socket()返回的類似文件描述符
Addr 服務(wù)段自己的地址結(jié)構(gòu);
Addrlen 自己的地址結(jié)構(gòu)的長(zhǎng)度;