BSD ¼ÒÄÏ ÇÁ·Î±×·¡¹Ö ÀÔ¹®
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

Contents

1 ÀÎÅÍ³Ý ÇÁ·Î±×·¥
2 ¼­¹ö Ŭ¶óÀÌ¾ðÆ® ¸ðµ¨
2.1 ³×Æ®¿öÅ© ¼­¹ö Ŭ¶óÀÌ¾ðÆ® ¸ðµ¨
3 ¼ÒÄÏ
3.1 ¼ÒÄÏÀ̶õ
3.2 ¼ÒÇÁÆ®¿þ¾î¿Í ¼ÒÇÁÆ®¿þ¾î¸¦ ¿¬°áÇÏ´Â ¼ÒÄÏ
3.3 ¼ÒÇÁÆ®¿þ¾î ¿¬°á¿¡ ÇÊ¿äÇÑ °Íµé
4 ¼ÒÄÏ ³×Æ®¿öÅ© ÇÁ·Î±×·¡¹Ö
4.1 ¾ÖÇø®ÄÉÀÌ¼Ç ÇÁ·ÎÅäÄÝ ¼³°è
5 ¼ÒÄÏ ÇÁ·Î±×·¡¹Ö È帧
5.1 ¼­¹ö ÇÁ·Î±×·¥ÀÇ È帧
5.1.1 ¼ÒÄÏ ¸¸µé±â
5.1.2 ÇÁ·Î¼¼½º¸¦ ¼ÒÄÏ¿¡ ¹ÙÀεù Çϱâ
5.1.3 ¿¬°á ´ë±â¿­ ¸¸µé±â
5.1.4 ¿¬°á ´ë±â¿­ °¡Á®¿À±â
5.1.5 µ¥ÀÌÅÍ Åë½Å
5.2 Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥ÀÇ È帧
5.2.1 ¼ÒÄÏ ¸¸µé±â
5.2.2 ¼­¹ö¿¡ ¿¬°á ¿äûÇϱâ
5.2.3 ¼­¹ö¿ÍÀÇ µ¥ÀÌÅÍ Åë½Å
5.3 ¼­¹ö¿Í Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°á°ú µ¥ÀÌÅÍ Åë½Å È帧
6 ¿¹Á¦
6.1 ¼­¹ö ÇÁ·Î±×·¥
6.2 Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥

ÇöÀç ³×Æ®¿öÅ©´Â internet(ÀÎÅͳÝ)À¸·Î ´ëº¯µÈ´Ù. ¶§¹®¿¡ ³×Æ®¿öÅ© ´ë½Å ÀÎÅͳÝÀ̶ó´Â ¿ë¾î¸¦ »ç¿ëÇϵµ·Ï ÇϰڴÙ.

1 ÀÎÅÍ³Ý ÇÁ·Î±×·¥

ÀÎÅÍ³Ý ÇÁ·Î±×·¥Àº ÀÎÅͳݻ󿡼­ ¸Ö¸® ¶³¾îÁø ÇÁ·Î±×·¥ »çÀÌ¿¡¼­ Åë½ÅÀ» ¼öÇàÇÏ´Â ÇÁ·Î±×·¥ÀÌ´Ù. ÀÎÅÍ³Ý ÇÁ·Î±×·¥À» ÀÌ¿ëÇØ¼­ ¿ì¸®´Â À¥ÆäÀÌÁö¸¦ ¼­ÇÎÇÏ°í ¿Â¶óÀÎ °ÔÀÓÀ» Çϸç Áֽİŷ¡¸¦ ÇÏ°í ¹°°ÇÀ» ±¸ÀÔÇÑ´Ù. À̸ÞÀÏÀ» ÁÖ°í ¹ÞÀ» ¼ö ÀÖÀ¸¸ç, ½Ç½Ã°£À¸·Î ´ëÈ­¸¦ ³ª´­ ¼öµµ ÀÖ´Ù. ÀÌ ¸ðµç °ÍÀÌ ÀÎÅÍ³Ý ÇÁ·Î±×·¥ÀÌ ÀÖÀ½À¸·Î °¡´ÉÇØÁø´Ù.

2 ¼­¹ö Ŭ¶óÀÌ¾ðÆ® ¸ðµ¨

ÀÎÅÍ³Ý ÇÁ·Î±×·¥Àº ¿Â¶óÀÎ »ó¿¡¼­ Á¤º¸¸¦ ¼­ºñ½ºÇÑ´Ù. ÀÌ °úÁ¤Àº ¿ÀÇÁ¶óÀÎ Áï ¸ÅÀå¿¡¼­ »óǰÀ» ¼­ºñ½ºÇÏ´Â °Í°ú ¿ÏÀüÈ÷ µ¿ÀÏÇÏ´Ù. ´Ù¸¸ ¾Æ·¡¿Í °°Àº Á¡¿¡¼­ ±âÁ¸ÀÇ »óǰ ¼­ºñ½º¿Í Â÷À̸¦ º¸ÀδÙ.
  1. »óǰÀÌ ¾Æ´Ñ Á¤º¸¸¦ »ç°íÆÇ´Ù. (ȤÀº Á¤º¸¸¦ ±³È¯ÇÑ´Ù.)
  2. ¿ÀÇÁ¶óÀÎÀÌ ¾Æ´Ñ ¿Â¶óÀο¡¼­ Á¤º¸¸¦ ±³È¯ÇÑ´Ù.

