一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

套接字(socket)

 nxhujiee 2019-03-26
套接字(socket)
━━━━━━━━━━━━━━━━━━━━━━━━━

TCP用主機(jī)的IP地址加上主機(jī)上的端口號作為TCP連接的端點,這種端點就叫做套接字(socket)或插口。
套接字用(IP地址:端口號)表示

它是網(wǎng)絡(luò)通信過程中端點的抽象表示,包含進(jìn)行網(wǎng)絡(luò)通信必需的五種信息:連接使用的協(xié)議,本地主機(jī)的IP地址,本地進(jìn)程的協(xié)議端口,遠(yuǎn)地主機(jī)的IP地址,遠(yuǎn)地進(jìn)程的協(xié)議端口。

1、分類
常用的TCP/IP協(xié)議的3種套接字類型如下所示。

流式套接字(SOCK_STREAM):

流式套接字用于提供面向連接、可靠的數(shù)據(jù)傳輸服務(wù)。該服務(wù)將保證數(shù)據(jù)能夠?qū)崿F(xiàn)無差錯、無重復(fù)發(fā)送,并按順序接收。流式套接字之所以能夠?qū)崿F(xiàn)可靠的數(shù)據(jù)服務(wù),原因在于其使用了傳輸控制協(xié)議,即TCP(The Transmission Control Protocol)協(xié)議。

數(shù)據(jù)報套接字(SOCK_DGRAM):

數(shù)據(jù)報套接字提供了一種無連接的服務(wù)。該服務(wù)并不能保證數(shù)據(jù)傳輸?shù)目煽啃?,?shù)據(jù)有可能在傳輸過程中丟失或出現(xiàn)數(shù)據(jù)重復(fù),且無法保證順序地接收到數(shù)據(jù)。數(shù)據(jù)報套接字使用UDP(User Datagram Protocol)協(xié)議進(jìn)行數(shù)據(jù)的傳輸。由于數(shù)據(jù)報套接字不能保證數(shù)據(jù)傳輸?shù)目煽啃裕瑢τ谟锌赡艹霈F(xiàn)的數(shù)據(jù)丟失情況,需要在程序中做相應(yīng)的處理。

原始套接字(SOCK_RAW):

原始套接字(SOCKET_RAW)允許對較低層次的協(xié)議直接訪問,比如IP、 ICMP協(xié)議,它常用于檢驗新的協(xié)議實現(xiàn),或者訪問現(xiàn)有服務(wù)中配置的新設(shè)備,因為RAW SOCKET可以自如地控制Windows下的多種協(xié)議,能夠?qū)W(wǎng)絡(luò)底層的傳輸機(jī)制進(jìn)行控制,所以可以應(yīng)用原始套接字來操縱網(wǎng)絡(luò)層和傳輸層應(yīng)用。比如,我們可以通過RAW SOCKET來接收發(fā)向本機(jī)的ICMP、IGMP協(xié)議包,或者接收TCP/IP棧不能夠處理的IP包,也可以用來發(fā)送一些自定包頭或自定協(xié)議的IP包。網(wǎng)絡(luò)監(jiān)聽技術(shù)很大程度上依賴于SOCKET_RAW

原始套接字與標(biāo)準(zhǔn)套接字(標(biāo)準(zhǔn)套接字指的是前面介紹的流式套接字和數(shù)據(jù)報套接字)的區(qū)別在于:原始套接字可以讀寫內(nèi)核沒有處理的IP數(shù)據(jù)包,而流式套接字只能讀取TCP協(xié)議的數(shù)據(jù),數(shù)據(jù)報套接字只能讀取UDP協(xié)議的數(shù)據(jù)。因此,如果要訪問其他協(xié)議發(fā)送數(shù)據(jù)必須使用原始套接字。

2、簡介
套接字,是支持TCP/IP的網(wǎng)絡(luò)通信的基本操作單元,可以看做是不同主機(jī)之間的進(jìn)程進(jìn)行雙向通信的端點,簡單的說就是通信的兩方的一種約定,用套接字中的相關(guān)函數(shù)來完成通信過程。

非常非常簡單的舉例說明下:
Socket=Ip address+ TCP/UDP + port

3、連接方式
應(yīng)用層通過傳輸層進(jìn)行數(shù)據(jù)通信時,TCP和UDP會遇到同時為多個應(yīng)用程序進(jìn)程提供并發(fā)服務(wù)的問題。

