Socket理解之地址族

前言

最近在看iOS核心開發(fā)手冊這本書,里面有一章講解關(guān)于網(wǎng)絡(luò)編程基礎(chǔ)的知識尤误,書中的幾個知識點概念理解的不是很明白稀轨,特此記錄一下以供參考運用。

地址族

  • 套接口基本上可以理解為電話纹腌,有號碼(地址), 可以通信。用來傳輸數(shù)據(jù),也就是純粹的數(shù)據(jù)傳輸滞磺,而數(shù)據(jù)的接收(理解升薯,分析,聆聽)是依靠協(xié)議完成击困。

  • 套接口在需要的時候創(chuàng)建覆劈,創(chuàng)建時主要需要指定的是域(domain),即所用的的地址族(AF_XXX沛励,如AF_IRDA)责语,類型和協(xié)議一般是固定的,SOCK_STREAM和0最常見目派。

  • 綁定所用的通用地址族sockaddr:

#include <sys/socket.h>

struct sockaddr {

  sa_family_t  sa_family;         /*地址族*/

  char        sa_data[14];        /*地址數(shù)據(jù)*/

};

sockaddr

  • 下面詳細(xì)說明下sockaddr

用于存儲參與(IP)Windows套接字通信的計算機(jī)上的一個internet協(xié)議(IP)地址坤候。為了統(tǒng)一地址結(jié)構(gòu)的表示方法 ,統(tǒng)一接口函數(shù)企蹭,使得不同的地址結(jié)構(gòu)可以被bind()白筹、connect()、recvfrom()谅摄、sendto()等函數(shù)調(diào)用徒河。但一般的編程中并不直接對此數(shù)據(jù)結(jié)構(gòu)進(jìn)行操作,而使用另一個與之等價的數(shù)據(jù)結(jié)構(gòu)sockaddr_in送漠。這是由于Microsoft TCP/IP套接字開發(fā)人員的工具箱僅支持internet地址字段顽照,而實際填充字段的每一部分則遵循sockaddr_in數(shù)據(jù)結(jié)構(gòu),兩者大小都是16字節(jié),所以二者之間可以進(jìn)行切換代兵。

其定義如下:

struct sockaddr {
  unsigned short sa_family; /* address family, AF_xxx */
  char sa_data[14]; /* 14 bytes of protocol address */
  };

sa_family:是2字節(jié)的地址家族尼酿,一般都是“AF_xxx”的形式,它的值包括三種:AF_INET植影,AF_INET6和AF_UNSPE裳擎。

如果指定AF_INET,那么函數(shù)就不能返回任何IPV6相關(guān)的地址信息思币;如果僅指定了AF_INET6鹿响,則就不能返回任何IPV4地址信息。

AF_UNSPEC則意味著函數(shù)返回的是適用于指定主機(jī)名和服務(wù)名且適合任何協(xié)議族的地址谷饿。如果某個主機(jī)既有AAAA記錄(IPV6)地址惶我,同時又有A記錄(IPV4)地址,那么AAAA記錄將作為sockaddr_in6結(jié)構(gòu)返回各墨,而A記錄則作為sockaddr_in結(jié)構(gòu)返回。

通常用的都是AF_INET启涯。

如下舉例幾個:

  • 本地地址族:AF_UNIX或AF_LOCAL:
#include <sys/un.h>

struct sockaddr_un {

  sa_family_t  sun_family;         /*AF_UNIX*/

  char        sun_path[108];      /*地址數(shù)據(jù)*/

};
  • 網(wǎng)絡(luò)地址族:AF_INET:
#include <netinet/in.h>

struct sockaddr_in {

  sa_family_t    sin_family;       /* AF_INET */

  uint16_t       sin_port;         /*端口號*/

  struct in_addr   sin_addr;        /*Internet地址*/

  unsigned char   sin_zero[8]      /*占位字節(jié)*/

};
  • 紅外地址類:AF_IRDA:
#include <sys/types.h>

struct sockaddr_irda {

