ÇöÀç°­Á : UNIX BSD ¼ÒÄÏ ½Ã½ºÅÛ ÄÝ ´ÙÀ½: 2.2 ÀÎÅÍ³Ý ÁÖ¼Òº¯È¯


2.1 ¼ÒÄÏÀÇ ÀÌÇØ

2.1.1 ¼ÒÄÏÀÇ Á¤ÀÇ

¢º ¼ÒÄÏ(socket)Àº 1982³â BSD(Berkeley Software Distribution) UNIX 4.1¿¡¼­ óÀ½ ¼Ò°³µÇÀ¸¸ç ÇöÀç ³Î¸® »ç¿ëµÇ´Â °ÍÀº 1986³âÀÇ BSD UNIX 4.3¿¡¼­ °³Á¤µÈ °ÍÀÌ´Ù.

¢º ¼ÒÄÏÀº ¼ÒÇÁÆ®¿þ¾î·Î ÀÛ¼ºµÈ Åë½Å Á¢¼ÓÁ¡À̶ó°í ÇÒ ¼ö Àִµ¥ ³×Æ®¿÷ ÀÀ¿ë ÇÁ·Î±×·¥Àº ¼ÒÄÏÀ» ÅëÇÏ¿© Åë½Å¸ÁÀ¸·Î µ¥ÀÌÅ͸¦ ¼Û¼ö½ÅÇÏ°Ô µÈ´Ù.

¢º ±×¸² 2-1¿¡ ¼¼ °³ÀÇ ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ °¢°¢ ¼ÒÄÏÀ» ÅëÇÏ¿© TCP/IP¸¦ °øÀ¯ÇÏ°í ÀÖ´Â °ÍÀ» ³ªÅ¸³Â´Ù.

¢º ¼ÒÄÏÀº ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼­ TCP/IP¸¦ ÀÌ¿ëÇϴ â±¸ ¿ªÇÒÀ» Çϸç ÀÀ¿ë ÇÁ·Î±×·¥°ú ¼ÒÄÏ »çÀÌÀÇ ÀÎÅÍÆäÀ̽º¸¦ ¼ÒÄÏ ÀÎÅÍÆäÀ̽º¶ó°í ÇÑ´Ù.

¢º ÇÑ ÄÄÇ»Åͳ»¿¡´Â º¸Åë ÇÑ ¼¼Æ®ÀÇ TCP/IP°¡ ¼öÇàµÇ°í ÀÖÀ¸¸ç, ³×Æ®¿÷ µå¶óÀ̹ö´Â LAN Ä«µå¿Í °°Àº ³×Æ®¿÷ Á¢¼Ó ÀåÄ¡(NIU: Network Interface Unit)¸¦ ±¸µ¿ÇÏ´Â ¼ÒÇÁÆ®¿þ¾î¸¦ ¸»ÇÑ´Ù.

±×¸² 2-1 ¼ÒÄÏ ÀÎÅÍÆäÀ̽ºÀÇ À§Ä¡

2.1.2 ¼ÒÄϹøÈ£

¢ºUNIX¿¡¼­ ÆÄÀÏÀ» »õ·Î ¿­¸é(open) int ŸÀÔÀÇ Á¤¼ö¸¦ ¸®ÅÏÇϴµ¥ ÀÌ¿Í°°ÀÌ open¹®ÀÌ ¸®ÅÏÇÑ Á¤¼ö¸¦ ÆÄÀϱâ¼úÀÚ(file descriptor)¶ó°í Çϸç ÇÁ·Î±×·¥¿¡¼­ openµÈ ÆÄÀÏÀ» ¾×¼¼½ºÇÒ ¶§ ÀÌ ÆÄÀϱâ¼úÀÚ¸¦ »ç¿ëÇÏ°Ô µÈ´Ù.

¢º ÆÄÀϱâ¼úÀÚ´Â ±â¼úÀÚ Å×À̺í(descriptor table)ÀÇ index ¹øÈ£Àε¥(±×¸² 2-2 ÂüÁ¶), ±â¼úÀÚ Å×À̺íÀ̶õ ÇöÀç openµÇ¾î ÀÖ´Â ÆÄÀÏÀÇ °¢Á¾ Á¤º¸¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Â ±¸Á¶Ã¼¸¦ °¡¸®Å°´Â Æ÷ÀÎÅ͵é·Î ±¸¼ºµÈ Å×À̺íÀÌ´Ù.

¢º ¿¹¸¦µé¾î ÇÑ ÀÀ¿ë ÇÁ·Î±×·¥³»¿¡¼­ 2°³ÀÇ ÆÄÀÏÀ» openÇϸé ÆÄÀϱâ¼úÀÚ´Â 3°ú 4°¡ ¹èÁ¤µÈ´Ù

¡¡

±×¸² 2-2 ÆÄÀÏ ±â¼úÀÚ¿Í ¼ÒÄÏ ±â¼úÀÚ