ÀÎÅÍ³Ý ÇÁ·Î±×·¥µµ °á±¹ Á¤º¸¸¦ ¼­ºñ½ºÇÏ´Â °ÍÀ̹ǷΠ°íÀ¯ÀÇ ¼­ºñ½º ¸ðµ¨À» °¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù. ÀÌ ¼­ºñ½º ¸ðµ¨Àº ±â¼ºÀÇ »óǰ±³È¯¿¡¼­ »ç¿ëÇÑ ¸ðµ¨À» ±×´ë·Î ä¿ëÇϰí ÀÖÀ¸¹Ç·Î, ±â¼º ¸ðµ¨¿¡ ´ëÇØ¼­ »ìÆìº¼ Çʿ䰡 ÀÖ´Ù. »óǰ±³È¯Àº ¸î °³ÀÇ ¸ðµ¨ÀÌ Àִµ¥, ±× Áß °¡Àå ³Î¸® »ç¿ëµÇ´Â ¸ðµ¨ÀÌ ¼­¹ö/Ŭ¶óÀÌ¾ðÆ® ¸ðµ¨ÀÌ´Ù. ÀÌ ¸ðµ¨¿¡¼­ ¼­¹ö´Â »óǰÀ» Á¦°øÇÏ´Â ÃøÀ¸·Î »óÁ¡ ȤÀº â°í¿¡ ´ë·®ÀÇ »óǰÀ» Áø¿­ÇÑ´Ù. ±×·¯¸é Ŭ¶óÀÌ¾ðÆ®°¡ »óÁ¡¿¡ ¹æ¹®ÇÏ¿© ¹°°ÇÀ» ±¸ÀÔÇÏ´Â ½ÄÀ¸·Î ÀÛµ¿ÇÑ´Ù.

¼­¹ö/Ŭ¶óÀÌ¾ðÆ® ¸ðµ¨ÀÇ °¡Àå Å« ÀåÁ¡Àº °ü¸®°¡ ½±´Ù´Âµ¥ ÀÖ´Ù. ÇϳªÀÇ °ü¹®¸¸ Á¸ÀçÇϱ⠶§¹®¿¡ »óǰ°ú °í°´ÀÇ µé°í ³²À» Á÷Á¢ Á¦¾îÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ½Ã½ºÅÛÀ» ±¸ÃàÇϱ⵵ ¸Å¿ì ½±´Ù. â°í¸¦ Çϳª ¸¸µé°í °Å±â¿¡ »óǰÀ» Áø¿­ÇÑ µÚ, °í°´À» ¸ÂÀÌÇÏ¸é µÈ´Ù. ÀϹÝÀûÀ¸·Î À̵é â°í´Â ÇϳªÀÇ ¹®À» °¡Áöµµ·Ï ÇÑ´Ù. °¡Àå ¼º°øÀûÀÎ ¸ðµ¨ÀÌ µÈµ¥¿¡´Â ÀÌ·± ÀåÁ¡ÀÌ Å« ¿ªÇÒÀ» Çß´Ù.

2.1 ³×Æ®¿öÅ© ¼­¹ö Ŭ¶óÀÌ¾ðÆ® ¸ðµ¨

¿ÀÇÁ¶óÀÎÀÇ ¼­¹ö/Ŭ¶óÀÌ¾ðÆ® ¸ðµ¨Àº ÀÎÅͳÝÀ¸·Îµµ ±×´ë·Î È®ÀåµÇ¾ú´Ù. Ãʱâ ÀÎÅͳÝÀÌ Çб¸ÀûÀÎ ¸ñÀû¿¡¼­ »ó¾÷ÀûÀÎ ¸ñÀûÀ¸·Î »ç¿ëÇϱ⠽ÃÀÛÇϸ鼭, ÀÏÂ÷ÀûÀ¸·Î ¹ßÀ» µé¿©³õÀº ±â¾÷µéÀÌ °ËÁõµÈµ¥´Ù ¸¹Àº °æÇèÀÌ ÃàÀûµÈ ¸ðµ¨À» ±×´ë·Î °¡Á®´Ù ¾²±æ ¿øÇ߱⠶§¹®ÀÌ´Ù.

ÀÌ·¸°Ô ÇØ¼­ ³×Æ®¿öÅ© ¼­¹ö Ŭ¶óÀÌ¾ðÆ® ¸ðµ¨ÀÌ ¸¸µé¾î Áø´Ù. ÀÌ ¸ðµ¨Àº ¼­¹ö°¡ °í°´À» ¸ÂÀÌÇÏ´Â ±¸Á¶¸¦ °¡Áø´Ù. ¼­¹ö´Â Á¤º¸Ã³¸®¿Í Á¤º¸ â°íÀÇ ¿ªÇÒÀ» Çϸç, Ŭ¶óÀÌ¾ðÆ®°¡ Á¤º¸¸¦ ¿äûÇÒ °æ¿ì À̸¦ ¼­ºñ½ºÇÑ´Ù.

ÇϳªÀÇ ¼­¹ö´Â ´Ù¼öÀÇ Å¬¶óÀ̾ðÆ®ÀÇ ¿äûÀ» ó¸®ÇÒ ¼ö ÀÖ´Ù. Áï 1:nÀÇ °ü°è¸¦ °¡Áø´Ù.

¼­¹ö´Â ÀÎÅͳÝÀÇ ÇÙ½É ±Ç·Â¿ä¼ÒÀÎ Á¤º¸¸¦ µ¶Á¡ÀûÀ¸·Î ó¸®ÇØ¾ß Çϱ⠶§¹®¿¡, ÀϹÝÀûÀ¸·Î °­·ÂÇÑ ÄÄÇ»ÆÃ ÆÄ¿ö¿Í °Å´ëÇÑ ÀúÀå°ø°£À» ÇÊ¿ä·Î ÇÑ´Ù.

