linux面向连接的协议,linuxTCP协议.ppt
linuxTCP協(xié)議
課程安排 面向連接的套接字通信工作流程 綁定端口 監(jiān)聽與連接 數(shù)據(jù)的發(fā)送與接收 所謂socket套接字,指的是在網(wǎng)絡(luò)通信以前建立的通信接口。進(jìn)行網(wǎng)絡(luò)連接以前,需要向系統(tǒng)注冊申請一個(gè)新的socket。然后使用這個(gè)socket進(jìn)行網(wǎng)絡(luò)連接。 提示:套接字=傳輸層協(xié)議+端口號(hào)+IP地址。 在進(jìn)行網(wǎng)絡(luò)連接以前,需要用socket函數(shù)向系申請一個(gè)通信端口。這個(gè)函數(shù)的使用方法如下所示。 int socket(int domain, int type, int protocol); 面向連接的套接字通信工作流程 為了實(shí)現(xiàn)服務(wù)器與客戶機(jī)的通信,服務(wù)器和客戶機(jī)都必須建立套接字。服務(wù)器與 客戶機(jī)的工作原理可以用下面的過程來描述。 (1)服務(wù)器先用socket函數(shù)來建立一個(gè)套接字,用這個(gè)套接字完成通信的監(jiān)聽。 (2)用bind函數(shù)來綁定一個(gè)端口號(hào)和IP地址。因?yàn)楸镜赜?jì)算機(jī)可能有多個(gè)網(wǎng)卡和IP,每一 個(gè)IP有多個(gè)端口。需要指定一個(gè)IP和端口進(jìn)行監(jiān)聽。 (3)服務(wù)器調(diào)用listen函數(shù),使服務(wù)器的這個(gè)端口和IP處于監(jiān)聽狀態(tài),等待客戶機(jī)的連接 (4)客戶機(jī)用socket函數(shù)建立一個(gè)套接字,設(shè)定遠(yuǎn)程IP和端口。 (5)客戶機(jī)調(diào)用connect函數(shù)連接遠(yuǎn)程計(jì)算機(jī)指定的端口。 (6)服務(wù)器用accept函數(shù)來接受遠(yuǎn)程計(jì)算機(jī)的連接,建立起與客戶機(jī)之間的通信。 (7)建立連接以后,客戶機(jī)用write函數(shù)向socket中寫入數(shù)據(jù)。也可以用read函數(shù)讀取服 務(wù)器發(fā)送來的數(shù)據(jù)。 (8)服務(wù)器用read函數(shù)讀取客戶機(jī)發(fā)送來的數(shù)據(jù),也可以用write函數(shù)來發(fā)送數(shù)據(jù)。 (9)完成通信以后,用close函數(shù)關(guān)閉socket連接。 客戶機(jī)與服務(wù)器建立面向連接的套接字進(jìn)行通信,請求與響應(yīng)過程可用圖17-1來表示。 Socket Function 創(chuàng)建一個(gè)套接口,指定協(xié)議類型 ?#include //#include ?int fd= socket(int family, int type, int protocol) ?family ?AF_INET//IPv4 ?AF_INET6//IPv6 ?type ?SOCK_STREAM // TCP ?SOCK_DGRAM // UDP ?SOCK_RAW // IP ?Protocol = 0 // 一般一個(gè)套接字類型只支持一個(gè)協(xié)議 ?//返回值:出錯(cuò)返回-1,否則返回socket 套接字描述符 綁定端口 綁定端口指的是將套接字與指定的端口相連。用socket函數(shù)建立起一個(gè)套接字以后,需要用bind函數(shù)在這個(gè)套接字上面綁定一個(gè)端口。 提示:只有套接字建立后才能夠執(zhí)行端口綁定操作。 綁定端口函數(shù)bind:函數(shù)bind可以將一個(gè)端口綁定到一個(gè)已經(jīng)建立的socket上,這個(gè)函數(shù)的使用方法如下所示。 int bind(int sockfd,struct sockaddr *my_addr,int addrlen); 參數(shù)列表中,sockfd是已經(jīng)建立的socket編號(hào)。sockaddr是一個(gè)指向sockaddr結(jié)構(gòu)體類型的指針。sockaddr的定義方法如下所示。 struct sockaddr { unsigned short int sa_family; char sa_data[14]; }; 這個(gè)結(jié)構(gòu)體的成員含義如下所示。 sa_family:為調(diào)用socket()時(shí)的domain參數(shù),即AF_xxxx值。 sa_data:最多使用14個(gè)字符長度,含有IP地址與端口的信息。 如果建立socket時(shí)使用的是AF_INET參數(shù),則sockaddr結(jié)構(gòu)體的定義方法如下所示。 01struct sockaddr_in 02{ 03 unsigned short int sin_family; 04 uint16_t sin_port;//2 05 struct in_addr sin_addr; //4 06 unsigned char sin_zero[8]; 07}; 結(jié)構(gòu)體的成員addr也是一個(gè)結(jié)構(gòu)體,定義方式如下所示。 struct in_addr { uint32_t s_addr; }; 在這些結(jié)構(gòu)體中,成員變量的作用與含義如下所示。 sin_family:即為sa_family,為調(diào)用socket()時(shí)的domain參數(shù)。 sin_port:使用的端口號(hào)。 sin_addr.s_addr:IP 地址。 sin_zero:未使用的字段,填充為0。 參數(shù)addrlen是my_addr的長度,可以用sizeof函數(shù)來取得。函數(shù)可以把指定的IP與端口綁定到已經(jīng)建立的socket上面。
總結(jié)
以上是生活随笔為你收集整理的linux面向连接的协议,linuxTCP协议.ppt的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux imq原理图,编译IMQ模块
- 下一篇: linux网络寻址顺序,51CTO博客-