{{{#!html
}}}
´Ù¸¥ ÄÄÇ»ÅÍ¿¡¼ ÀÌ ÆÐŶÀ» ¹Þ°Ô µÇ¸é Çϵå¿þ¾î°¡ ÀÌ´õ³Ý Çì´õ¸¦ Ç®°í Ä¿³Î¿¡¼ IP¿Í UDP Çì´õ¸¦ Ç®°í tftp ÇÁ·Î±×·¥¿¡¼ tftpÇì´õ¸¦ Ç®°í ÇÏ¿© ³¡À¸·Î ¿ø·¡ÀÇ µ¥ÀÌÅ͸¦ ¾ò°Ô µÇ´Â °ÍÀÌ´Ù.
ÀÌÁ¦ µåµð¾î ¾Ç¸í³ôÀº °èÃþÀû ³×Æ®¿öÅ© ¸ðµ¨(Layered Network Model)À» ¾ê±âÇÒ ¶§°¡ µÈ°Í °°´Ù. ÀÌ ¸ðµ¨Àº ´Ù¸¥ ¸ðµ¨µé¿¡ ºñÇØ¼ ³×Æ®¿öÅ©ÀÇ ½Ã½ºÅÛÀ» ±â¼úÇÏ´Â Ãø¸é¿¡¼ ¸¹Àº ÀÌÁ¡ÀÌ ÀÖ´Ù. ¿¹¸¦ µé¸é ¼ÒÄÏ ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´Â °æ¿ì ´õ ³·Àº °èÃþ¿¡¼ ¾î¶² ¹°¸®ÀûÀÎ ¹æ½Ä(½Ã¸®¾óÀÎÁö thin ethernetÀÎÁö ¶Ç´Â AUI¹æ½ÄÀÎÁö)À¸·Î Àü´ÞµÇ´Â Áö¿¡ ´ëÇÏ¿© ÀüÇô ½Å°æÀ» ¾²Áö ¾Ê°íµµ ÀÛ¾÷ÀÌ °¡´ÉÇØ Áú ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. ½ÇÁ¦ ³×Æ®¿öÅ© Àåºñ³ª ÅäÆú·ÎÁö´Â ¼ÒÄÏ ÇÁ·Î±×·¡¸Ó¿¡°Ô´Â ÀüÇô °ü°è¾ø´Â ºÐ¾ßÀÌ´Ù.
´õÀÌ»ó ¶°µéÁö ¾Ê°í ´ÙÀ½ °èÃþµéÀ» ÀÏ·¯ Áִµ¥ ¸¸ÀÏ ³×Æ®¿öÅ© ÄÚ½º¿¡¼ ½ÃÇèÀ» º¸°Ô µÉ °æ¿ì¶ó¸é ¿Ü¿ì´Â °ÍÀÌ ÁÁÀ» °ÍÀÌ´Ù.
* Application
* Presentation
* Session
* Transport
* Network
* Data Link
* Physical
¹°¸®Àû °èÃþ(Physical layer)´Â Çϵå¿þ¾î(½Ã¸®¾ó, ÀÌ´õ³Ýµî) ÀÌ´Ù. ¾îÇø®ÄÉÀÌ¼Ç °èÃþÀº »ó»óÇÒ ¼ö ÀÖµíÀÌ ¹°¸®Àû °èÃþÀÇ ¹Ý´ëÆí ³¡ÀÌ´Ù. ÀÌ °èÃþÀ» ÅëÇÏ¿© »ç¿ëÀÚ´Â ³×Æ®¿öÅ©¿Í Á¢ÃËÇÏ°Ô µÇ´Â °ÍÀÌ´Ù.
»ç½Ç ÀÌ ¸ðµ¨Àº ÀÚµ¿Â÷ ¼ö¸® ¼³¸í¼ ó·³ ½ÇÁúÀûÀÎ ¹º°¡¸¦ ÇÒ ¼ö Àֱ⿡´Â ³Ê¹«³ª ÀϹÝÀûÀÎ ¾ê±âÀÌ´Ù. À¯´Ð½ºÀÇ °æ¿ì¸¦ µé¾î º¸´Ù ½ÇÁúÀûÀÎ ¾ê±â¸¦ ÇØ º»´Ù¸é,
* Application Layer (telnet, ftp, etc.)
* Host-to-Host Transport Layer (TCP, UDP)
* Internet Layer (IP and routing)
* Network Access Layer (was Network, Data Link, and Physical)
ÀÌ·¯ÇÑ °èÃþÀ¸·Î »ìÆì º»´Ù¸é ¾Æ±îÀÇ µ¥ÀÌÅÍ Ä¸½¶È°¡ °¢°¢ ¾î¶² °èÃþ¿¡ ¼ÓÇÏ´Â °¡¸¦ ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù.
ÀÌ·¸°Ô ¸¹Àº ÀÛ¾÷ÀÌ ÇϳªÀÇ µ¥ÀÌÅÍ ÆÐŶÀ» ¸¸µå´Âµ¥ µ¿¿øµÇ´Â °ÍÀÌ´Ù. ÀÌ ³»¿ëÀ» ´ç½ÅÀÌ µ¥ÀÌÅÍÀÇ ÆÐŶ ¸Ó¸® ºÎºÐ¿¡ ¸ù¶¥ ŸÀÌÇÎ ÇØ ³Ö¾î¾ß ÇÑ´Ù´Â ¾ê±â´Ù. (¹°·Ð ³ó´ãÀÌ´Ù.) ½ºÆ®¸² ¼ÒÄÏÀÇ °æ¿ì µ¥ÀÌÅ͸¦ ³»º¸³»±â À§ÇØ ÇØ¾ß ÇÒ ÀÏÀº ¿ÀÁ÷ send()¸¦ È£ÃâÇÏ´Â °Í »ÓÀÌ´Ù. µ¥ÀÌÅÍ ±×·¥ÀÇ °æ¿ì¿¡´Â ¿øÇÏ´Â ¹æ½ÄÀ¸·Î µ¥ÀÌÅ͸¦ Çѹø ĸ½¶ÈÇϰí (tftp¹æ½Äµî) sendto()·Î º¸³»¹ö¸®¸é µÇ´Â °ÍÀÌ´Ù.Ä¿³ÎÀÌ Àü¼Û°èÃþ°ú ÀÎÅÍ³Ý °èÃþ¿¡ °ü·ÃµÈ ĸ½¶È¸¦ ÇÏ°í ³ª¸ÓÁö´Â Çϵå¿þ¾î°¡ ÇÑ´Ù. ¾Æ~ ÷´Ü ±â¼ú!!
À̰ÍÀ¸·Î °£´ÜÇÑ ³×Æ®¿öÅ© ÀÌ·ÐÀº ³¡ÀÌ´Ù. Âü, ¶ó¿ìÆÃ¿¡ °üÇØ¼ ÇÏ°í ½Í´ø ¾ê±âµéÀ» Çϳªµµ ¾ÈÇß´Ù. Èì, Çϳªµµ ¾ø´Ù. Á¤¸»ÀÌÁö ¶ó¿ìÆÃ¿¡ °üÇØ¼ Çϳªµµ ¾ê±âÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ¶ó¿ìÅͰ¡ IPÇì´õ¸¦ ¹þ°Ü³»¼ ¶ó¿ìÆÃ Å×À̺íÀ» ÂüÁ¶ÇÏ¿© ¾î¼±¸ Àú¼±¸...¸¸ÀÏ Á¤¸»·Î ¿©±â¿¡ °ü½ÉÀÌ ÀÖ´Ù¸é IP RFC¸¦ ÂüÁ¶ÇÒ °ÍÀÌ¸ç ¸¸¾à °Å±â¿¡ ´ëÇØ¼ Çϳªµµ ¾ËÁö ¸øÇÑ´Ù¸é! »ý¸í¿¡ ÁöÀåÀº ¾ø´Ù.
----
== ±¸Á¶Ã¼µé°ú µ¥ÀÌŸ ó¸® ==
°á±¹Àº ¿©±â±îÁö ¿Ô±º. µåµð¾î ÇÁ·Î±×·¡¹Ö¿¡ °üÇÑ ¾ê±â¸¦ ÇÒ ¶§ÀÌ´Ù. ÀÌ Àý¿¡¼´Â ½ÇÁ¦·Î ²Ï³ª ÀÌÇØÇϱ⠾î·Á¿î ¼ÒÄÏ ÀÎÅÍÆäÀ̽º¿¡¼ ¾²ÀÌ´Â ¿©·¯°¡Áö µ¥ÀÌÅÍ Å¸ÀÔ¿¡ ´ëÇÑ ¾ê±â¸¦ ÇÒ ¿¹Á¤ÀÌ´Ù.
¸ÕÀú ½¬¿î°Í. ¼ÒÄÏ ±â¼úÀÚÀÌ´Ù.¼ÒÄÏ ±â¼úÀÚÀÇ µ¥ÀÌÅÍ ÇüÀº
{{{#!vim c
int
}}}
ÀÌ´Ù. ±×³É º¸Åë intÀÌ´Ù. (Á¤¼öÇü)
¹º°¡ Á» ÀÌ»óÇÏ´õ¶óµµ ±×³É Âü°í Àб⠹ٶõ´Ù. À̰ÍÀº ¾Ë¾Æ¾ß ÇÑ´Ù. Á¤¼ö¿¡´Â µÎ ¹ÙÀÌÆ®°¡ Àִµ¥ »óÀ§ ¹ÙÀÌÆ®°¡ ¾Õ¿¡ Àְųª ¶Ç´Â ÇÏÀ§ ¹ÙÀÌÆ®°¡ ¾Õ¿¡ ÀÖ°Ô µÈ´Ù. ¾ÕÀÇ °æ¿ì°¡ ³×Æ®¿öÅ© ¹ÙÀÌÆ® ¼ø¼ÀÌ´Ù. ¾î¶² È£½ºÆ®´Â ³»ºÎÀûÀ¸·Î ³×Æ®¿öÅ© ¹ÙÀÌÆ® ¼ø¼·Î Á¤¼ö¸¦ ÀúÀåÇÏ´Â °æ¿ìµµ ÀÖÀ¸³ª ¾È±×·± °æ¿ì°¡ ¸¹´Ù. ¸¸ÀÏ NBO¶ó°í ¾ð±ÞµÈ Á¤¼ö°¡ ÀÖ´Ù¸é ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© (htons()ÇÔ¼ö) È£½ºÆ® ¹ÙÀÌÆ® ¼ø¼·Î ¹Ù²Ù¾î¾ß ÇÑ´Ù. ¸¸¾à ±×·± ¾ð±ÞÀÌ ¾ø´Ù¸é ±×³É ³»¹ö·Á µÖµµ µÈ´Ù.
ù¹øÂ° ±¸Á¶Ã¼, struct sockaddr. ÀÌ ±¸Á¶Ã¼´Â ¿©·¯°¡Áö ÇüÅÂÀÇ ¼ÒÄÏ ÁÖ¼Ò¸¦ ´ã°ÔµÈ´Ù.
{{{#!vim c
struct sockaddr {
unsigned short sa_family; /* address family, AF_xxx */
char sa_data[14]; /* 14 bytes of protocol address */
};
}}}
sa_family ´Â ¿©·¯°¡Áö°¡ µÉ ¼ö Àִµ¥, ÀÌ ¹®¼¿¡¼´Â ±×Áß¿¡¼ "AF_INET"ÀÎ °æ¿ì¸¸ ´Ù·ç°Ô µÈ´Ù. sa_data ´Â ¸ñÀûÁöÀÇ ÁÖ¼Ò¿Í Æ÷Æ®¹øÈ£¸¦ °¡Áö°Ô µÈ´Ù. ¾à°£ ºñ½Ç¿ëÀûÀ̱º.
sockaddr ±¸Á¶Ã¼¸¦ ´Ù·ç±â À§Çؼ´Â ´ÙÀ½°ú °°Àº parallel structure¸¦ ¸¸µé¾î¾ß ÇÑ´Ù. ("in"Àº ÀÎÅͳÝÀ» ÀǹÌÇÑ´Ù.)
{{{#!vim c
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_zero¹è¿Àº sockaddr °ú ±¸Á¶Ã¼ÀÇ Å©±â¸¦ ¸ÂÃß±â À§Çؼ ³Ö¾îÁø °ÍÀ̹ǷΠbzero()³ª memset()ÇÔ¼ö¸¦ ÀÌ¿ëÇÏ¿© ¸ðµÎ 0À¸·Î ä¿öÁ®¾ß ÇÑ´Ù. ¶ÇÇÑ ²Ï Áß¿äÇÑ Á¡Àε¥, ÀÌ ±¸Á¶Ã¼´Â sockaddr ÀÇ Æ÷ÀÎÅ͸¦ ÀÌ¿ëÇÏ¿© ÂüÁ¶µÉ ¼ö ÀÖ°í ±× ¹Ý´ëµµ °¡´ÉÇÏ´Ù´Â °ÍÀÌ´Ù. µû¶ó¼ socket()ÇÔ¼ö°¡ struct sockaddr * ¸¦ ¿øÇÏ´õ¶óµµ struct sockaddr_inÀ» »ç¿ëÇÒ ¼ö ÀÖ°í ¹Ù·Î ÂüÁ¶ÇÒ ¼öµµ ÀÖ´Â °ÍÀÌ´Ù. ¶ÇÇÑ sin_family´Â sa_family¿¡ ´ëÀÀµÇ´Â °ÍÀÌ¸ç ¹°·Ð "AF_INET"·Î ÁöÁ¤µÇ¾î¾ß Çϸç sin_port, sin_addrÀº ³×Æ®¿öÅ© ¹ÙÀÌÆ® ¼ø¼·Î µÇ¾î¾ß ÇÏ´Â Á¡ÀÌ Áß¿äÇÑ °ÍÀÌ´Ù.
±×·¯³ª! ¾î¶»°Ô struct in_addr sin_addr Àüü°¡ NBO°¡ µÉ ¼ö Àִ°¡? ÀÌ Áú¹®Àº »ì¾Æ³²Àº °¡Àå ¹½°°Àº À¯´Ï¿ÂÀÎ struct in_addr ¿¡ ´ëÇÑ º¸´Ù ½ÅÁßÇÑ °ËÅä°¡ ÇÊ¿äÇÒ °Í°°´Ù.
{{{#!vim c
/* Internet address (a structure for historical reasons) */
struct in_addr {
unsigned long s_addr; /* that's a 32-bit long, or 4 bytes */
};
}}}
À½.. À̰ÍÀº À¯´Ï¿Â "À̾ú¾ú"´Ù. ±×·¯³ª ±×·± ½ÃÀýÀº Áö³ª°¬´Ù. ½Ã¿øÇÏ°Ô ¾ø¾îÁ³±º! µû¶ó¼ ¸¸¾à "ina"¸¦ struct sockaddr_inÇüÀ¸·Î Á¤ÀÇÇØ ³õ¾Ò´Ù¸é ina.sin_addr.s_addr ·Î NBO »óÅÂÀÇ 4¹ÙÀÌÆ® ÀÎÅÍ³Ý ¾îµå·¹½º¸¦ Á¤È®ÇÏ°Ô ÂüÁ¶ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¸¸¾à »ç¿ëÇÏ´Â ½Ã½ºÅÛÀÌ struct in_addr¿¡ ±× ²ûÂïÇÑ À¯´Ï¿ÂÀ» ¾ÆÁ÷µµ »ç¿ëÇϰí ÀÖ´õ¶óµµ #defines S ´öºÐ¿¡ À§¿¡ ÇѰͰú ¸¶Âù°¡Áö·Î Á¤È®ÇÏ°Ô ÂüÁ¶ÇÒ ¼ö´Â ÀÖÀ» °ÍÀÌ´Ù.
----
=== ¼ø¼ ¹Ù²Ù±â ===
ÀÌÁ¦ ´ÙÀ½ Àý·Î ¿Ô´Ù. ³×Æ®¿öÅ©¿Í È£½ºÆ® ¹ÙÀÌÆ® ¼ø¼¿¡ ´ëÇØ¼ ¸»ÀÌ ³Ê¹« ¸¹¾Ò°í ÀÌÁ¦´Â ½ÇÁ¦ ¿òÁ÷ÀÏ ¶§¶ó°í º»´Ù.
ÁÁ´Ù. µÎ°¡Áö ÇüÅÂÀÇ º¯È¯ÀÌ Àִµ¥ Çϳª´Â short(2 ¹ÙÀÌÆ®)¿Í long(4¹ÙÀÌÆ®)ÀÇ °æ¿ìÀÌ´Ù. ÀÌ ÇÔ¼öµéÀº unsignedº¯¼ö¿¡¼µµ Àß ÀÛµ¿µÈ´Ù. ÀÌÁ¦ shortº¯¼ö¸¦ È£½ºÆ® ¹ÙÀÌÆ® ¼ø¼¿¡¼ ³×Æ®¿öÅ© ¹ÙÀÌÆ® ¼ø¼·Î º¯È¯ÇÏ´Â °æ¿ì¸¦ º¸ÀÚ. È£½ºÆ®ÀÇ h ·Î ½ÃÀÛÇØ¼ to ¸¦ ³Ö°í ³×Æ®¿öÅ©ÀÇ n À» ³ÖÀº ÈÄ shortÀÇ s ¸¦ ³Ö´Â´Ù. ±×·¡¼ htons()ÀÌ´Ù. (Àбâ´Â È£½ºÆ® Åõ ³×Æ®¿öÅ© ¼îÆ®ÀÌ´Ù.)
³Ê¹« ½¬¿î°¡?
»ç½Ç h,n,s,l ÀÇ ¾î¶² Á¶ÇÕµµ »ç¿ë°¡´ÉÇÏ´Ù. (¹°·Ð ³Ê¹« ¹Ùº¸½º·¯¿î Á¶ÇÕÀ» ÇÏÁö´Â ¾Ê°ÚÁö..¿¹¸¦ µé¾î stolh, ¼îÆ® Åõ ·Õ È£½ºÆ®?? ÀÌ·±°Ç ¾ø´Ù. Àû¾îµµ ÀÌ µ¿³×¿¡¼´Â¾ø´Ù.) ÀÖ´Â °ÍµéÀº ´ÙÀ½°ú °°´Ù.
||
* htons()--"Host to Network Short"
* htonl()--"Host to Network Long"
* ntohs()--"Network to Host Short"
* ntohl()--"Network to Host Long"
||
¾Æ¸¶µµ ÀÌÁ¦ »ó´çÈ÷ ¸¹ÀÌ ¾Ë°ÔµÈ °Í°°ÀÌ »ý°¢µéÀ» ÇÒ °ÍÀÌ´Ù. "charÀÇ ¹ÙÀÌÆ® ¼ø¼¸¦ ¾î¶»°Ô ¹Ù²ÙÁö?(¿ªÀÚÁÖ: ÀÌ Áú¹®Àº ¾Æ¸¶ Àǹ̾ø´Â Áú¹®À¸·Î ÇÑ °Í °°Àºµ¥ ´äµµ ¾ø°í ´õÀÌ»óÀÇ ¾ð±ÞÀÌ ¾ø´Â °ÍÀ¸·Î º¸¾Æ »©°í ½ÍÀº ºÎºÐÀÌ´Ù.)" ¶Ç´Â "¿°·Á¸¶, ³»°¡ ¾²´Â 68000 ±â°è´Â ÀÌ¹Ì ³×Æ®¿öÅ© ¹ÙÀÌÆ® ¼ø¼·Î Á¤¼ö¸¦ ÀúÀåÇÏ´Ï±î º¯È¯ÇÒ ÇÊ¿ä´Â ¾ø¾î " ¶ó°í »ý°¢ÇÒ ¼öµµ ÀÖÀ» °ÍÀÌ´Ù. ±×·¯³ª ²À ±×·¸Áö¸¸Àº ¾Ê´Ù. ±×·¸°Ô ÀÛ¼ºµÈ ÇÁ·Î±×·¥À» ´Ù¸¥ ±â°è¿¡¼ ÀÛµ¿½ÃŲ´Ù¸é ´ç¿¬È÷ ¹®Á¦°¡ ¹ß»ýÇÒ °ÍÀÌ´Ù. ¿©±â´Â À¯´Ð½º ¼¼°è°í À̱âÁ¾°£ÀÇ È£È¯¼ºÀº ¸Å¿ì Áß¿äÇÑ °ÍÀÌ´Ù. ¹Ýµå½Ã ³×Æ®¿öÅ©¿¡ µ¥ÀÌÅ͸¦ º¸³»±â Àü¿¡ ³×Æ®¿öÅ© ¹ÙÀÌÆ® ¼ø¼·Î ¹Ù²ã¼ º¸³½´Ù´Â °ÍÀ» ±â¾ïÇÒ Áö¾î´Ù.
³¡À¸·Î sin_addr, sin_port´Â ³×Æ®¿öÅ© ¹ÙÀÌÆ® ¼ø¼·Î ±â·ÏÇϴµ¥ ¿Ö sin_family´Â ¾È ±×·¯´Â°¡? ´äÀº °£´ÜÇÏ´Ù. sin_addr°ú sin_port´Â ĸ½¶ÈµÇ¾î ³×Æ®¿öÅ©·Î Àü¼ÛµÇ¾î¾ß ÇÏ´Â º¯¼öÀÎ °ÍÀÌ´Ù. µû¶ó¼ ´ç¿¬È÷ NBO¿©¾ß ÇÑ´Ù. ±×·¯³ª sin_family´Â ½Ã½ºÅÛ ³»ºÎ¿¡¼ Ä¿³Î¿¡ ÀÇÇØ¼¸¸ »ç¿ëµÇ´Â º¯¼öÀÌ¸ç ³×Æ®¿öÅ©·Î Àü¼ÛµÇÁö ¾Ê´Â °ÍÀ̹ǷΠȣ½ºÆ® ¹ÙÀÌÆ® ¼ø¼·Î ±â·ÏµÇ¾î¾ß ÇÏ´Â °ÍÀÌ´Ù.
----
=== IPÁÖ¼Ò´Â ¹«¾ùÀÌ¸ç ¾î¶»°Ô ´Ù·ç´Â°¡? ===
´ÙÇེ·´°Ôµµ IPÁÖ¼Ò¸¦ »êÁ¤ÇØ ÁÖ´Â ¼ö¸¹Àº ÇÔ¼öµéÀÌ ÀÖÀ¸¸ç µû¶ó¼ 4¹ÙÀÌÆ®ÀÇ longº¯¼ö¿¡ Á÷Á¢ °è»êÇØ¼ << ¿¬»êÀÚ¸¦ ÀÌ¿ëÇØ¼ Áý¾î³Ö¾î¾ß ÇÏ´Â ¼ö°í´Â ÇÒ Çʿ䰡 ¾ø´Ù.
¸ÕÀú struct sockaddr_IN ina°¡ Á¤ÀǵǾî ÀÖ°í 132.241.5.10 ÀÌ IP ÁÖ¼ÒÀ̸ç ÀÌ °ªÀ» º¯¼ö¿¡ ³Ö¾î¾ß ÇÑ´Ù°í °¡Á¤ÇØ º¸ÀÚ. inet_addr()ÇÔ¼ö°¡ ¹Ù·Î ÀÌ·²¶§ »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ±× ÇÔ¼ö´Â ¼ýÀÚ¿Í Á¡À¸·Î ±¸¼ºµÈ IPÁÖ¼Ò¸¦ unsigned long º¯¼ö¿¡ Áý¾î ³Ö¾î ÁØ´Ù. ´ÙÀ½°ú °°ÀÌ ÇÏ¸é µÈ´Ù.
{{{#!vim c
ina.sin_addr.s_addr = inet_addr("132.241.5.10")
}}}
inet_addr()´Â °á°ú°ªÀ¸·Î ÀÌ¹Ì NBOÀÎ °ªÀ» µ¹·ÁÁÖ¸ç ±»ÀÌ htonl()À» ¶Ç »ç¿ëÇÒ ÇÊ¿ä´Â ¾ø´Ù´Â Á¡¿¡ ÁÖÀÇÇØ¾ß ÇÑ´Ù. ¸ÚÁö±º!
±×·¯³ª À§ÀÇ Â©¸·ÇÑ ÄÚµå´Â ±×·¸°Ô °ß½ÇÇØ º¸ÀÌÁø ¾Ê´Â´Ù. ¿Ö³ÄÇϸé inet_addr()Àº ¿¡·¯ÀÇ °æ¿ì -1À» µ¹·ÁÁÖ°Ô µÇ¸ç unsigned long¿¡¼ -1Àº 255.255.255.255¸¦ ÀǹÌÇÑ´Ù. ÀÌ´Â ÀÎÅÍ³Ý ºê·Îµåij½ºÆ® ¾îµå·¹½º°¡ µÈ´Ù. ³ª»Û ³à¼®. Ç×»ó ¿¡·¯ 󸮸¦ È®½ÇÈ÷ Çϴ°ÍÀÌ ÁÁ´Ù.
ÁÁ´Ù. ÀÌÁ¦ IPÁÖ¼Ò¸¦ long¿¡ ³Ö´Â°ÍÀº ¾Ë¾Ò´Âµ¥ ±× ¹Ý´ë´Â ¾î¶»°Ô ÇÒ °ÍÀΰ¡? ¸¸¾à¿¡ °ªÀÌ µé¾îÀÖ´Â struct in_addrÀº °¡Áö°í Àִµ¥ À̸¦ ¼ýÀÚ¿Í Á¡À¸·Î Ç¥½ÃÇÏ·Á¸é? ÀÌ °æ¿ì´Â inet_ntoa()¸¦ ¾²¸é µÈ´Ù.(ntoa ´Â ³×Æ®¿öÅ© Åõ ¾Æ½ºÅ°ÀÌ´Ù.)
{{{#!vim c
printf("%s",inet_ntoa(ina.sin_addr));
}}}
À§ÀÇ ÄÚµå´Â IPÁÖ¼Ò¸¦ ÇÁ¸°Æ® ÇØ ÁÙ°ÍÀÌ´Ù. ÀÌ ÇÔ¼ö´Â long º¯¼ö°¡ ¾Æ´Ï¶ó struct in_addr ¸¦ º¯¼ö·Î ¹Þ¾Æ µéÀδٴ Á¡À» ÁÖÀÇÇØ¾ß ÇÑ´Ù. ¶ÇÇÑ ÀÌ ÇÔ¼ö´Â char ¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ °á°ú·Î µ¹·Á Áִµ¥ ÀÌ´Â ÇÔ¼ö³»¿¡ static ÇÑ °ø°£¿¡ ÀúÀåµÇ¸ç µû¶ó¼ ¸Å¹ø ÇÔ¼ö°¡ È£ÃâµÉ ¶§¸¶´Ù ÀÌ Æ÷ÀÎÅͰ¡ °¡¸®Å°´Â °÷ÀÇ °ªÀº º¯ÈÇÑ´Ù´Â °ÍÀÌ´Ù. Áï ¿¹¸¦ µé¸é,
{{{#!vim c
char *a1, *a2;
.
.
a1 = inet_ntoa(ina1.sin_addr); /* this is 198.92.129.1 */
a2 = inet_ntoa(ina2.sin_addr); /* this is 132.241.5.10 */
printf("address 1: %s\n",a1);
printf("address 2: %s\n",a2);
}}}
ÀÇ Ãâ·ÂÀº ÀÌ·¸°Ô ³ª¿Ã °ÍÀÌ´Ù.
{{{
address 1: 132.241.5.10
address 2: 132.241.5.10
}}}
¸¸¾à¿¡ ÀÌ °ªÀ» ÀúÀåÇØ¾ß ÇÒ Çʿ䰡 ÀÖ´Ù¸é strcpy()¸¦ ÀÌ¿ëÇÏ¿© °íÀ¯ÀÇ char ¹è¿¿¡ ÀúÀåÇØ¾ß ÇÒ °ÍÀÌ´Ù.
ÀÌÀý¿¡¼ ¾ê±âÇÒ °ÍÀº ´Ù Çß´Ù. ³ªÁß¿¡ "whitehouse.gov" ¹®ÀÚ¿À» ÇØ´çÇÏ´Â IPÁÖ¼Ò·Î ¹Ù²Ù´Â ¹ýÀ» ¾Ë·Á ÁÙ°ÍÀÌ´Ù. (DNSÀý ÂüÁ¶)
----
== ½Ã½ºÅÛ ÄÝ ==
=== socket() ; ÆÄÀÏ ±â¼úÀÚ¸¦ Àâ¾Æ¶ó ===
¾ÈÇÏ¸é ¸ÂÀ»°Í °°¾Æ¼ socket() ½Ã½ºÅÛ È£Ãâ¿¡ ´ëÇØ¼ ¾ê±âÇØ¾ß¸¸ ÇҰͰ°´Ù. ÀÌ°É Àá±ñ º¸ÀÚ.
{{{#!vim c
#include
}}}
±×¸²2. Ŭ¶óÀ̾ðÆ®-¼¹ö°£ÀÇ °ü°è
Ŭ¶óÀÌ¾ðÆ®¿Í ¼¹ö°£ÀÇ Á¤º¸ ±³È¯ÀÇ ¸ðµ¨ÀÌ ±×¸²¿¡ Àß ³ª¿ÍÀÖ´Ù.
ÁÖ¸ñÇÒ Á¡Àº Ŭ¶óÀÌ¾ðÆ®¿Í ¼¹ö°£¿¡´Â SOCK_STREAMÀ̵ç, SOCK_DGRAMÀ̵çÁö°£¿¡ °°Àº °ÍÀ¸·Î¸¸ µÈ´Ù¸é ÀÇ»ç¼ÒÅëÀÌ µÈ´Ù´Â °ÍÀÌ´Ù. ÁÁÀº ¿¹µéÀº telnet-telnetd, ftp-ftpd, ¶Ç´Â bootp-bootpd µîÀÌ´Ù. ftp¸¦ ¾´´Ù¸é ¹Ýµå½Ã »ó´ëÆí¿¡ ftpd°¡ µ¹°í ÀÖ´Ù´Â °ÍÀÌ´Ù.
º¸Åë È£½ºÆ®¿¡´Â ÇϳªÀÇ ¼¹ö ÇÁ·Î±×·¥ÀÌ µ¹°í ÀÖ°Ô µÈ´Ù. ±×¸®°í ±× ¼¹ö´Â fork()¸¦ ÀÌ¿ëÇÏ¿© ´ÙÁßÀÇ Å¬¶óÀÌ¾ðÆ®¸¦ ¹Þ°Ô µÇ´Â °ÍÀÌ´Ù. ±âº»ÀûÀÎ ·çƾÀÇ ±¸Á¶´Â ´ÙÀ½°ú °°´Ù. ¼¹ö´Â Á¢¼ÓÀ» ´ë±âÇÏ´Ù°¡ accept()¸¦ È£ÃâÇÏ°Ô µÇ¸ç ±× ¶§ fork()¸¦ ÀÌ¿ëÇÏ¿© ÀÚ½Ä ÇÁ·Î¼¼½º¸¦ ¸¸µé¾î³»¾î ±× Á¢¼ÓÀ» ó¸®ÇÏ°Ô µÈ´Ù. À̰ÍÀÌ ¹Ù·Î ´ÙÀ½¿¡ ¼Ò°³µÉ ¿¹Á¦ ¼¹ö ÇÁ·Î±×·¥ÀÇ ±¸Á¶ÀÌ´Ù.
----
=== °£´ÜÇÑ ½ºÆ®¸² ¼¹ö ===
ÀÌ ¼¹ö°¡ ÇÏ´Â ÀÏÀº ¿ÀÁ÷ ½ºÆ®¸² Á¢¼ÓÀ» ÇÏ°Ô µÇ´Â ¸ðµç Ŭ¶óÀÌ¾ðÆ®¿¡°Ô "Hello, World!\n"À» Ãâ·ÂÇØ ÁÖ´Â °ÍÀÌ´Ù. ÀÌ ¼¹ö¸¦ Å×½ºÆ®Çϱâ À§Çؼ´Â ÇϳªÀÇ À©µµ¿ì¿¡¼ ÀÌ ¼¹ö¸¦ ½ÇÇà½ÃÄÑ ³õ°í ´Ù¸¥ À©µµ¿ì¿¡¼ ÅÚ³Ý Á¢¼ÓÀ» ½ÃµµÇØ º¸´Â °ÍÀÌ´Ù.
{{{
$ telnet remotehostname 3490
}}}
hostname Àº ¼¹ö ÇÁ·Î±×·¥ÀÌ ÀÛµ¿µÈ È£½ºÆ®ÀÇ À̸§ÀÌ´Ù.
¼¹ö ÇÁ·Î±×·¥ ÄÚµå
{{{#!vim c
#include