¿ÀÇÁ¶óÀο¡¼­ÀÇ ¼­¹ö/Ŭ¶óÀÌ¾ðÆ® ¸ðµ¨°ú ¸¶Âù°¡Áö·Î, ¿Â¶óÀο¡¼­µµ ¼­¹ö/Ŭ¶óÀÌ¾ðÆ® ¸ðµ¨Àº ºñ±³Àû ±¸ÇöÀÌ ¿ëÀÌÇϱ⠶§¹®¿¡ ¸¹Àº ±â¾÷µéÀÌ ¼­¹ö/Ŭ¶óÀÌ¾ðÆ® ¸ðµ¨¿¡ ±â¹ÝÇÑ ÇÁ·Î±×·¥À» ¸¸µé¾î¼­ Á¤º¸ ¼­ºñ½º¸¦ ÇÑ´Ù. ±¸ÃàÀÌ ¿ëÀÌÇÏ´Ù´Â Á¡ ¿Ü¿¡, Á¤º¸¸¦ µ¶Á¡ÀûÀ¸·Î ÅëÁ¦ÇÒ ¼ö ÀÖ´Ù´Â Á¡ÀÌ ¼­¹ö/Ŭ¶óÀÌ¾ðÆ® ¸ðµ¨À» ¼±ÅÃÇϵµ·Ï ÇÏ´Â ÁÖ¿äÇÑ ÀÌÀ¯°¡ µÈ´Ù.


À̿ܿ¡µµ Agent/Manager, Peer to Peer (P2P)¿Í °°Àº ¸ðµ¨ÀÌ Àִµ¥, ¿©±â¿¡¼­´Â ¼­¹ö/Ŭ¶óÀÌ¾ðÆ® ¸ðµ¨À» Áß½ÉÀ¸·Î ¼³¸íÇϵµ·Ï ÇϰڴÙ. ±×¸¸Å­ ´ëÁßÀûÀÎ ¸ðµ¨À̱⠶§¹®ÀÌ´Ù.

3 ¼ÒÄÏ

3.1 ¼ÒÄÏÀ̶õ

ÀÎÅͳݿ¡¼­ Á¤º¸¸¦ ÁÖ°í ¹Þ´Â °ÍÀº ¸Å¿ì º¹ÀâÇÑ ¸ÅÄ¿´ÏÁò¿¡ ±â¹ÝÇÑ´Ù. À̸¦ ´Ü¼øÈ­ Çϱâ À§Çؼ­ OSI7°èÃþÀ» ¸¸µé°í, ´Ù½Ã À̸¦ ´Ü¼øÈ­ ÇØ¼­ TCP/IP4 °èÃþÀ» ¸¸µé¾î¼­ ÀÎÅÍ³Ý ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ß¿¡ Ȱ¿ëÇϰí ÀÖ´Ù. ÇÏÁö¸¸ ÀÌ ¸¶Àúµµ º¹ÀâÇÏ´Ù. ±×·¡¼­ ¸¸µç°Ô ¼ÒÄÏÀÌ´Ù. ¼ÒÄÏÀº ¸î °³ÀÇ °£´ÜÇÑ ÇÔ¼ö¸¸À¸·Îµµ ÀÎÅÍ³Ý ¾ÖÇø®ÄÉÀ̼ÇÀ» ¸¸µé ¼ö ÀÖµµ·Ï µµ¿ÍÁÖ´Â ÇÔ¼ö ¸ðÀ½ÀÌ´Ù. ÇöÀç ¼ÒÄÏ ÇÔ¼ö ±¸ÇöÀº BSD ¼ÒÄÏÀÌ ÁÖ·Î »ç¿ëµÇ°í ÀÖ´Ù.

¼ÒÄÏÀº ÀÎÅÍ³Ý ¿¬°á,Á¾·á,µ¥ÀÌÅÍ Àü¼Û,µµ¸ÞÀÎ À̸§ º¯È¯,ÁÖ¼Ò º¯È¯µî°ú °ü·ÃµÈ ÁÖ¿ä ÇÔ¼öµéÀ» Á¦°øÇÑ´Ù. ¼ÒÄÏ¿¡¼­ Á¦°øÇÏ´Â ÇÔ¼ö ¸ñ·ÏÀº ¼ÒÄÏ API ·¹ÆÛ·±½º¹®¼­¸¦ Âü°íÇϱ⠹ٶõ´Ù.

3.2 ¼ÒÇÁÆ®¿þ¾î¿Í ¼ÒÇÁÆ®¿þ¾î¸¦ ¿¬°áÇÏ´Â ¼ÒÄÏ

ÈçÈ÷ ÀÌÇØÇϱ⠽±°Ô ÄÄÇ»ÅÍ¿Í ÄÄÇ»ÅÍÀÇ ³×Æ®¿öÅ©¸¦ ÀÎÅͳÝÀ̶ó°í ÇÏÁö¸¸, ÀÌÂü¿¡ ¸íÈ®È÷ ÇÏ°í ³Ñ¾î°¥ Çʿ䰡 ÀÖÀ» °Í °°´Ù. ÀÎÅͳÝÀº ¼ÒÇÁÆ®¿þ¾î¿Í ¼ÒÇÁÆ®¿þ¾îÀÇ ³×Æ®¿öÅ©´Ù. ¼ÒÇÁÆ®¿þ¾îÀÇ ³×Æ®¿öÅ© À̹ǷΠ´Ù¾çÇÑ Á¾·ùÀÇ ÀÎÅÍ³Ý ¼­ºñ½º°¡ °¡´ÉÇÏ´Ù. ±×·¯ÇÑ ¼­ºñ½ºÀÇ ¼ÒÇÁÆ®¿þ¾î¸¦ °³¹ßÇÏ¸é µÇ±â ¶§¹®ÀÌ´Ù.


¼ÒÄÏÀº ¿î¿µÃ¼Á¦¿¡¼­ °ü¸®ÇÏ´Â °´Ã¼·Î ¼ÒÇÁÆ®¿þ¾î¸¦ ÀÎÅͳݿ¡ ¿¬°áÇØÁÖ´Â Á¢Á¡¿ªÇÒÀ» ÇÑ´Ù. ÀÎÅͳݰúÀÇ Á¢Á¡¿¡ ³õ¿©¼­ ÀÎÅͳÝÀ¸·Î µ¥ÀÌÅ͸¦ Àü¼ÛÇϰųª ¶Ç´Â ÀÎÅͳÝÀ¸·Î ºÎÅÍ Àü¼ÛµÇ´Â µ¥ÀÌÅ͸¦ Àд °ÍÀÌ´Ù. ¼ÒÄÏ API¶ó°í ÇÏ´Â °ÍÀº ÀÌ ¼ÒÄÏ °´Ã¼¸¦ Á¦¾îÇÏ´Â ÇÔ¼öµéÀÇ ¸ðÀ½ÀÌ´Ù. ¼ÒÄÏ(socket)À̶ó´Â À̸§ÀÌ ºÙ¿©Áø °ÍÀº ÀÎÅͳݰú ¿¬°áµÇ´Â ±× ¸ð½ÀÀÌ (°¡Àü Á¦Ç°°ú Àü¿øÀ» ¿¬°á½ÃÄÑÁÖ´Â)¼ÒÄϰú ºñ½ÁÇϱ⠶§¹®¿¡ ºÙ¿©Á³´Ù.