¢º ÇÁ·Î±×·¥¿¡¼­ ¼ÒÄÏÀ» °³¼³Çϸé ÆÄÀϱâ¼úÀÚ¿Í ¶È°°Àº ±â´ÉÀ» ÇÏ´Â ¼ÒÄϱâ¼úÀÚ(socket descriptor)°¡ ¸®ÅϵȴÙ.

¢º ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼­ ÀÌ ¼ÒÄÏÀ» ÅëÇÏ¿© ¸ñÀûÁö È£½ºÆ®¿Í ¿¬°áÀ» ¿ä±¸Çϰųª ÆÐŶÀ» ¼Û¼ö½ÅÇÒ ¶§ ÇØ´ç ¼ÒÄϱâ¼úÀÚ¸¦ »ç¿ëÇÏ°Ô µÈ´Ù(ÀÌ Ã¥¿¡¼­´Â ÆíÀÇ»ó ¼ÒÄϱâ¼úÀÚ¸¦ ¼ÒÄϹøÈ£¶ó°í ºÎ¸£°Ú´Ù).

¢º UNIX¿¡¼­´Â ÆÄÀϱâ¼úÀÚ¿Í ¼ÒÄϱâ¼úÀÚ°¡ °°Àº ±â¼úÀÚ Å×À̺íÀÇ index°¡ µÈ´Ù. Áï, ÆÄÀÏ°ú ¼ÒÄÏÀÌ ±â¼úÀÚ Å×À̺íÀ» °øÀ¯ÇÑ´Ù.

¢º ÇÑ ÇÁ·Î¼¼½º¿¡¼­ ÆÄÀÏ open½Ã ¸®ÅϵǴ ÆÄÀϱâ¼úÀÚ¿Í ¼ÒÄÏ °³¼³½Ã ¸®ÅϵǴ ¼ÒÄϱâ¼úÀÚÀÇ °ªÀº ¼­·Î Áߺ¹µÈ °ÍÀÌ ¾ø°Ô µÈ´Ù.

¢º ±×¸² 2-2¿¡´Â µÎ °³ÀÇ ÆÄÀÏ°ú ÇÑ °³ÀÇ ¼ÒÄÏÀ» °³¼³ÇÏ¿´À» ¶§ÀÇ ±â¼úÀÚ Å×À̺í°ú ±â¼úÀÚ Å×À̺íÀÌ °¡¸®Å°´Â ÆÄÀÏ ¶Ç´Â ¼ÒÄÏ µ¥ÀÌÅÍ ±¸Á¶Ã¼¸¦ ³ªÅ¸³»°í ÀÖ´Ù.

¢º ±×¸² 2-3¿¡ ÀÀ¿ë ÇÁ·Î±×·¥°ú ¼ÒÄÏ ±×¸®°í TCP/IPÀÇ °ü°è¸¦ ±¸Ã¼ÀûÀ¸·Î ³ªÅ¸³Â´Ù.

¢º ³× °³ÀÇ ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ¼ÒÄϹøÈ£·Î °¢°¢ 4, 3, 3, 3À» »ç¿ëÇÏ°í ÀÖ´Â °ÍÀ» ³ªÅ¸³Â´Ù(ÀÀ¿ë ÇÁ·Î±×·¥ 1Àº ÆÄÀÏÀ» Çϳª ¸ÕÀú ¿­°í ÀÖÀ¸¹Ç·Î ¼ÒÄϹøÈ£°¡ 4°¡ µÈ °ÍÀÌ´Ù).

¢º ÇÑÆí ¼ÒÄϹøÈ£´Â ÀÀ¿ë ÇÁ·Î±×·¥³»¿¡¼­ ¼ø¼­´ë·Î ¹èÁ¤µÇ¸ç ±× ÇÁ·Î±×·¥³»¿¡¼­¸¸ À¯ÀÏÇÏ°Ô ±¸ºÐµÇ¸é µÇ´Â °ÍÀ̹ǷΠ¼­·Î ´Ù¸¥ ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼­ °°Àº ¼ÒÄϹøÈ£¸¦ »ç¿ëÇÏ´Â °ÍÀº ¹®Á¦°¡ µÇÁö ¾Ê´Â´Ù.

¢º Æ÷Æ®¹øÈ£´Â TCP/IP°¡ Áö¿øÇÏ´Â »óÀ§ °èÃþÀÇ ÇÁ·Î¼¼½º¸¦ ±¸ºÐÇϱâ À§ÇÑ ¹øÈ£À̹ǷΠÇϳªÀÇ ÄÄÇ»Åͳ»¿¡ ÀÖ´Â ÀÀ¿ë ÇÁ·Î¼¼½ºµéÀº ¹Ýµå½Ã ¼­·Î ´Ù¸¥ Æ÷Æ®¹øÈ£¸¦ »ç¿ëÇÏ¿©¾ß ÇÑ´Ù.

¢º ±×¸² 2-3¿¡¼­´Â ³× °³ÀÇ ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ 3000¹øºÎÅÍ 3003¹øÀÇ Æ÷Æ®¹øÈ£¸¦ »ç¿ëÇÏ´Â °ÍÀ» °¡Á¤ÇÏ¿´´Ù.

