ÇöÀç°Á : 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 (ÀÎÅÍ³Ý ÁÖ¼Ò
ü°è)
|
¢º ¼ÒÄÏÁÖ¼ÒÀÇ ÁÖ¿ä ³»¿ëÀº 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 ÀÎÅÍ³Ý ÁÖ¼Òº¯È¯