3.3 ¼ÒÇÁÆ®¿þ¾î ¿¬°á¿¡ ÇÊ¿äÇÑ °Íµé

ÀÎÅͳݿ¡ ¹­¿©ÀÖ´Â ÄÄÇ»Å͸¦ ã±â À§Çؼ­´Â IP(ÀÎÅÍ³Ý ÁÖ¼Ò)°¡ ÇÊ¿äÇÏ´Ù. ÇÏÁö¸¸ ¼ÒÄÏ ÇÁ·Î±×·¡¹ÖÀº ¼ÒÇÁÆ®¿þ¾î¿Í ¼ÒÇÁÆ®¿þ¾î¸¦ ¿¬°áÇÏ´Â °ÍÀÓÀ¸·Î, ¼ÒÇÁÆ®¿þ¾îÀÇ À§Ä¡¸¦ ãÀ» ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ¼ÒÇÁÆ®¿þ¾îÀÇ À§Ä¡´Â PORT ¹øÈ£·Î ãÀ» ¼ö ÀÖ´Ù. Áï IP¿Í PORT ¹øÈ£°¡ ÀÖÀ¸¸é Àüü ÀÎÅͳݻ󿡼­ À¯ÀÏÇÑ ¼ÒÇÁÆ®¿þ¾î¸¦ ã¾Æ¼­ ¿¬°áÇÒ ¼ö ÀÖ´Ù.


4 ¼ÒÄÏ ³×Æ®¿öÅ© ÇÁ·Î±×·¡¹Ö

¼ÒÄÏ ³×Æ®¿öÅ© ÇÁ·Î±×·¡¹ÖÀ̶õ ¼ÒÄÏ ÇÔ¼ö¸¦ ÀÌ¿ë, ¼ÒÄÏ °´Ã¼¸¦ ¸¸µé¾î¼­ ÀÎÅͳÝÀ» °¡·Î Áú·¯¼­ Á¤º¸¸¦ ±³È¯ÇÒ ¼ö ÀÖ´Â ¼ÒÇÁÆ®¿þ¾î¸¦ ¸¸µå´Â ÇÁ·Î±×·¡¹Ö ±â¼úÀ» ¸»ÇÑ´Ù.

¼­¹ö/Ŭ¶óÀÌ¾ðÆ® ¸ðµ¨¿¡¼­ ÇÁ·Î±×·¥Àº ½ÖÀ¸·Î °³¹ßµÈ´Ù. ÀÎÅÍ³Ý ¼­ºñ½º¸¦ Á¦°øÇÏ´Â ¼­¹ö ÇÁ·Î±×·¥°ú ¼­ºñ½º¸¦ ¿äûÇϱâ À§ÇØ °í°´¿¡°Ô Á¦°øµÇ´Â Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥ÀÌ´Ù.

4.1 ¾ÖÇø®ÄÉÀÌ¼Ç ÇÁ·ÎÅäÄÝ ¼³°è

³×Æ®¿öÅ© ÇÁ·Î±×·¥Àº ´ëÈ­-Åë½ÅÀ¸·Î Á¤º¸¸¦ ±³È¯ÇÑ´Ù. ±×·¯¹Ç·Î ¼­¹ö¿Í Ŭ¶óÀÌ¾ðÆ®°£ ¿øÇÒÇÑ ´ëÈ­¸¦ À§Çؼ­´Â »ç¿ëÇÏ´Â ¾ð¾îÀÇ ¹®¹ýÀ» ¸ÂÃß¾î¾ß ÇÑ´Ù. À̸¦ ¾ÖÇø®ÄÉÀÌ¼Ç ÇÁ·ÎÅäÄÝ À̶ó°í ÇÑ´Ù. ÇÁ¸®Á¨Å×ÀÌ¼Ç °èÃþ¿¡¼­ »ç¿ëÇϱ⠶§¹®¿¡, ÇÁ¸®Á¨Å×ÀÌ¼Ç ÇÁ·ÎÅäÄÝÀ̶ó°í ºÎ¸£±âµµ ÇÑ´Ù. HTTP, IRC, FTP ÇÁ·ÎÅäÄÝÀÌ ´ëÇ¥ÀûÀÎ ¾ÖÇø®ÄÉÀÌ¼Ç ÇÁ·ÎÅäÄÝÀÌ´Ù.

³×Æ®¿öÅ© ÇÁ·Î±×·¥À» °³¹ßÇÒ °æ¿ì °¡Àå ¸ÕÀú °í¹ÎÇÏ´Â °ÍÀº, Àü¼Û °èÃþ¿¡¼­ ¾î¶² ÇÁ·ÎÅäÄÝ (Áï UDP, TCP)¸¦ »ç¿ëÇÒ °ÍÀÎÁö¿Í ¾ÖÇø®ÄÉÀÌ¼Ç ÇÁ·ÎÅäÄÝ ¼³°è¿¡ ´ëÇÑ °ÍÀÌ´Ù. ÃÖ±Ù¿¡´Â ¼º´Éº¸´Ù´Â À¯¿¬¼º°ú Àû¿ë¼º, ÀçȰ¿ë¼ºµîÀÌ Á߽õǴ Ãß¼¼¶ó¼­ XML±â¹ÝÀ¸·Î ÇÁ·ÎÅäÄÝÀ» Á¦ÀÛÇÏ´Â °æ¿ì°¡ ¸¹´Ù.