¢º ±×¸² 2-3¿¡¼­ ¿¬°áÇü ¼­ºñ½º´Â TCP°¡ ±×¸®°í ºñ¿¬°áÇü ¼­ºñ½º´Â UDP°¡ °¢°¢ ó¸®ÇÏ´Â °ÍÀ» º¸¿´´Ù.

¡¡

±×¸²2-3 ÀÀ¿ëÇÁ·Î±×·¥°ú ¼ÒÄÏ ±×¸®°í TCP/IP

¢º IP ÁÖ¼Ò 192.203.144.11Àº ÀÌ ÄÄÇ»ÅÍ¿¡ ¹èÁ¤µÈ IP ÁÖ¼ÒÀε¥ ¿¹¸¦µé¾î ¸ñÀûÁö IP ÁÖ¼Ò°¡ 192.203.144.11ÀÎ IP ÆÐŶÀº ¸ðµÎ ±×¸² 2-3ÀÇ ÄÄÇ»ÅÍ·Î Àü´ÞµÈ´Ù.

¢º ÀÌ ÆÐŶÀ» ¼ö½ÅÇÒ ÀÀ¿ë ÇÁ·Î±×·¥Àº TCP(¶Ç´Â UDP) Çì´õ¿¡ ÀÖ´Â 16ºñÆ®ÀÇ Æ÷Æ®¹øÈ£¸¦ ÂüÁ¶ÇÏ¿© ±¸ºÐµÈ´Ù(±×¸² 1-12, 1-13 ÂüÁ¶).

¡¡

2.1.3 ¼ÒÄÏÀÇ ÀÌ¿ë

¢º ¼ÒÄÏÀ» ÀÌ¿ëÇÑ ³×Æ®¿÷ ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼­ »ó´ë¹æ°ú IP ÆÐŶÀ» ÁÖ°í¹Þ±â À§ÇÏ¿©´Â ´ÙÀ½ÀÇ ´Ù¼¸ °¡Áö Á¤º¸°¡ Á¤ÇØÁ®¾ß ÇÑ´Ù.

¨ç Åë½Å¿¡ »ç¿ëÇÒ ÇÁ·ÎÅäÄÝ(TCP ¶Ç´Â UDP)

¨è ÀÚ½ÅÀÇ IP ÁÖ¼Ò

¨é ÀÚ½ÅÀÇ Æ÷Æ®¹øÈ£

¨ê »ó´ë¹æÀÇ IP ÁÖ¼Ò

¨ë »ó´ë¹æÀÇ Æ÷Æ®¹øÈ£

¢º Åë½Å¿¡ »ç¿ëÇÒ ÇÁ·ÎÅäÄÝÀº ¿¬°áÇü ¶Ç´Â ºñ¿¬°áÇüÀ» ¸»Çϴµ¥ ÀÎÅÍ³Ý ÇÁ·Î±×·¥¿¡¼­´Â ¿¬°áÇü ¼­ºñ½º¸¦ TCP ¶Ç´Â ½ºÆ®¸²(stream) ¼­ºñ½º¶ó°íµµ ºÎ¸£°í, ºñ¿¬°áÇü ¼­ºñ½º¸¦ UDP ¶Ç´Â µ¥ÀÌÅͱ׷¥ ¼­ºñ½º¶ó°íµµ ºÎ¸¥´Ù.

¢º ÀÚ½ÅÀÇ IP ÁÖ¼Ò´Â ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ¼öÇàµÇ´Â ÄÄÇ»ÅÍÀÇ IP ÁÖ¼Ò¸¦ ¸»Çϸç, ÀÚ½ÅÀÇ Æ÷Æ®¹øÈ£´Â ÀÌ ÄÄÇ»ÅÍ¿¡¼­ ¼öÇàµÇ°í ÀÖ´Â ÀÀ¿ë ÇÁ·Î±×·¥µé Áß º» ÀÀ¿ë ÇÁ·Î±×·¥À» ±¸ºÐÇÏ´Â °íÀ¯¹øÈ£ÀÌ´Ù.

¢º »ó´ë¹æÀÇ IP ÁÖ¼Ò´Â Åë½ÅÇÏ°íÀÚ ÇÏ´Â »ó´ë¹æ(¸ñÀûÁö) ÄÄÇ»ÅÍÀÇ IP ÁÖ¼Ò¸¦ ¸»Çϸç, »ó´ë¹æÀÇ Æ÷Æ®¹øÈ£´Â ¸ñÀûÁö ÄÄÇ»Åͳ»¿¡¼­ ¼öÇàÁßÀÎ ¿©·¯ ÀÀ¿ë ÇÁ·Î±×·¥ Áß ³ª¿Í Åë½ÅÇÒ ÇÁ·Î±×·¥À» ÁöÁ¤ÇÏ´Â ¹øÈ£ÀÌ´Ù.

¢º Àß ¾Ë·ÁÁø(well-known) Ç¥ÁØ ÀÎÅÍ³Ý ¼­ºñ½º(ftp, mail, http µî)¸¦ ó¸®ÇÏ´Â ¼­¹ö ÇÁ·Î±×·¥Àº ¹Ì¸® ÁöÁ¤µÈ Æ÷Æ®¹øÈ£¸¦ »ç¿ëÇÏ°í ÀÖ´Ù.