4、主要參數(shù)
區(qū)分不同應(yīng)用程序進(jìn)程間的網(wǎng)絡(luò)通信和連接,主要有3個參數(shù):通信的目的IP地址、使用的傳輸層協(xié)議(TCP或UDP)和使用的端口號。Socket原意是 “插座”。通過將這3個參數(shù)結(jié)合起來,與一個“插座”Socket綁定,應(yīng)用層就可以和傳輸層通過套接字接口,區(qū)分來自不同應(yīng)用程序進(jìn)程或網(wǎng)絡(luò)連接的通信,實現(xiàn)數(shù)據(jù)傳輸?shù)牟l(fā)服務(wù)。

Socket可以看成在兩個程序進(jìn)行通訊連接中的一個端點,是連接應(yīng)用程序和網(wǎng)絡(luò)驅(qū)動程序的橋梁,Socket在應(yīng)用程序中創(chuàng)建,通過綁定與網(wǎng)絡(luò)驅(qū)動建立關(guān)系。此后,應(yīng)用程序送給Socket的數(shù)據(jù),由Socket交給網(wǎng)絡(luò)驅(qū)動程序向網(wǎng)絡(luò)上發(fā)送出去。計算機(jī)從網(wǎng)絡(luò)上收到與該Socket綁定IP地址和端口號相關(guān)的數(shù)據(jù)后,由網(wǎng)絡(luò)驅(qū)動程序交給Socket,應(yīng)用程序便可從該Socket中提取接收到的數(shù)據(jù),網(wǎng)絡(luò)應(yīng)用程序就是這樣通過Socket進(jìn)行數(shù)據(jù)的發(fā)送與接收的。

5、分類介紹
Host A上的程序A將一段信息寫入Socket中,Socket的內(nèi)容被Host A的網(wǎng)絡(luò)管理軟件訪問,并將這段信息通過Host A的網(wǎng)絡(luò)接口卡發(fā)送到Host B,Host B的網(wǎng)絡(luò)接口卡接收到這段信息后,傳送給Host B的網(wǎng)絡(luò)管理軟件,網(wǎng)絡(luò)管理軟件將這段信息保存在Host B的Socket中,然后程序B才能在Socket中閱讀這段信息。

假設(shè)在網(wǎng)絡(luò)中添加第三個主機(jī)Host C,那么Host A怎么知道信息被正確傳送到Host B而不是被傳送到Host C中了呢?基于TCP/IP網(wǎng)絡(luò)中的每一個主機(jī)均被賦予了一個唯一的IP地址,IP地址是一個32位的無符號整數(shù),由于沒有轉(zhuǎn)變成二進(jìn)制,因此通常以小數(shù)點分隔,如:198.163.227.6,正如所見IP地址均由四個部分組成,每個部分的范圍都是0-255,以表示8位地址。

值得注意的是IP地址都是32位地址,這是IP協(xié)議版本4(簡稱Ipv4)規(guī)定的,目前由于IPv4地址已近耗盡,所以IPv6地址正逐漸代替Ipv4地址,Ipv6地址則是128位無符號整數(shù)。

假設(shè)第二個程序被加入的網(wǎng)絡(luò)的Host B中,那么由Host A傳來的信息如何能被正確的傳給程序B而不是傳給新加入的程序呢?這是因為每一個基于TCP/IP網(wǎng)絡(luò)通訊的程序都被賦予了唯一的端口和端口號,端口是一個信息緩沖區(qū),用于保留Socket中的輸入/輸出信息,端口號是一個16位無符號整數(shù),范圍是0-65535,以區(qū)別主機(jī)上的每一個程序(端口號就像房屋中的房間號),低于256的端口號保留給標(biāo)準(zhǔn)應(yīng)用程序,比如pop3的端口號就是110,每一個套接字都組合進(jìn)了IP地址、端口、端口號,這樣形成的整體就可以區(qū)別每一個套接字。

6、Sockets
流式套接字

本文描述流式套接字,它是兩種可用的Sockets類型中的一種。(另一種類型是數(shù)據(jù)報套接字 。)

流式套接字提供沒有記錄邊界的數(shù)據(jù)流:可以是雙向的字節(jié)流(應(yīng)用程序是全雙工:可以通過套接字同時傳輸和接收)。可依賴流傳遞有序的、不重復(fù)的數(shù)據(jù)。(“有序”指數(shù)據(jù)包按發(fā)送順序送達(dá)。“不重復(fù)”指一個特定的數(shù)據(jù)包只能獲取一次。)這能確保收到流消息,而流非常適合處理大量數(shù)據(jù)。