5 ¼ÒÄÏ ÇÁ·Î±×·¡¹Ö È帧

¼ÒÄÏ ÇÁ·Î±×·¥Àº ¼­¹ö¿Í Ŭ¶óÀÌ¾ðÆ®·Î ³ª´µ¹Ç·Î °¢°¢ È帧À» »ìÆìº¼ Çʿ䰡 ÀÖ´Ù.

5.1 ¼­¹ö ÇÁ·Î±×·¥ÀÇ È帧

ÀÎÅÍ³Ý ÇÁ·Î±×·¥Àº µ¥ÀÌÅÍ Åë½ÅÀ» À§ÇÑ ÇÁ·Î±×·¥ÀÌ´Ù. ±×·¯¹Ç·Î Åë½ÅÀÇ °üÁ¡¿¡¼­ º¸¸é È帧À» Á»´õ ½±°Ô ÀÌÇØÇÒ ¼ö ÀÖ´Ù.
  1. ¼ÒÄÏ ¸¸µé±â : ¸ÕÀú ¼ÒÄÏÀ» ¸¸µç´Ù. ÀÌ ¼ÒÄÏÀº ÀÎÅͳÝÀ» °¡·ÎÁú·¯¼­ ¿ø°ÝÁö ÄÄÇ»ÅÍÀÇ ¼ÒÄÏ¿¡ ¿¬°áµÊÀ¸·Î½á, ¼ÒÇÁÆ®¿þ¾î°£ Åë½ÅÀ» °¡´ÉÇÏ°Ô ÇÑ´Ù. ¼ÒÄÏÀº Ä¿³Î¿¡¼­ °ü¸®ÇÏ´Â °´Ã¼´Ù.
  2. binding : ÇÏÁö¸¸ ÀÌ·¸°Ô ¸¸µé¾îÁø ¼ÒÄÏÀº ¾ÆÁ÷ ÇÁ·Î±×·¥°ú ¿¬°áÀÌ µÇÁö ¾ÊÀº »óÅ´Ù. ÇÁ·Î±×·¥°úÀÇ ¿¬°áÀ» À§Çؼ­´Â IP¿Í Æ÷Æ®¹øÈ£¸¦ ÇÁ·Î±×·¥¿¡ ¹­¾îÁÖ´Â ÀÛ¾÷ÀÌ ÇÊ¿äÇÏ´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î½á Àüü ÀÎÅÍ³Ý »ó¿¡¼­ À¯ÀÏÇÑ ¼ÒÇÁÆ®¿þ¾î¸¦ ¸¸µç´Ù. À̸¦ binding ÀÛ¾÷À̶ó°í ÇÑ´Ù.
  3. ¿¬°á ´ë±â¿­ ¸¸µé±â : Ŭ¶óÀÌ¾ðÆ®°¡ ¼ÒÄÏÀ» ÅëÇÏ¿© Á¢¼Ó¿äûÀ» Çϸé, ÀÌ Á¢¼Ó ¿äûÀº ¿¬°á ´ë±â¿­·Î µé¾î°£´Ù. ´ë±â¿­Àº ¿øÇÒÇÑ ¼­ºñ½º¸¦ À§Çؼ­ ÇÊ¿äÇÏ´Ù. Ŭ¶óÀÌ¾ðÆ®°¡ Àá½Ã µ¿¾È ´ë±â ÇÑ ÈÄ ¿¬°áÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. ¸¸¾à ´ë±â¿­ÀÌ ¾ø´Ù¸é, Ŭ¶óÀÌ¾ðÆ®´Â Á¢¼Ó °ÅºÎ°¡ µÉ °ÍÀÌ´Ù.
  4. ¿¬°á ´ë±â¿­¿¡¼­ Ŭ¶óÀÌ¾ðÆ® ¿äû °¡Á®¿À±â : ¼­¹ö´Â ¿¬°á ´ë±â¿­¿¡¼­ ¸Ç ¾Õ¿¡ Àִ Ŭ¶óÀÌ¾ðÆ® ¿äûÀ» °¡Á®¿Â´Ù.
  5. Ŭ¶óÀÌ¾ðÆ®¿Í ¿¬°áÀÌ ÀÌ·ç¾îÁ³´Ù¸é, µ¥ÀÌÅÍ Åë½ÅÀ» ÇÏ°í µ¥ÀÌÅ͸¦ ó¸®ÇÑ´Ù.

5.1.1 ¼ÒÄÏ ¸¸µé±â

¼ÒÄÏÀº socket ÇÔ¼ö·Î ¸¸µç´Ù. ÀÌ·¸°Ô ¸¸µç ¼ÒÄÏÀº ÀÎÅͳݰú ¼ÒÇÁÆ®¿þ¾î¸¦ ¿¬°áÇÏ´Â Á¢Á¡À¸·Î½áÀÇ ¿ªÇÒÀ»ÇÑ´Ù. Á¢Á¡ ¿ªÇÒÀ» Çϱ⠶§¹®¿¡ endpoint socketÀ̶ó°í ºÎ¸£±âµµ ÇÑ´Ù.


´ÙÀ½Àº socket ÇÔ¼öÀÇ ¿øÇüÀÌ´Ù.
#include <sys/types.h> 
#include <sys/socket.h> 
 
