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