網(wǎng)絡(luò)傳輸層可將數(shù)據(jù)拆分為分組或若干個大小適當(dāng)?shù)臄?shù)據(jù)包。 CSocket 類將為您處理打包和解包。

流基于顯式連接:套接字 A 請求與套接字 B 建立連接;套接字 B 接受或拒絕此連接請求。

打電話的情況與流非常相似:正常情況下,接聽方聽到您的話和您講話時的順序一樣,沒有重復(fù)和遺漏。流套接字適合文件傳輸協(xié)議(FTP) 這類實現(xiàn),此協(xié)議有利于傳輸任意大小的 ASCII 或二進(jìn)制文件。

如果必須保證數(shù)據(jù)送達(dá)而且數(shù)據(jù)大小很大時,流式套接字優(yōu)于數(shù)據(jù)報套接字。有關(guān)流式套接字的更多信息,請參見Sockets規(guī)范。該規(guī)范可在 Platform SDK 中獲得。

MFC 示例 CHATTER 和 CHATSRVR 都使用流式套接字。這些示例可能已經(jīng)設(shè)計為使用數(shù)據(jù)報套接字向網(wǎng)絡(luò)上的所有接收套接字廣播。而目前的設(shè)計更好,這是因為:

廣播模型受制于網(wǎng)絡(luò)“洪水”(或“風(fēng)暴”)問題。

后來采用的客戶端-服務(wù)器模型更有效。

流式模型提供可靠的數(shù)據(jù)傳輸,數(shù)據(jù)報模型則未提供。

最終模型利用在 CArchive 類借給 CSocket 類的 Unicode 和 ANSI 套接字應(yīng)用程序之間通信的能力。

7、注意
如果使用 CSocket 類,則必須使用流。如果將套接字類型指定為 SOCK_DGRAM ,則 MFC 斷言失敗

Sockets 示例列表

下列 MFC 示例程序闡釋了Sockets功能:

CHATTER

CHATTER 是一個套接字客戶端示例應(yīng)用程序。它是一個具有拆分窗口的單文檔界面 (SDI) 應(yīng)用程序,允許用戶將消息發(fā)送到討論服務(wù)器 (CHATSRVR),討論服務(wù)器然后將消息同時發(fā)送給其他多個 CHATTER 用戶。

通過使 CHATTER 應(yīng)用程序向服務(wù)器發(fā)送廣播數(shù)據(jù)文報包而不是消息流,可以在不使用客戶端/服務(wù)器模型的情況下編寫 CHATTER 和 CHATSRVR。然而,與流式套接字不同,數(shù)據(jù)文報套接字不能保證一定會被傳送;因此,一些消息可能不會到達(dá)討論中的所有其他用戶。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产亚洲精品久久99| 日本一本在线免费福利| 色综合久久中文综合网| 欧美精品久久男人的天堂| 午夜精品成年人免费视频| 亚洲最大福利在线观看| 婷婷亚洲综合五月天麻豆| 欧美不卡高清一区二区三区| 老熟妇乱视频一区二区| 精品一区二区三区免费看| 亚洲综合一区二区三区在线| 中文字幕欧美精品人妻一区| 老司机激情五月天在线不卡| 韩国激情野战视频在线播放| 亚洲精品福利视频在线观看| 精品国产亚洲av成人一区| 色哟哟在线免费一区二区三区| 中文字幕中文字幕在线十八区| 日本高清二区视频久二区| 好吊日成人免费视频公开| 欧美精品一区久久精品| 亚洲高清一区二区高清| 国内真实露脸偷拍视频| 少妇成人精品一区二区| 日韩一级欧美一级久久| 久久这里只精品免费福利| 久热久热精品视频在线观看| 国产精品一区二区高潮| 91午夜少妇极品福利| 成年女人午夜在线视频 | 国产精品亚洲一区二区| 国产综合欧美日韩在线精品| 国产又色又爽又黄又免费| 日韩国产亚洲欧美另类| 中日韩美女黄色一级片| 国产三级不卡在线观看视频| 人人爽夜夜爽夜夜爽精品视频| 久久人妻人人澡人人妻| 国产一区二区久久综合| 亚洲一区二区欧美激情| 热久久这里只有精品视频|