int socket(int domain, int type, int protocol); 
 
  • domain : ¼ÒÄÏÀÌ »ç¿ëµÉ ÁÖ¼Ò ¿µ¿ªÀ» ÁöÁ¤Çϱâ À§Çؼ­ »ç¿ëÇÑ´Ù. TCP/IP ±â¹ÝÀÇ ÀÎÅÍ³Ý ÁÖ¼Ò¿µ¿ªÀ» »ç¿ëÇÏ´Â ÇÁ·Î±×·¥À̶ó¸é AF_INETÀ» ÁöÁ¤ÇÑ´Ù. À̿ܿ¡ AF_IPX, AF_X25, AF_AX25 µîÀÇ ÁÖ¼Ò¿µ¿ªÀÌ ÀÖÁö¸¸ °ÅÀÇ »ç¿ëÇÏ´Â ÀÏÀÌ ¾ø´Ù. À¯´Ð½ºÀÇ °æ¿ì ¼ÒÄÏÀº ³»ºÎ ÇÁ·Î±×·¥À» ¿¬°áÇϱâ À§ÇÑ ¿ëµµ·Î »ç¿ëÇÒ ¼öµµ ÀÖ´Ù. ÀÌ °æ¿ì AF_UNIX¸¦ »ç¿ëÇÑ´Ù.
  • type : Åë½Å¿¡ »ç¿ëµÉ ÆÐŶ ŸÀÔÀ» ÁöÁ¤Çϱâ À§Çؼ­ »ç¿ëÇÑ´Ù. ¿¬°á ÁöÇâ ¼ÒÄÏÀÎ SOCK_STREAM °ú µ¥ÀÌÅÍ ±×·¥ ÁöÇâ ¼ÒÄÏÀÎ SOCK_DGRAMÀÌ »ç¿ëµÈ´Ù.
  • protocol : Åë½Å¿¡ »ç¿ëÇÒ ÇÁ·ÎÅäÄÝÀ» ÁöÁ¤Çϱâ À§Çؼ­ »ç¿ëÇÑ´Ù. º¸Åë type¿Í ½ÖÀ¸·Î »ç¿ëµÈ´Ù. SOCK_STREAM À̶ó¸é IPPROTO_TCP, SOCK_DGRAM À̶ó¸é IPPROTO_UDP°¡ »ç¿ëµÈ´Ù.

ÀÚ¼¼ÇÑ ³»¿ëÀº socket ÇÔ¼ö man page¸¦ Âü°íÇÑ´Ù.

5.1.2 ÇÁ·Î¼¼½º¸¦ ¼ÒÄÏ¿¡ ¹ÙÀεù Çϱâ

socket ÇÔ¼ö·Î ¸¸µé¾îÁø ¼ÒÄÏÀº Ä¿³Î¿¡ Á¸ÀçÇϱä ÇÏÁö¸¸, ¾ÆÁ÷ ÇÁ·Î¼¼½º¿Í ¿¬°áµÇÁö ¾Ê¾Ò´Ù. bind ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ ¼ÒÄÏ¿¡ ¿¬°áÇÒ ¼ö ÀÖ´Ù. À̸¦ ¹ÙÀεùÇÑ´Ù°í ¸»ÇÑ´Ù. ¹ÙÀεùµÈ ÇÁ·Î¼¼½º´Â ÀÎÅÍ³Ý °Ç³Ê¿¡ ÀÖ´Â ÇÁ·Î¼¼½º°¡ ãÀ» ¼ö ÀÖ¾î¾ß ÇÑ´Ù. ÄÄÇ»ÅÍÀÇ À§Ä¡´Â IP ÁּҷΠãÀ» ¼ö ÀÖÀ¸¸ç, ÄÄÇ»ÅÍ¿¡¼­ ¼ÒÇÁÆ®¿þ¾î´Â Æ÷Æ® ¹øÈ£·Î ãÀ» ¼ö ÀÖ´Ù.

Áï bind´Â ÇÁ·Î¼¼½º¸¦ ÀÎÅͳݿ¡¼­ À¯ÀÏÇÑ °³Ã¼·Î ÀνĽÃ۱â À§Çؼ­ IP ÁÖ¼Ò¿Í Æ÷Æ®¹øÈ£¸¦ ÇÒ´çÇÏ´Â ÀÏÀ» ÇÑ´Ù.

#include <sys/types.h> 
#include <sys/socket.h> 
 
int bind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen); 
 

´ÙÀ½Àº »ç¿ë ¹æ¹ýÀÌ´Ù.
struct sockaddr_in sock_addr; 
 
sock_addr.sin_family = AF_INET; 
sock_addr.sin_addr.s_addr = htonl(INADDR_ANY); 
sock_addr.sin_port = htons(12345); 
 

bind ÇÔ¼ö´Â ÀϹÝÀûÀ¸·Î ¼­¹ö¿¡¼­ »ç¿ëÇÑ´Ù. INADDR_ANY´Â 0.0.0.0À» ÀǹÌÇÑ´Ù. ¸ðµç ÀÎÅÍ³Ý ÁÖ¼Ò·Î ºÎÅÍ ±â´Ù¸®°Ú´Ù´Â Àǹ̴Ù. ÀÌ ÇÁ·Î¼¼½º´Â 12345 Æ÷Æ®°¡ ÇÒ´çµÇ¾ú´Ù.

5.1.3 ¿¬°á ´ë±â¿­ ¸¸µé±â

ÀÌÁ¦ Ŭ¶óÀÌ¾ðÆ®´Â ¼­¹ö¿¡ ¿¬°áÇÒ ¼ö ÀÖ´Â »óŰ¡ µÇ¾ú´Ù. Ŭ¶óÀÌ¾ðÆ®°¡ ¼­¹ö¿¡ ¿¬°á ¿äûÀ» Çϸé, ÀÌ ¿¬°á ¿äûÀº ¸ÕÀú ¿¬°á ´ë±â¿­¿¡ µé¾î°£´Ù. ÇÁ·Î¼¼½º´Â ÀÌ ¿¬°á ´ë±â¿­¿¡ ÀÖ´Â ¿äû Áß °¡Àå ¾Õ¿¡ ÀÖ´Â ¿äûÀ» ²¨³»¿Í¼­ Ŭ¶óÀÌ¾ðÆ®¿ÍÀÇ Åë½ÅÀ» À§ÇÑ ¿¬°á ¼ÒÄÏÀ» ¸¸µç´Ù.