¢º ¼ÒÄÏ ÇÁ·Î±×·¡¹Ö¿¡¼­ ù¹ø°·Î ÇØ¾ß ÇÒ ÀÏÀº Åë½Å ⱸ ¿ªÇÒÀ» ÇÏ´Â ¼ÒÄÏÀ» ¸¸µå´Â °ÍÀ¸·Î ÀÌ°ÍÀº ¼­¹ö¿Í Ŭ¶óÀ̾ðÆ®¿¡¼­ ¸ðµÎ ÇÊ¿äÇѵ¥ À̸¦ À§ÇÏ¿© socket() ½Ã½ºÅÛ ÄÝÀ» È£ÃâÇÑ´Ù.

¢ºsocket()ÀÌ ¼º°øÀûÀ¸·Î ¼öÇàµÇ¸é »õ·Î ¸¸µé¾îÁø ¼ÒÄϹøÈ£(int ŸÀÔ)¸¦ ¸®ÅÏÇÏ°í ¿¡·¯°¡ ¹ß»ýÇϸé -1ÀÌ ¸®ÅϵȴÙ.

¢º socket()ÀÇ »ç¿ë ¹®¹ýÀº ´ÙÀ½°ú °°´Ù.

int socket (

domain, /* ÇÁ·ÎÅäÄÝ Ã¼°è */

type, /* ¼­ºñ½º ŸÀÔ */

protocol; /* ¼ÒÄÏ¿¡ »ç¿ëµÉ ÇÁ·ÎÅäÄÝ */

¢º ¼ÒÄÏÀº º»·¡ TCP/IP, Áï ÀÎÅͳݸ¸À» À§ÇÏ¿© Á¤ÀÇµÈ °ÍÀÌ ¾Æ´Ï¸ç UNIX ³×Æ®¿÷, XEROX ³×Æ®¿÷ µî¿¡¼­µµ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÀϹÝÀûÀ¸·Î Á¤ÀÇµÈ °ÍÀÌ´Ù.

¢º TCP/IP ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇÏ·Á¸é ¼ÒÄÏÀ» °³¼³ÇÒ ¶§ ÇÁ·ÎÅäÄÝ Ã¼°è¸¦ ÀÎÅͳÝÀ¸·Î ÁöÁ¤ÇÏ¿©¾ß ÇÑ´Ù.

¢º À̸¦ À§ÇÏ¿© domainÀ» PF_INETÀ¸·Î ¼±ÅÃÇÏ¿©¾ß ÇÑ´Ù.

¢º ÇÑÆí domainÀ¸·Î °¡Áú ¼ö ÀÖ´Â °ªÀº ´ÙÀ½°ú °°´Ù(PF´Â Protocol Family¸¦ ³ªÅ¸³¿).

domain : PF_INET (ÀÎÅÍ³Ý ÇÁ·ÎÅäÄÝ Ã¼°è »ç¿ë)

PF_UNIX (UNIX ¹æ½ÄÀÇ Çª·ÎÅäÄÝ Ã¼°è »ç¿ë)

PF_NS (XEROX ³×Æ®¿÷ ½Ã½ºÅÛÀÇ ÇÁ·ÎÅäÄÝ Ã¼°è »ç¿ë)

¢º typeÀº ¼­ºñ½º ŸÀÔ(type of service)À» ¸»Çϴµ¥, ¿¬°áÇü(½ºÆ®¸²) ¼­ºñ½º¸¦ Á¦°øÇÏ´Â ¼ÒÄÏÀ» ¸¸µé·Á¸é SOCK_STREAMÀ», ºñ¿¬°áÇü(µ¥ÀÌÅͱ׷¥) ¼­ºñ½º¸¦ ¼±ÅÃÇÏ·Á¸é SOCK_ DGRAMÀ» ¼±ÅÃÇÏ¿©¾ß ÇÑ´Ù.

type : SOCK_STREAM (½ºÆ®¸² ¹æ½ÄÀÇ ¼ÒÄÏ »ý¼º)

SOCK_DGRAM (µ¥ÀÌÅͱ׷¥ ¹æ½ÄÀÇ ¼ÒÄÏ »ý¼º)

¢º protocolÀº ¼ÒÄÏÀ» Áö¿øÇÏ´Â ÇÁ·ÎÅäÄÝÀ» ÁöÁ¤Çϴµ¥ ÀϹÝÀûÀ¸·Î 0À» ¾²¸é ½Ã½ºÅÛÀÌ ÀÚµ¿À¸·Î ¼³Á¤ÇØ ÁØ´Ù.

¢º ´ÙÀ½Àº socket() ½Ã½ºÅÛ ÄÝÀ» È£ÃâÇÏ°í »ý¼ºµÈ ¼ÒÄϹøÈ£¸¦ Ãâ·ÂÇÏ´Â ¿¹Á¦ open_socket.cÀÌ´Ù.

¢º ÀÌ ÇÁ·Î±×·¥¿¡¼­´Â ¸ÕÀú /etc/passwd ÆÄÀÏÀ» ¿­°í ¸®ÅÏµÈ ÆÄÀϱâ¼úÀÚ(file descriptor)¸¦ Ãâ·ÂÇÑ ÈÄ, ¼ÒÄÏÀ» µÎ °³ ¿­¾î¼­ ¼ÒÄϹøÈ£°¡ ¾î¶² °ªÀÎÁö È®ÀÎÇÑ´Ù.

¢º ³¡À¸·Î ¶Ç ´Ù¸¥ ÆÄÀÏ(/etc/hosts)À» ¿­¾î¼­ ÆÄÀϱâ¼úÀÚ¸¦ Ãâ·ÂÇÑ´Ù.

/*-----------------------------------------------------------------------------------------------

ÆÄÀϸí : open_socket.c

±â ´É : socket() ½Ã½ºÅÛ ÄÝÀ» È£ÃâÇÏ°í, »ý¼ºµÈ ¼ÒÄϹøÈ£¸¦ Ãâ·Â

ÄÄÆÄÀÏ : cc -o open_socket open_socket.c -lsocket

½ÇÇ࿹ : open_socket

--------------------------------------------------------------------------------------------- */

#include <stdio.h> /* Ç¥ÁØ ÀÔÃâ·Â ÇÔ¼ö */

#include <sys/types.h> /* ¼ÒÄÏ ½Ã½ºÅÛ ÄÝ¿¡ ÇÊ¿äÇÑ »ó¼ö ¼±¾ð */

#include <sys/stat.h> /* ÆÄÀÏÀÇ »óÅ¿¡ ´ëÇÑ µ¥ÀÌÅÍ ¼±¾ð */

#include <fcntl.h> /* ÆÄÀÏ Á¦¾î ÇÔ¼ö ¼±¾ð */

#include <sys/socket.h>/* ¼ÒÄÏ ½Ã½ºÅÛÄÝ ¼±¾ð */

int main() {

/* ÆÄÀÏ ¹× ¼ÒÄϹøÈ£ */

int fd1, fd2, sd1, sd2 ;

/* ÆÄÀÏ ¿­±â */

fd1 = open("/etc/passwd", O_RDONLY, 0) ;

printf("/etc/passwd's file descriptor = %d\n", fd1) ;

/* ½ºÆ®¸²Çü ¼ÒÄÏ ¿­±â */

sd1 = socket(PF_INET, SOCK_STREAM, 0) ;

printf("stream socket descriptor = %d\n", sd1) ;

/* µ¥ÀÌÅͱ׷¥Çü ¼ÒÄÏ ¿­±â */

sd2 = socket(PF_INET, SOCK_DGRAM, 0) ;

printf("datagram socket descriptor = %d\n", sd2) ;

/* ¶Ç´Ù¸¥ ÆÄÀÏ ¿­±â */

fd2 = open("/etc/hosts", O_RDONLY, 0) ;

printf("/etc/hosts's file descriptor = %d\n", fd2) ;

/* ÆÄÀÏ ¹× ¼ÒÄÏ ´Ý±â */

close(fd2) ;

close(fd1) ;

close(sd2) ;

close(sd1) ;

}

¢º À§ÀÇ ¿¹Á¦ open_socket.cÀÇ ½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù.

/etc/passwd's file descriptor = 3

stream socket descriptor = 4

datagram socket descriptor = 5

/etc/hosts's file descriptor = 6

¢º socket() ½Ã½ºÅÛ ÄÝÀº Æ®·£½ºÆ÷Æ® ÇÁ·ÎÅäÄÝ(TCP ¶Ç´Â UDP)À» ¼±ÅÃÇÏ¿© ÇϳªÀÇ ¼ÒÄÏÀ» ¸¸µå´Â ÇÔ¼öÀÌ´Ù.

¢º ¸®ÅÏµÈ ¼ÒÄϹøÈ£´Â ÀÀ¿ë ÇÁ·Î±×·¥³»¿¡¼­ »ý¼ºµÈ ÆÄÀÏ°ú ¼ÒÄÏÀ» ±¸ºÐÇÏ´Â À¯ÀÏÇÑ ¹øÈ£ÀÎ °ÍÀ» ¾Ë ¼ö ÀÖ´Ù.

¡¡

2.1.4 ¼ÒÄÏÁÖ¼Ò ±¸Á¶Ã¼

¢º ¼ÒÄÏÀ» ÀÌ¿ëÇÒ Åë½Å °´Ã¼(Ŭ¶óÀ̾ðÆ® ¶Ç´Â ¼­¹ö)ÀÇ ±¸Ã¼ÀûÀÎ ÁÖ¼Ò¸¦ Ç¥ÇöÇϱâ À§Çؼ­´Â ÁÖ¼Ò Ã¼°è(address family), IP ÁÖ¼Ò, Æ÷Æ®¹øÈ£ ¼¼ °¡Áö°¡ ÁöÁ¤µÇ¾î¾ß Çϸç ÀÌ ¼¼ °¡Áö ÁÖ¼Ò Á¤º¸¸¦ ¼ÒÄÏÁÖ¼Ò(socket address)¶ó°í ºÎ¸¥´Ù.

¢º ¼ÒÄÏ ÇÁ·Î±×·¡¹Ö¿¡¼­´Â ¼ÒÄÏÁÖ¼Ò¸¦ ´ãÀ» ±¸Á¶Ã¼ sockaddr¸¦ ¾Æ·¡¿Í °°ÀÌ Á¤ÀÇÇÏ¿´À¸¸ç ÀÌ°ÍÀº 2¹ÙÀÌÆ®ÀÇ address family¿Í 14¹ÙÀÌÆ®ÀÇ ÁÖ¼Ò(IP ÁÖ¼Ò + Æ÷Æ®¹øÈ£)·Î ±¸¼ºµÇ¾î ÀÖ´Ù.

struct sockaddr {

u_short sa_family; /* address family */

char sa_data[14]; /* ÁÖ¼Ò */

};

¢º ±×·±µ¥ À§¿¡ Á¤ÀÇµÈ sockaddr ¼ÒÄÏÁÖ¼Ò ±¸Á¶Ã¼¿¡ IP ÁÖ¼Ò, Æ÷Æ®¹øÈ£ µîÀ» Á÷Á¢ ¾²°Å³ª ÀбⰡ ºÒÆíÇϹǷΠÀÎÅÍ³Ý ÇÁ·Î±×·¡¹Ö¿¡¼­´Â sockaddr ±¸Á¶Ã¼¸¦ »ç¿ëÇÏ´Â ´ë½Å 4¹ÙÀÌÆ®ÀÇ IP ÁÖ¼Ò¿Í 2¹ÙÀÌÆ®ÀÇ Æ÷Æ®¹øÈ£¸¦ ±¸ºÐÇÏ¿© ÁöÁ¤ÇÒ ¼ö ÀÖ´Â ÀÎÅÍ³Ý Àü¿ë ¼ÒÄÏÁÖ¼Ò ±¸Á¶Ã¼ÀÎ sockaddr_inÀ» ÁÖ·Î »ç¿ëÇÑ´Ù.

¢º sockaddr_in¿¡¼­´Â ´Ù½Ã 32ºñÆ®ÀÇ IP ÁÖ¼Ò¸¦ ÀúÀåÇÏ´Â ±¸Á¶Ã¼ in_addr¸¦ »ç¿ëÇÏ°í ÀÖÀ¸¸ç sockaddr_in°ú sockaddrÀÇ È£È¯¼ºÀ» À§ÇÏ¿© µÎ ±¸Á¶Ã¼ÀÇ Àüü Å©±â´Â 16¹ÙÀÌÆ®·Î °°µµ·Ï ÇÏ¿´´Ù.

struct in_addr {

u_long s_addr; /* 32ºñÆ®ÀÇ IP ÁÖ¼Ò¸¦ ÀúÀåÇÒ ±¸Á¶Ã¼ */

};

struct sockaddr_in {

short sin_family; /* ÁÖ¼Ò Ã¼°è */

u_short sin_port; /* 16ºñÆ® Æ÷Æ®¹øÈ£ */

struct in_addr sin_addr; /* 32ºñÆ® IP ÁÖ¼Ò */

char sin_zero[8]; /* 16¹ÙÀÌÆ® Å©±â¸¦ ¸ÂÃß±â À§ÇÑ dummy */

};

¡¡

¢º À§¿¡¼­ ÁÖ¼Ò Ã¼°è sin_family·Î ¼±ÅÃÇÒ ¼ö ÀÖ´Â °ÍÀº ´ÙÀ½°ú °°À¸¸ç ÀÎÅͳݿ¡¼­´Â Ç×»ó ÀÎÅÍ³Ý ÁÖ¼Ò Ã¼°è(AF_INET)¸¦ ¼±ÅÃÇÏ¿©¾ß ÇÑ´Ù.

sin_familly : AF_INET (ÀÎÅÍ³Ý ÁÖ¼Ò Ã¼°è)

AF_UNIX (À¯´Ð½º ÆÄÀÏ ÁÖ¼Ò Ã¼°è)

AF_NS (XEROX ÁÖ¼Ò Ã¼°è)

¢º ¼ÒÄÏÁÖ¼ÒÀÇ ÁÖ¿ä ³»¿ëÀº IP ÁÖ¼Ò¿Í Æ÷Æ®¹øÈ£Àε¥, ¼ÒÄÏÁÖ¼Ò´Â ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ÀÚ½ÅÀÇ ¼ÒÄÏÁÖ¼Ò(local address)¸¦ Ç¥ÇöÇÏ´Â µ¥¿¡µµ »ç¿ëµÇ¸ç »ó´ë¹æ ÇÁ·Î¼¼½ºÀÇ ¼ÒÄÏÁÖ¼Ò(remote address)¸¦ Ç¥ÇöÇÒ ¶§µµ »ç¿ëµÈ´Ù(Áï, 2.1.3ÀýÀÇ ¨è+¨é ¶Ç´Â ¨ê+¨ë¸¦ °¢°¢ ³ªÅ¸³»±â À§ÇØ ¼ÒÄÏÁÖ¼Ò ±¸Á¶Ã¼°¡ »ç¿ëµÈ´Ù).

2.1.5 ¼ÒÄÏ ÇÁ·Î±×·¡¹Ö ÀýÂ÷

¢º ¼ÒÄÏ ÇÁ·Î±×·¡¹Öµµ ´ëÇ¥ÀûÀÎ ³×Æ®¿÷ ÇÁ·Î±×·¡¹ÖÀ¸·Î¼­ 1.3Àý¿¡¼­ ¼³¸íÇÑ Å¬¶óÀ̾ðÆ®-¼­¹ö Åë½Å ¸ðµ¨·Î ±¸ÇöµÈ´Ù.

¢º ¼ÒÄÏÀ» ÀÌ¿ëÇÑ Å¬¶óÀ̾ðÆ®¿Í ¼­¹öÀÇ ÇÁ·Î±×·¡¹Ö ÀýÂ÷¸¦ °£·«È÷ ¼³¸íÇÏ°í, 2.3Àý°ú 2.4Àý¿¡¼­ Ŭ¶óÀ̾ðÆ®¿Í ¼­¹ö ÇÁ·Î±×·¥ÀÇ ÀÛ¼º °úÁ¤À» »ó¼¼È÷ ¼³¸íÇÏ°Ú´Ù.

¢º ±×¸² 2-4¿¡ Ŭ¶óÀ̾ðÆ®¿Í ¼­¹ö°¡ TCP(½ºÆ®¸²Çü ¶Ç´Â ¿¬°áÇü) ¼ÒÄÏÀ» ¸¸µé°í ¼­·Î ¿¬°áÇÑ ´ÙÀ½ µ¥ÀÌÅ͸¦ ¼Û¼ö½ÅÇÏ°í ¼ÒÄÏÀ» Á¾·áÇÏ´Â ÀýÂ÷¸¦ ³ªÅ¸³Â´Ù.

¢º Ŭ¶óÀ̾ðÆ®-¼­¹ö Åë½Å ¸ðµ¨¿¡¼­´Â Ç×»ó ¼­¹ö ÇÁ·Î±×·¥ÀÌ ¸ÕÀú ¼öÇàµÇ°í ÀÖ¾î¾ß ÇÑ´Ù.

¢º ¼­¹ö´Â socket()À» È£ÃâÇÏ¿© Åë½Å¿¡ »ç¿ëÇÒ ¼ÒÄÏÀ» Çϳª °³¼³ÇÏ°í À̶§ ¸®ÅÏµÈ ¼ÒÄϹøÈ£¿Í ÀÚ½ÅÀÇ ¼ÒÄÏÁÖ¼Ò (2.1.3ÀýÀÇ ¨è+¨é)¸¦ bind()¸¦ È£ÃâÇÏ¿© ¼­·Î ¿¬°ü½ÃÄÑ µÐ´Ù.

¢º ¼­¹ö¿¡¼­ bind()°¡ ÇÊ¿äÇÑ ÀÌÀ¯´Â ¼ÒÄϹøÈ£´Â ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ¾Ë°í ÀÖ´Â Åë½Å ⱸ ¹øÈ£ÀÌ°í, ¼ÒÄÏÁÖ¼Ò(¨è+¨é)´Â ³×Æ®¿÷ ½Ã½ºÅÛ(Áï, TCP/IP)ÀÌ ¾Ë°í ÀÖ´Â ÁÖ¼ÒÀ̹ǷΠÀ̵éÀÇ °ü°è¸¦ ¹­¾î µÎ¾î¾ß(bind) ÀÀ¿ë ÇÁ·Î¼¼½º¿Í ³×Æ®¿÷ ½Ã½ºÅÛ°£ÀÇ ÆÐŶ Àü´ÞÀÌ °¡´ÉÇϱ⠶§¹®ÀÌ´Ù(bind()ÀÇ ÀÚ¼¼ÇÑ »ç¿ë¹ýÀº 2.4.1Àý¿¡¼­ ¼³¸íÇÔ).

¢º ´ÙÀ½¿¡ ¼­¹ö´Â listen()À» È£ÃâÇÏ¿© Ŭ¶óÀ̾ðÆ®·ÎºÎÅÍÀÇ ¿¬°á¿äûÀ» ±â´Ù¸®´Â ¼öµ¿ ´ë±â¸ðµå·Î µé¾î°£´Ù.

¢º Ŭ¶óÀ̾ðÆ®·ÎºÎÅÍÀÇ ¿¬°á¿äûÀÌ ¿ÔÀ» ¶§ À̸¦ ó¸®Çϱâ À§ÇÏ¿© accept()¸¦ È£ÃâÇÑ´Ù.

¢º ¼­¹ö´Â accept() ½Ã½ºÅÛ ÄÝ¿¡¼­ ±â´Ù¸®°í ÀÖ´Ù°¡ Ŭ¶óÀ̾ðÆ®°¡ connect()¸¦ È£ÃâÇÏ¿© Á¢¼Ó¿ä±¸¸¦ ÇØ¿À¸é À̸¦ ó¸®ÇÑ´Ù.

¢º ¿¬°áÀÌ ¼º°øÀûÀ¸·Î ÀÌ·ç¾îÁö¸é ¼­¹ö´Â Ŭ¶óÀ̾ðÆ®¿Í µ¥ÀÌÅ͸¦ ¼Û¼ö½ÅÇÒ ¼ö ÀÖ°Ô µÈ´Ù.

¢º ÇÑÆí Ŭ¶óÀ̾ðÆ®´Â socket()À» È£ÃâÇÏ¿© ¼ÒÄÏÀ» ¸¸µç ÈÄ bind()¸¦ ºÎ¸¦ ÇÊ¿ä ¾øÀÌ, ¼­¹ö¿¡°Ô ¿¬°á¿äûÀ» º¸³»±â À§ÇÏ¿© connect()¸¦ È£ÃâÇÑ´Ù.

¢ºÀ̶§ Ŭ¶óÀ̾ðÆ®´Â Á¢¼ÓÇÒ »ó´ë¹æ ¼­¹öÀÇ ¼ÒÄÏÁÖ¼Ò(¨ê+¨ë) ±¸Á¶Ã¼¸¦ ¸¸µé¾î connect()ÀÇ ÇÔ¼ö ÀÎÀÚ·Î ÁÖ¾î¾ß ÇÑ´Ù.

¢º ¼­¹ö¿Í ¿¬°áÀÌ ÀÌ·ç¾îÁö¸é (Áï, connect()¹®ÀÌ ¼º°øÀûÀ¸·Î ¸®ÅϵǸé) ¼­¹ö¿Í µ¥ÀÌÅ͸¦ ¼Û¼ö½ÅÇÒ ¼ö ÀÖ´Ù.

±×¸² 2-4 TCP(¿¬°áÇü) ¼ÒÄÏ ÇÁ·Î±×·¡¹ÖÀÇ ÀýÂ÷

¢º Ŭ¶óÀ̾ðÆ®¿¡¼­ bind()¸¦ È£ÃâÇÒ ÇÊ¿ä°¡ ¾ø´Â ÀÌÀ¯´Â, Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥Àº ¼­¹ö ÇÁ·Î±×·¥°ú ´Þ¸® ÀÚ½ÅÀÌ »ç¿ëÇÏ´Â IP ÁÖ¼Ò³ª Æ÷Æ®¹øÈ£¸¦ ´Ù¸¥ Ŭ¶óÀ̾ðÆ® ¶Ç´Â ¼­¹ö°¡ ¹Ì¸® ¾Ë°í ÀÖÀ» ÇÊ¿ä°¡ ¾ø±â ¶§¹®ÀÌ´Ù.

¢º ¼­¹öÀÇ ÀÀ¿ë ÇÁ·Î±×·¥Àº ÀÚ½ÅÀÌ »ç¿ëÇÏ°í ÀÖ´Â Æ÷Æ®¹øÈ£¸¦ ÅëÇÏ¿© Ŭ¶óÀ̾ðÆ®µéÀÇ ¼­ºñ½º¸¦ ó¸®ÇØ¾ß ÇϹǷÎ, ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ ¼ÒÄϹøÈ£¿Í ¼ÒÄÏÁÖ¼Ò¸¦ bind()ÇÏ´Â °ÍÀÌ ÇʼöÀûÀÌ´Ù.

¢º Ŭ¶óÀ̾ðÆ®´Â Æ÷Æ®¹øÈ£¸¦ ÀÓÀÇ·Î »ç¿ëÇصµ µÇ±â ¶§¹®¿¡ Æ÷Æ®¹øÈ£¸¦ ƯÁ¤ÇÑ °ªÀ¸·Î bind()½ÃÄÑ µÎ´Â °ÍÀÌ ÇÊ¿ä ¾ø´Ù.

¢º Ŭ¶óÀ̾ðÆ®´Â ¿ÀÈ÷·Á bind()¸¦ »ç¿ëÇÏ´Â °ÍÀÌ Å¬¶óÀ̾ðÆ® ÇÁ·Î±×·¥ÀÇ ¹ü¿ë¼ºÀ» ¶³¾î¶ß¸®°Ô µÈ´Ù. ¿Ö³ÄÇÏ¸é °°Àº Æ÷Æ®¹øÈ£¸¦ »ç¿ëÇϴ Ŭ¶óÀ̾ðÆ® ÇÁ·Î±×·¥µéÀÌ ÇϳªÀÇ ÄÄÇ»ÅÍ¿¡¼­ µÎ °³ ÀÌ»ó ½ÇÇàµÇ¸é ¿¡·¯°¡ ¹ß»ýÇϱ⠶§¹®ÀÌ´Ù.


ÇöÀç°­Á : UNIX BSD ¼ÒÄÏ ½Ã½ºÅÛ ÄÝ ´ÙÀ½: 2.2 ÀÎÅÍ³Ý ÁÖ¼Òº¯È¯