       sa_family_t     sir_family;  /* AF_IRDA */

       u_int8_t   sir_lsap_sel;     /* LSAP selector */

       u_int32_t sir_addr;         /* Device address */

       char        sir_name[25];  /*:IrDA:TinyTP ,OBEX,etc.*/
};

sockaddr_in

其定義如下:

struct sockaddr_in {
  short int sin_family; /* Address family */
  unsigned short int sin_port; /* Port number */
  struct in_addr sin_addr; /* Internet address */
  unsigned char sin_zero[8]; /* Same size as struct sockaddr */
  };

sin_family:指代協(xié)議族贬堵,在socket編程中只能是AF_INET
  sin_port:存儲端口號(使用網(wǎng)絡(luò)字節(jié)順序)
  sin_addr:存儲IP地址,使用in_addr這個數(shù)據(jù)結(jié)構(gòu)
  sin_zero:是為了讓sockaddr與sockaddr_in兩個數(shù)據(jù)結(jié)構(gòu)保持大小相同而保留的空字節(jié)结洼。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末黎做,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子松忍,更是在濱河造成了極大的恐慌蒸殿,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸣峭,死亡現(xiàn)場離奇詭異宏所,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)摊溶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進(jìn)店門爬骤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人莫换,你說我怎么就攤上這事霞玄。” “怎么了拉岁?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵坷剧,是天一觀的道長。 經(jīng)常有香客問我喊暖,道長惫企,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任陵叽,我火速辦了婚禮雅任,結(jié)果婚禮上风范,老公的妹妹穿的比我還像新娘。我一直安慰自己沪么,他們只是感情好硼婿,可當(dāng)我...
    茶點故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著禽车,像睡著了一般寇漫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上殉摔,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天州胳,我揣著相機(jī)與錄音,去河邊找鬼逸月。 笑死栓撞,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的碗硬。 我是一名探鬼主播瓤湘,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼恩尾!你這毒婦竟也來了弛说?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤翰意,失蹤者是張志新(化名)和其女友劉穎木人,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體冀偶,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡醒第,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了进鸠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淘讥。...
    茶點故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖堤如,靈堂內(nèi)的尸體忽然破棺而出蒲列,到底是詐尸還是另有隱情,我是刑警寧澤搀罢,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布蝗岖,位于F島的核電站,受9級特大地震影響榔至,放射性物質(zhì)發(fā)生泄漏抵赢。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望铅鲤。 院中可真熱鬧划提,春花似錦、人聲如沸邢享。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽骇塘。三九已至伊履,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間款违,已是汗流浹背唐瀑。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留插爹,地道東北人哄辣。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像赠尾,于是被迫代替她去往敵國和親力穗。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,554評論 2 349

推薦閱讀更多精彩內(nèi)容

  • 網(wǎng)絡(luò)模型 物理層 物理層表示的是比特流傳輸萍虽,通常包括串口/COM口睛廊、并行/LPT口形真、USB杉编、網(wǎng)線接口、電話線接口咆霜;...
    秋風(fēng)弄影閱讀 710評論 0 2
  • socket通信原理 socket又被叫做套接字,它就像連接到兩端的插座孔一樣,通過建立管道邓馒,將兩個不同的進(jìn)程之間...
    jiodg45閱讀 1,126評論 0 1
  • 簡介 Socket理論 Socket工作流程 核心函數(shù)講解 服務(wù)的如何獲取客戶端的信息 字符串ip和網(wǎng)絡(luò)二進(jìn)制的轉(zhuǎn)...
    第八區(qū)閱讀 3,529評論 0 4
  • 研究IPv6 socket編程原因: Supporting IPv6 in iOS 9 WWDC2015蘋果宣布在...
    li大鵬閱讀 7,306評論 7 15
  • 下午和室友聊天跟她講起十一在青島的經(jīng)歷,想起很多有趣的事情蛾坯,四天四夜的旅途記憶滿滿光酣。打算把它以回憶的方式寫出來,作...
    巫女白飯閱讀 475評論 0 3