¿¬°á ´ë±â¿­Àº ¹öÆÛÀÇ ¿ªÇÒÀ» ÇÑ´Ù. Áï ¼­¹ö°¡ ¾ÆÁ÷ Ŭ¶óÀ̾ðÆ®ÀÇ ¿äûÀ» ¹Þ¾ÆµéÀÏ Áغñ°¡ µÇ¾î ÀÖÁö ¾Ê´õ¶óµµ, Ŭ¶óÀÌ¾ðÆ®¸¦ °ÅºÎÇÏÁö ¾Ê°í, Àá½Ã ±â´Ù¸®µµ·Ï ÇÑ´Ù.

listen ÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ ¿¬°á ´ë±â¿­À» ¸¸µé ¼ö ÀÖ´Ù.
#include <sys/socket.h> 
 
int listen(int s, int backlog); 
 
  • s : ¿¬°á ´ë±â¿­À» °¡Áú ¼ÒÄÏÀÌ´Ù. ÀÌ ¼ÒÄÏÀº ¿¬°á ´ë±â¿­¿¡ Ŭ¶óÀÌ¾ðÆ® ¿¬°á ¿äûÀÌ ÀÖ´ÂÁö¸¦ °Ë»çÇÏ´Â ÀÏÀ» ÇÑ´Ù.
  • backlog : ¿¬°á ´ë±â¿­ÀÇ Å©±â´Ù. ÀϹÝÀûÀ¸·Î 5 Á¤µµ¸é ¹«³­ÇÏ´Ù.

5.1.4 ¿¬°á ´ë±â¿­ °¡Á®¿À±â

¿¬°á ´ë±â¿­¿¡ Àִ Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°á ¿äûÀº acceptÇÔ¼ö·Î °¡Á®¿Â´Ù.

http://lh6.ggpht.com/_Os5qf5urx_A/S6zkbS88lBI/AAAAAAAABSs/nrffDjD324U/s800/sh-i3WG-_iPPJ5JVmaUrThA.png

#include <sys/types.h> 
#include <sys/socket.h> 
 
int accept(int s, struct sockaddr *addr, socklen_t *addrlen); 
 
  • s : µè±â ¼ÒÄÏÀ¸·Î ¿¬°á ´ë±â¿­¿¡¼­ Ŭ¶óÀÌ¾ðÆ® ¿äûÀ» °¡Á®¿Â´Ù.
  • addr : °¡Á®¿Â Ŭ¶óÀ̾ðÆ®ÀÇ ÁÖ¼Ò Á¤º¸¸¦ ³Ñ±ä´Ù.
  • addrlen : addrÀÇ Å©±â

ÇÔ¼ö°¡ ¼º°øÀûÀ¸·Î ¼öÇàµÇ¸é, 0º¸´Ù Å« ¼ÒÄÏ ÁöÁ¤ ¹øÈ£¸¦ ¹ÝȯÇÑ´Ù. ÀÌ ¼ÒÄÏ ÁöÁ¤ ¹øÈ£´Â Ŭ¶óÀÌ¾ðÆ®¿Í ¿¬°áµÈ ¼ÒÄÏÀ¸·Î ÈçÈ÷ ¿¬°á ¼ÒÄÏÀ̶ó°í ºÎ¸¥´Ù. ¼­¹ö´Â ÀÌ ¿¬°á ¼ÒÄÏÀ» ÀÌ¿ëÇØ¼­ Ŭ¶óÀÌ¾ðÆ®¿Í Åë½ÅÇÑ´Ù.

¼­¹ö´Â ¿¬°á ´ë±â¿­¿¡ Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°áÀ» ±â´Ù¸®´Â µè±â ¼ÒÄϰú Ŭ¶óÀÌ¾ðÆ®¿Í ½ÇÁ¦ ¿¬°áµÈ ¿¬°á ¼ÒÄÏÀÌ ºÐ¸® µÈ´Ù´Â Á¡¿¡ ÁÖ¸ñÇÑ´Ù.

5.1.5 µ¥ÀÌÅÍ Åë½Å

accept ÇÔ¼ö È£Ãâ·Î ¸¸µé¾îÁø ¿¬°á ¼ÒÄÏÀ» ÀÌ¿ëÇØ¼­ Ŭ¶óÀÌ¾ðÆ®¿Í Åë½ÅÀ» ÇÑ´Ù.

¸®´ª½º ¼ÒÄÏÀº ÆÄÀϰú µ¿ÀÏÇÏ°Ô ´Ù·ç¾îÁüÀ¸·Î read, writeÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼­ Åë½ÅÇÒ ¼ö ÀÖ´Ù. ȤÀº BSD ¼ÒÄÏ ÇÔ¼öÀÎ recv¿Í sendÇÔ¼ö·Î Åë½ÅÇÒ ¼öµµ ÀÖ´Ù.

5.2 Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥ÀÇ È帧

Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥Àº ¼­¹ö ÇÁ·Î±×·¥¿¡ ºñÇØ¼­ ¸Å¿ì ´Ü¼øÇÏ´Ù. ¼­¹ö´Â ¿©·¯ Ŭ¶óÀÌ¾ðÆ®¸¦ ¹Þ¾Æµé¿©¾ß Çϴ Ư¼º»ó ¿¬°á ´ë±â¿­À» ¸¸µé°í, ¿¬°á ´ë±â¿­¿¡ Àִ Ŭ¶óÀÌ¾ðÆ® ¿äûÀ» °¡Á®¿À´Â µîÀÇ ÀÛ¾÷ÀÌ ÇÊ¿äÇÏÁö¸¸, Ŭ¶óÀÌ¾ðÆ®´Â ±×³É ÇϳªÀÇ ¼ÒÄÏÀ» ¸¸µé°í À̰ÍÀ» ÀÌ¿ëÇØ¼­ ¹Ù·Î ¼­¹ö¿¡ ¿¬°á ¿äûÀ» ÇÏ¸é µÇ±â ¶§¹®ÀÌ´Ù.

5.2.1 ¼ÒÄÏ ¸¸µé±â

¼­¹ö¿Í ¸¶Âù°¡Áö·Î socket ÇÔ¼ö·Î ¸¸µç´Ù. ¸¸µå´Â ¹æ¹ýÀº ¿ÏÀüÈ÷ µ¿ÀÏÇÏ´Ù. ´Ü ¼­¹ö Ãø°ú´Â ´Þ¸® ÀÌ ¼ÒÄÏÀ¸·Î Åë½ÅÀ» ÇÑ´Ù.

5.2.2 ¼­¹ö¿¡ ¿¬°á ¿äûÇϱâ

¼­¹ö·ÎÀÇ ¿¬°á ¿äûÀº connect ÇÔ¼ö¸¦ ÀÌ¿ëÇÑ´Ù.
#include <sys/types.h> 
#include <sys/socket.h> 
 
int  connect(int sockfd, const struct sockaddr *serv_addr, 
         socklen_t addrlen); 
 
ÀÌ ÇÔ¼ö´Â ¼ÒÄÏ ÁöÁ¤ ¹øÈ£ sockfd¸¦ ÀÌ¿ëÇØ¼­ sockaddr¿¡ ÁöÁ¤µÈ IP¿Í Æ÷Æ®¹øÈ£·Î ¿¬°áÀ» ½ÃµµÇÑ´Ù. ¼º°øÇϸé 0À» ¹ÝȯÇÏ°í ½ÇÆÐÇϸé -1À» ¹ÝȯÇÑ´Ù.

5.2.3 ¼­¹ö¿ÍÀÇ µ¥ÀÌÅÍ Åë½Å

¼­¹ö¿ÍÀÇ Åë½ÅÀº recv ȤÀº send ÇÔ¼ö¸¦ ÀÌ¿ëÇÑ´Ù.

5.3 ¼­¹ö¿Í Ŭ¶óÀ̾ðÆ®ÀÇ ¿¬°á°ú µ¥ÀÌÅÍ Åë½Å È帧

Á¤¸®ÇÏÀÚ¸é, ¼­¹ö ÇÁ·Î±×·¥°ú Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥Àº ´ÙÀ½°ú °°Àº ¿¬°áµÇ¾î¼­ µ¥ÀÌÅ͸¦ ±³È¯ÇÏ°Ô µÈ´Ù.


6 ¿¹Á¦

6.1 ¼­¹ö ÇÁ·Î±×·¥

#include <sys/socket.h>  
#include <sys/stat.h>  
#include <arpa/inet.h>  
#include <stdio.h>  
#include <string.h>  
  
#define MAXBUF  256  
int main(int argc, char **argv)  
{  
    int server_sockfd, client_sockfd;  
    int client_len, n;  
    char buf[MAXBUF];  
    struct sockaddr_in clientaddr, serveraddr;  
  
    client_len = sizeof(clientaddr);  
 
    // ¼ÒÄÏ ¸¸µé±â    
    if ((server_sockfd = socket (AF_INET, SOCK_STREAM, 0)) < 0)  
    {  
        perror("socket error : ");  
        exit(0);  
    }  
 
    // ¼ÒÄÏ¿¡ ÁÖ¼Ò¸¦ ¹­´Â´Ù. 
    bzero(&serveraddr, sizeof(serveraddr));  
    serveraddr.sin_family = AF_INET;  
    serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);  
    serveraddr.sin_port = htons(atoi(argv[1]));  
    bind (server_sockfd, (struct sockaddr *)&serveraddr, sizeof(serveraddr));  
 
    // ¼ÒÄÏ ¿¬°á ´ë±â¿­À» ¸¸µç´Ù. 
    listen(server_sockfd, 5);  
  
    while(1)  
    {  
        memset(buf, 0x00, MAXBUF);  
        client_sockfd = accept(server_sockfd, (struct sockaddr *)&clientaddr,  
                            &client_len);  
        while(1) 
        { 
            if ((n = read(client_sockfd, buf, MAXBUF)) <= 0)  
            {  
                close(client_sockfd);  
                break; 
            }  
            if (write(client_sockfd, buf, MAXBUF) <=0)  
            {  
                perror("write error : ");  
                close(client_sockfd);  
                break; 
            }  
        } 
        close(client_sockfd);  
    }  
}  
 

6.2 Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥

#include <sys/stat.h>  
#include <arpa/inet.h>  
#include <stdio.h>  
#include <string.h>  
#include <stdlib.h>  
#include <unistd.h>  
  
#define MAXBUF    1024  
  
int main(int argc, char **argv)  
{  
    struct sockaddr_in serveraddr;  
    int server_sockfd;  
    int client_len;  
    char buf[MAXBUF];  
    char rbuf[MAXBUF];  
  
  
    if ((server_sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0)  
    {  
        perror("error :");  
        exit(0);  
    }  
  
    server_sockfd = socket(AF_INET, SOCK_STREAM, 0);  
    serveraddr.sin_family = AF_INET;  
    serveraddr.sin_addr.s_addr = inet_addr("218.234.19.87");  
    serveraddr.sin_port = htons(atoi(argv[1]));  
  
    client_len = sizeof(serveraddr);  
  
    if (connect(server_sockfd, (struct sockaddr *)&serveraddr, client_len) < 0)  
    {  
        perror("connect error :");  
        exit(0);  
    }  
  
    while(1) 
    { 
        memset(buf, 0x00, MAXBUF);  
        read(0, buf, MAXBUF);  
        if (write(server_sockfd, buf, MAXBUF) <= 0)  
        {  
            perror("write error : ");  
            break; 
        }  
        memset(buf, 0x00, MAXBUF);  
        if (read(server_sockfd, buf, MAXBUF) <= 0)  
       {  
           perror("read error : ");  
           break; 
        } 
        printf("read : %s", buf);  
    }  
    close(server_sockfd);  
    return 0; 
}  
 
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.