¡¡¡¡ÓëWindowsÏà±È£¬Linux±»ÈÏΪ¾ßÓиüºÃµÄ°²È«ÐÔºÍÆäËûÀ©Õ¹ÐÔÄÜ¡£ÕâЩÌØÐÔʹµÃLinuxÔÚ²Ù×÷ϵͳÁìÓòÒì¾üÍ»Æ𣬵õ½Ô½À´Ô½¶àµÄÖØÊÓ¡£Ëæ×ÅLinuxÓ¦ÓÃÁ¿µÄÔö¼Ó£¬Æ䰲ȫÐÔÒ²Öð½¥Êܵ½Á˹«ÖÚÉõ»òºÚ¿ÍµÄ¹Ø×¢¡£ÄÇô£¬LinuxÊÇ·ñÕæµÄÈçÆäÖ§³Ö³§ÉÌÃÇËùÐû³ÆµÄÄÇÑù°²È«ÄØ£¿
¡¡¡¡LinuxÄں˾«¶Ì¡¢Îȶ¨ÐԸߡ¢¿ÉÀ©Õ¹ÐԺá¢Ó²¼þÐèÇóµÍ¡¢Ãâ·Ñ¡¢ÍøÂ繦Äܷḻ¡¢ÊÊÓÃÓÚ¶àÖÖcpuµÈÌØÐÔ£¬Ê¹Ö®ÔÚ²Ù×÷ϵͳÁìÓòÒì¾üÍ»Æð¡£Æä¶ÀÌصÄ÷ÈÁ¦Ê¹Ëü²»½öÔÚpc»úÉÏÕ¼¾ÝÒ»¶¨µÄ·Ý¶î£¬¶øÇÒÔ½À´Ô½¶àµØ±»Ê¹ÓÃÔÚ¸÷ÖÖǶÈëʽÉ豸ÖУ¬²¢±»µ±×÷רҵµÄ·ÓÉÆ÷£¬·À»ðǽ£¬»òÕ߸߶˵ķþÎñÆ÷OSÀ´Ê¹Ó᣸÷ÖÖÀàÐ͵ÄLinux·¢Ðа汾ҲÈçÓêºó´ºËñ°ãðÁ˳öÀ´£¬¹úÄÚ¸üÊÇÏÆÆðÁËLinuxµÄʹÓÃÈȳ±£¬ºÜ¶àÕþ¸®²¿ÃÅÒò°²È«ÐèÒªÒ²±»ÒªÇóʹÓÃLinux¡£ÕýÊÇÒòΪLinux±»Ô½À´Ô½¶àµØʹÓã¬Æ䰲ȫÐÔÒ²½¥½¥Êܵ½Á˹«ÖڵĹØ×¢£¬µ±È»£¬Ò²¸ü¶àµØÊܵ½Á˺ڿ͵ĹØ×¢¡£Í¨³££¬ÎÒÃÇÌÖÂÛLinuxϵͳ°²È«¶¼ÊÇ´ÓLinux°²È«ÅäÖõĽǶȻòÕßLinuxµÄ°²È«ÌØÐԵȷ½ÃæÀ´ÌÖÂ۵ģ¬¶øÕâÒ»´ÎÎÒÃÇת»»Ò»ÏÂÊӽǣ¬´ÓLinuxϵͳÖдæÔڵĩ¶´ÓëÕâЩ©¶´²úÉúµÄÓ°ÏìÀ´ÌÖÂÛLinuxµÄ°²È«ÐÔ¡£
¡¡¡¡Ê×ÏÈÀ´ËµÃ÷Ò»ÏÂÕâ´ÎÎÒÃÇÌÖÂÛLinuxϵͳ°²È«µÄ·¶Î§£¬Æäʵͨ³£ÎÒÃÇËù˵µÄLinuxÊÇÖ¸GNU/Linuxϵͳ£¬LinuxÊÇϵͳÖÐʹÓõIJÙ×÷ϵͳÄںˡ£ÕâÒ»´ÎÎÒÃÇÖصã´ÓLinuxϵͳÄÚºËÖдæÔڵļ¸Àà·Ç³£ÓÐÌصãµÄ©¶´À´ÌÖÂÛLinuxϵͳµÄ°²È«ÐÔ¡£
¡¡¡¡È¨ÏÞÌáÉýÀ੶´
¡¡¡¡Ò»°ãÀ´Ëµ£¬ÀûÓÃϵͳÉÏһЩ³ÌÐòµÄÂ߼ȱÏÝ»ò»º³åÇøÒç³öµÄÊֶΣ¬¹¥»÷ÕߺÜÈÝÒ×ÔÚ±¾µØ»ñµÃLinux·þÎñÆ÷ÉϹÜÀíԱȨÏÞroot£»ÔÚһЩԶ³ÌµÄÇé¿öÏ£¬¹¥»÷Õß»áÀûÓÃһЩÒÔrootÉí·ÝÖ´ÐеÄÓÐȱÏݵÄϵͳÊØ»¤½ø³ÌÀ´È¡µÃrootȨÏÞ£¬»òÀûÓÃÓÐȱÏݵķþÎñ½ø³Ì©¶´À´È¡µÃÆÕͨÓû§È¨ÏÞÓÃÒÔÔ¶³ÌµÇ¼·þÎñÆ÷¡£Ä¿Ç°ºÜ¶àLinux·þÎñÆ÷¶¼Óùرո÷ÖÖ²»ÐèÒªµÄ·þÎñºÍ½ø³ÌµÄ·½Ê½À´ÌáÉý×ÔÉíµÄ°²È«ÐÔ£¬µ«ÊÇÖ»ÒªÕâ¸ö·þÎñÆ÷ÉÏÔËÐÐ×ÅijЩ·þÎñ£¬¹¥»÷Õ߾ͿÉÒÔÕÒµ½È¨ÏÞÌáÉýµÄ;¾¶¡£ÏÂÃæÊÇÒ»¸ö±È½Ïеĵ¼ÖÂȨÏÞÌáÉýµÄ©¶´¡£
¡¡¡¡do_brk()±ß½ç¼ì²é²»³ä·Ö©¶´ÔÚ2003Äê9Ô·ݱ»LinuxÄں˿ª·¢ÈËÔ±·¢ÏÖ£¬²¢ÔÚ9Ôµ׷¢²¼µÄLinux kernel 2.6.0-test6ÖжÔÆä½øÐÐÁËÐÞ²¹¡£µ«ÊÇLinuxÄں˿ª·¢ÈËÔ±²¢Ã»ÓÐÒâʶµ½´Ë©¶´µÄÍþв£¬ËùÒÔûÓÐ×öÈκÎͨ±¨£¬Ò»Ð©°²È«×¨¼ÒÓëºÚ¿ÍÈ´¿´µ½ÁË´Ë©¶´Ô̺µÄ¾Þ´óÍþÁ¦¡£ÔÚ2003Äê11ÔºڿÍÀûÓÃrsyncÖÐÒ»¸öδ¹«¿ªµÄ¶ÑÒç³öÓë´Ë©¶´ÅäºÏ£¬³É¹¦µØ¹¥»÷Á˶ą̀DebianÓëGentoo LinuxµÄ·þÎñÆ÷¡£
¡¡¡¡ÏÂÃæÈÃÎÒÃǼòµ¥ÃèÊöһϸ鶴¡£¸Ã©¶´±»·¢ÏÖÓÚbrkϵͳµ÷ÓÃÖС£brkϵͳµ÷ÓÿÉÒÔ¶ÔÓû§½ø³ÌµÄ¶ÑµÄ´óС½øÐвÙ×÷£¬Ê¹¶ÑÀ©Õ¹»òÕßËõС¡£¶øbrkÄÚ²¿¾ÍÊÇÖ±½ÓʹÓÃdo_brk()º¯ÊýÀ´×ö¾ßÌåµÄ²Ù×÷£¬ do_brk()º¯ÊýÔÚµ÷Õû½ø³Ì¶ÑµÄ´óСʱ¼ÈûÓжԲÎÊýlen½øÐÐÈκμì²é£¨²»¼ì²é´óСҲ²»¼ì²éÕý¸º£©£¬Ò²Ã»ÓжÔaddr+lenÊÇ·ñ³¬¹ýTASK_SIZE×ö¼ì²é¡£ÕâÑùÎÒÃǾͿÉÒÔÏòËüÌá½»ÈÎÒâ´óСµÄ²ÎÊýlen£¬Ê¹Óû§½ø³ÌµÄ´óСÈÎÒâ¸Ä±äÒÔÖÁ¿ÉÒÔ³¬¹ýTASK_SIZEµÄÏÞÖÆ£¬Ê¹ÏµÍ³ÈÏΪÄں˷¶Î§µÄÄÚ´æ¿Õ¼äÒ²ÊÇ¿ÉÒÔ±»Óû§·ÃÎʵģ¬ÕâÑùµÄ»°ÆÕͨÓû§¾Í¿ÉÒÔ·ÃÎʵ½Äں˵ÄÄÚ´æÇøÓò¡£Í¨¹ýÒ»¶¨µÄ²Ù×÷£¬¹¥»÷Õ߾ͿÉÒÔ»ñµÃ¹ÜÀíԱȨÏÞ¡£Õâ¸ö©¶´¼«ÆäΣÏÕ£¬ÀûÓÃÕâ¸ö©¶´¿ÉÒÔʹ¹¥»÷ÕßÖ±½Ó¶ÔÄÚºËÇøÓò²Ù×÷£¬¿ÉÒÔÈƹýºÜ¶àLinuxϵͳϵݲȫ±£»¤Ä£¿é¡£
¡¡¡¡´Ë©¶´µÄ·¢ÏÖÌá³öÁËÒ»ÖÖеĩ¶´¸ÅÄ¼´Í¨¹ýÀ©Õ¹Óû§µÄÄÚ´æ¿Õ¼äµ½ÏµÍ³Äں˵ÄÄÚ´æ¿Õ¼äÀ´ÌáÉýȨÏÞ¡£µ±·¢ÏÖÕâÖÖ©¶´Ê±£¬Í¨¹ýÑо¿ÎÒÃǾÍÈÏΪÄÚºËÖÐÒ»¶¨»¹»á´æÔÚÀàËƵÄ©¶´£¬¹ûÈ»¼¸¸öÔºóºÚ¿ÍÃÇÓÖÔÚLinuxÄÚºËÖз¢ÏÖÓëbrkÏàËƵÄ©¶´¡£Í¨¹ýÕâ´Î³É¹¦µÄÔ¤²â£¬¸ü֤ʵÁ˶ÔÕâÖÖÐÂÐ͵ĸÅÄîÐÍ©¶´½øÐÐÑо¿ºÜÓÐÖúÓÚ°²È«ÈËÔ±ÔÚϵͳÖз¢ÏÖеĩ¶´¡£
Á¬Â¶ ÓÚ 2006-10-18 11:21:08·¢±í:
¡¡¡¡Í¨³£Ö÷»úAÓëÖ÷»úBµÄTCPÁ¬½ÓÊÇͨ¹ýÖ÷»úAÏòÖ÷»úBÌá³öÇëÇó½¨Á¢ÆðÀ´µÄ£¬¶øÆä¼äAºÍBµÄÈ·ÈϽö½ö¸ù¾ÝÓÉÖ÷»úA²úÉú²¢¾Ö÷»úBÑéÖ¤µÄ³õʼÐòÁкÅISN¡£¾ßÌå·ÖÈý¸ö²½Öè¡£
¡¡¡¡Ö÷»úA²úÉúËüµÄISN£¬´«Ë͸øÖ÷»úB£¬ÇëÇó½¨Á¢Á¬½Ó£»B½ÓÊÕµ½À´×ÔAµÄ´øÓÐSYN±êÖ¾µÄISNºó£¬½«×Ô¼º±¾ÉíµÄISNÁ¬Í¬Ó¦´ðÐÅÏ¢ACKһͬ·µ»Ø¸øA£»AÔÙ½«B´«ËÍÀ´µÄISN¼°Ó¦´ðÐÅÏ¢ACK·µ»Ø¸øB¡£ÖÁ´Ë£¬Õý³£Çé¿öÏ£¬Ö÷»úAÓëBµÄTCPÁ¬½Ó¾Í½¨Á¢ÆðÀ´ÁË¡£
¡¡¡¡B ---- SYN ----> A
¡¡¡¡B <---- SYN+ACK ---- A
¡¡¡¡B ---- ACK ----> A
¡¡¡¡¼ÙÉèCÆóͼ¹¥»÷A£¬ÒòΪAºÍBÊÇÏ໥ÐÅÈεģ¬Èç¹ûCÒѾ֪µÀÁ˱»AÐÅÈεÄB£¬ÄÇô¾ÍÒªÏë°ì·¨Ê¹µÃBµÄÍøÂ繦ÄÜ̱»¾£¬·ÀÖ¹±ðµÄ¶«Î÷¸ÉÈÅ×Ô¼ºµÄ¹¥»÷¡£ÔÚÕâÀïÆÕ±éʹÓõÄÊÇSYN flood¡£¹¥»÷ÕßÏò±»¹¥»÷Ö÷»ú·¢ËÍÐí¶àTCP- SYN°ü¡£ÕâЩTCP-SYN°üµÄÔ´µØÖ·²¢²»Êǹ¥»÷ÕßËùÔÚÖ÷»úµÄIPµØÖ·£¬¶øÊǹ¥»÷Õß×Ô¼ºÌîÈëµÄIPµØÖ·¡£µ±±»¹¥»÷Ö÷»ú½ÓÊÕµ½¹¥»÷Õß·¢ËÍÀ´µÄTCP-SYN°üºó£¬»áΪһ¸öTCPÁ¬½Ó·ÖÅäÒ»¶¨µÄ×ÊÔ´£¬²¢ÇÒ»áÒÔ½ÓÊÕµ½µÄÊý¾Ý°üÖеÄÔ´µØÖ·£¨¼´¹¥»÷Õß×Ô¼ºÎ±ÔìµÄIPµØÖ·£©ÎªÄ¿µÄµØÖ·ÏòÄ¿µÄÖ÷»ú·¢ËÍTCP-£¨SYN+ACK£©Ó¦´ð°ü¡£ÓÉÓÚ¹¥»÷Õß×Ô¼ºÎ±ÔìµÄIPµØÖ·Ò»¶¨ÊǾ«ÐÄÑ¡ÔñµÄ²»´æÔڵĵØÖ·£¬ËùÒÔ±»¹¥»÷Ö÷»úÓÀÔ¶Ò²²»¿ÉÄÜÊÕµ½Ëü·¢ËͳöÈ¥µÄTCP-£¨SYN+ACK£©°üµÄÓ¦´ð°ü£¬Òò¶ø±»¹¥»÷Ö÷»úµÄTCP״̬»ú´¦Óڵȴý״̬¡£Èç¹û±»¹¥»÷Ö÷»úµÄTCP״̬»úÓг¬Ê±¿ØÖƵĻ°£¬Ö±µ½³¬Ê±£¬Îª¸ÃÁ¬½Ó·ÖÅäµÄ×ÊÔ´²Å»á±»»ØÊÕ¡£Òò´ËÈç¹û¹¥»÷ÕßÏò±»¹¥»÷Ö÷»ú·¢ËÍ×ã¹»¶àµÄTCP-SYN°ü£¬²¢ÇÒ×ã¹»¿ì£¬±»¹¥»÷Ö÷»úµÄTCPÄ£¿é¿Ï¶¨»áÒòΪÎÞ·¨ÎªÐµÄTCPÁ¬½Ó·ÖÅ䵽ϵͳ×ÊÔ´¶ø´¦ÓÚ·þÎñ¾Ü¾ø״̬¡£¼´Ê¹±»¹¥»÷Ö÷»úËùÔÚÍøÂçµÄ¹ÜÀíÔ±¼àÌýµ½Á˹¥»÷ÕßµÄÊý¾Ý°üÒ²ÎÞ·¨ÒÀ¾ÝIPÍ·µÄÔ´µØÖ·ÐÅÏ¢Åж¨¹¥»÷ÕßÊÇË¡£
¡¡¡¡µ±BµÄÍøÂ繦ÄÜÔÝʱ̱»¾Ê±£¬ C±ØÐëÏë·½É跨ȷ¶¨Aµ±Ç°µÄISN¡£Ê×ÏÈÁ¬Ïò25¶Ë¿Ú£¬ÒòΪSMTPÊÇûÓа²È«Ð£Ñé»úÖƵģ¬ÓëÇ°ÃæÀàËÆ£¬²»¹ýÕâ´ÎÐèÒª¼Ç¼AµÄISN£¬ÒÔ¼°Cµ½AµÄ´óÖµÄRTT(round trip time)¡£Õâ¸ö²½ÖèÒªÖظ´¶à´ÎÒÔ±ãÇó³öRTTµÄƽ¾ùÖµ¡£Ò»µ©CÖªµÀÁËAµÄISN»ùÖµºÍÔö¼Ó¹æÂÉ£¬¾Í¿ÉÒÔ¼ÆËã³ö´ÓCµ½AÐèÒªRTT/2 µÄʱ¼ä¡£È»ºóÁ¢¼´½øÈë¹¥»÷£¬·ñÔòÔÚÕâÖ®¼äÓÐÆäËûÖ÷»úÓëAÁ¬½Ó£¬ISN½«±ÈÔ¤ÁϵĶࡣ
¡¡¡¡CÏòA·¢ËÍ´øÓÐSYN±êÖ¾µÄÊý¾Ý¶ÎÇëÇóÁ¬½Ó£¬Ö»ÊÇÐÅÔ´IP¸Ä³ÉÁËB¡£AÏòB»ØËÍSYN+ACKÊý¾Ý¶Î£¬BÒѾÎÞ·¨ÏìÓ¦£¬BµÄTCP²ãÖ»ÊǼòµ¥µØ¶ªÆúAµÄ»ØËÍÊý¾Ý¶Î¡£Õâ¸öʱºòCÐèÒªÔÝͣһС»á¶ù£¬ÈÃAÓÐ×㹻ʱ¼ä·¢ËÍSYN+ACK£¬ÒòΪC¿´²»µ½Õâ¸ö°ü¡£È»ºóCÔÙ´Îαװ³ÉBÏòA·¢ËÍACK£¬´Ëʱ·¢Ë͵ÄÊý¾Ý¶Î´øÓÐCÔ¤²âµÄAµÄISN+1¡£Èç¹ûÔ¤²â׼ȷ£¬Á¬½Ó½¨Á¢£¬Êý¾Ý´«ËÍ¿ªÊ¼¡£ÎÊÌâÔÚÓÚ¼´Ê¹Á¬½Ó½¨Á¢£¬AÈÔÈ»»áÏòB·¢ËÍÊý¾Ý£¬¶ø²»ÊÇC£¬CÈÔÈ»ÎÞ·¨¿´µ½A·¢ÍùBµÄÊý¾Ý¶Î£¬C±ØÐëÃÉ×ÅÍ·°´ÕÕÐÒé±ê×¼¼ÙðBÏòA·¢ËÍÃüÁÓÚÊǹ¥»÷Íê³É¡£Èç¹ûÔ¤²â²»×¼È·£¬A½«·¢ËÍÒ»¸ö´øÓÐRST±êÖ¾µÄÊý¾Ý¶ÎÒì³£ÖÕÖ¹Á¬½Ó£¬CÖ»ÓдÓÍ·ÔÙÀ´¡£Ëæ×Ų»¶ÏµØ¾ÀÕýÔ¤²âµÄISN£¬¹¥»÷Õß×îÖÕ»áÓëÄ¿±êÖ÷»ú½¨Á¢Ò»¸ö»áÎͨ¹ýÕâÖÖ·½Ê½£¬¹¥»÷ÕßÒԺϷ¨Óû§µÄÉí·ÝµÇ¼µ½Ä¿±êÖ÷»ú¶ø²»Ðè½øÒ»²½µÄÈ·ÈÏ¡£Èç¹û·´¸´ÊÔÑéʹµÃÄ¿±êÖ÷»úÄܹ»½ÓÊÕ¶ÔÍøÂçµÄROOTµÇ¼£¬ÄÇô¾Í¿ÉÒÔÍêÈ«¿ØÖÆÕû¸öÍøÂç¡£
¡¡¡¡C(B) ---- SYN ----> A
¡¡¡¡B <---- SYN+ACK ---- A
¡¡¡¡C(B) ---- ACK ----> A
¡¡¡¡C(B) ---- PSH ----> A
¡¡¡¡IPÆÛƹ¥»÷ÀûÓÃÁËRPC·þÎñÆ÷½ö½öÒÀÀµÓÚÐÅÔ´IPµØÖ·½øÐа²È«Ð£ÑéµÄÌØÐÔ£¬¹¥»÷×îÀ§Äѵĵط½ÔÚÓÚÔ¤²âAµÄISN¡£¹¥»÷ÄѶȱȽϴ󣬵«³É¹¦µÄ¿ÉÄÜÐÔÒ²ºÜ´ó¡£C±ØÐ뾫ȷµØÔ¤¼û¿ÉÄÜ´ÓA·¢ÍùBµÄÐÅÏ¢£¬ÒÔ¼°AÆÚ´ýÀ´×ÔBµÄʲôӦ´ðÐÅÏ¢£¬ÕâÒªÇó¹¥»÷Õ߶ÔÐÒé±¾ÉíÏ൱ÊìϤ¡£Í¬Ê±ÐèÒªÃ÷°×£¬ÕâÖÖ¹¥»÷¸ù±¾²»¿ÉÄÜÔÚ½»»¥×´Ì¬ÏÂÍê³É£¬±ØÐëд³ÌÐòÍê³É¡£µ±È»ÔÚ×¼±¸½×¶Î¿ÉÒÔÓÃnetxrayÖ®ÀàµÄ¹¤¾ß½øÐÐÐÒé·ÖÎö¡£
¡¡¡¡×Ü ½á
¡¡¡¡Í¨¹ý·ÖÎöÉÏÃæµÄ¼¸¸ö©¶´´ó¼ÒÒ²¿ÉÒÔ¿´µ½Linux²¢²»ÊÇÍêÃÀµÄ£¬»¹ÓкܶàµÄµØ·½ÐèÒªÍêÉÆ¡£ÓÐЩ©¶´¼«´óµØÓ°ÏìÁËLinuxµÄÍƹãºÍʹÓã¬ÀýÈçÉÏÃæÄǸöLinux hash±í³åÍ»µÄ©¶´£¬ÒòΪһЩIDS³§É̺ͷÀ»ðǽ³§É̾ÍÊÇ»ùÓÚLinuxÄÚºËÀ´¿ª·¢×Ô¼ºµÄ²úÆ·£¬Èç¹û»¹ÊÇʹÓõÄLinux±¾ÉíµÄhashËã·¨¾Í»áÊܵ½ÕâÖÖ©¶´µÄÓ°Ï죬¼«Ò×±»¹¥»÷Õß½øÐÐDoS¹¥»÷¡£ÒòΪ·À»ðǽ¡¢IDS±¾Éí¾ÍÊÇ°²È«²úÆ·£¬Èç¹ûËüÃDZ»¹¥»÷¾Í»áʹÓû§²úÉú¼«´óµÄËðʧ£¬ËùÒÔÎÒÃÇÐèÒª¶ÔÕâЩ©¶´½øÐиú×Ù·ÖÎö£¬²¢Í¨¹ýÁ˽âËüÃǵÄÌØÐÔÒÔ±ÜÃâÔÚϵͳÖÐÔٴβúÉúÕâЩÀàÐ͵Ä©¶´£¬Í¨¹ý¶ÔÕâЩÀàÐ͵Ä©¶´½øÐÐÔ¤²âÍÚ¾ò£¬Ê¹ÎÒÃÇÄÜ»ý¼«µØ·ÀÓùºÚ¿ÍµÄ¹¥»÷ÆÆ»µ¡£
Á¬Â¶ ÓÚ 2006-10-18 11:20:24·¢±í:
¡¡¡¡LinuxÄÚºËÖеÄÕûÊýÒç³ö©¶´
¡¡¡¡Linux Kernel 2.4 NFSv3 XDR´¦ÀíÆ÷Àý³ÌÔ¶³Ì¾Ü¾ø·þÎñ©¶´ÔÚ2003Äê7ÔÂ29ÈÕ¹«²¼,Ó°ÏìLinux Kernel 2.4.21ÒÔϵÄËùÓÐLinuxÄں˰汾¡£
¡¡¡¡¸Ã©¶´´æÔÚÓÚXDR´¦ÀíÆ÷Àý³ÌÖУ¬Ïà¹ØÄÚºËÔ´´úÂëÎļþΪnfs3xdr.c. ´Ë©¶´ÊÇÓÉÓÚÒ»¸öÕûÐΩ¶´ÒýÆðµÄ£¨ÕýÊý/¸ºÊý²»Æ¥Å䣩¡£¹¥»÷Õß¿ÉÒÔ¹¹ÔìÒ»¸öÌØÊâµÄXDRÍ·£¨Í¨¹ýÉèÖñäÁ¿int sizeΪ¸ºÊý£©·¢Ë͸øLinuxϵͳ¼´¿É´¥·¢´Ë©¶´¡£µ±LinuxϵͳµÄNFSv3 XDR´¦Àí³ÌÐòÊÕµ½Õâ¸ö±»ÌØÊâ¹¹ÔìµÄ°üʱ£¬³ÌÐòÖеļì²âÓï¾ä»á´íÎóµØÅжϰüµÄ´óС£¬´Ó¶øÔÚÄÚºËÖп½±´¾Þ´óµÄÄڴ棬µ¼ÖÂÄÚºËÊý¾Ý±»ÆÆ»µ£¬ÖÂʹLinuxϵͳ±ÀÀ£¡£
¡¡¡¡Â©¶´´úÂ룺
[code]¡¡¡¡static inline u32 *
¡¡¡¡
¡¡¡¡decode_fh(u32 *p, struct svc_fh *fhp)
¡¡¡¡
¡¡¡¡{
¡¡¡¡
¡¡¡¡int size;
¡¡¡¡
¡¡¡¡fh_init(fhp, NFS3_FHSIZE);
¡¡¡¡
¡¡¡¡size = ntohl(*p++);
¡¡¡¡
¡¡¡¡if (size > NFS3_FHSIZE)
¡¡¡¡
¡¡¡¡return NULL;
¡¡¡¡
¡¡¡¡memcpy(&fhp->fh_handle.fh_base, p, size); fhp->fh_handle.fh_size = size;
¡¡¡¡
¡¡¡¡return p + XDR_QUADLEN(size);
¡¡¡¡
¡¡¡¡}[/code]
¡¡¡¡ÒòΪ´ËÄڴ濽±´Ê±ÔÚÄÚºËÄÚ´æÇøÓòÖнøÐУ¬»áÆÆ»µÄÚºËÖеÄÊý¾Ýµ¼ÖÂÄں˱ÀÀ££¬ËùÒÔ´Ë©¶´²¢Ã»ÓÐ֤ʵ¿ÉÒÔÓÃÀ´Ô¶³Ì»ñȡȨÏÞ£¬¶øÇÒÀûÓôË©¶´Ê±¹¥»÷Õß±ØÐë¿ÉÒÔmount´ËϵͳÉϵÄĿ¼£¬¸üΪÀûÓôË©¶´Ôö¼ÓÁËÀ§ÄÑ¡£
¡¡¡¡ÎÒÃǵÄÄ¿µÄÔÚÓÚͨ¹ýÕâ¸ö©¶´µÄÌصãÀ´Ñ°ÕÒ´ËÖÖÀàÐ͵Ä©¶´²¢¸üºÃµØÐÞ²¹Ëü¡£´ó¼Ò¿ÉÒÔ¿´µ½£¬¸Ã©¶´ÊÇÒ»¸ö·Ç³£µäÐ͵ÄÕûÊýÒç³ö©¶´£¬Èç¹ûÔÚÄÚºËÖдæÔÚÕâÑùµÄ©¶´ÊǷdz£Î£Ïյġ£ËùÒÔLinuxµÄÄں˿ª·¢ÈËÔ±¶ÔLinuxÄÚºËÖйØÓÚÊý¾Ý´óСµÄ±äÁ¿¶¼×÷ÁË´¦Àí£¨Ê¹ÓÃÁËunsigned int£©£¬ÕâÑù¾Í±ÜÃâÁËÔٴγöÏÖÕâÖÖµäÐ͵ÄÕûÊýÒç³ö¡£Í¨¹ý¶ÔÕâÖÖÌرðµäÐ͵Ä©¶´ÔÀí½øÐзÖÎö£¬¿ª·¢ÈËÔ±¿ÉÒÔÔÚÒÔºóµÄ¿ª·¢ÖбÜÃâ³öÏÖÕâÖÖ©¶´¡£
¡¡¡¡IPµØÖ·ÆÛÆÀ੶´
¡¡¡¡ÓÉÓÚtcp/ip±¾ÉíµÄȱÏÝ£¬µ¼Öºܶà²Ù×÷ϵͳ¶¼´æÔÚtcp/ip¶Ñջ©¶´£¬Ê¹¹¥»÷Õß½øÐÐipµØÖ·ÆÛƷdz£ÈÝÒ×ʵÏÖ¡£LinuxÒ²²»ÀýÍâ¡£ËäÈ»IPµØÖ·ÆÛƲ»»á¶ÔLinux·þÎñÆ÷±¾ÉíÔì³ÉºÜÑÏÖصÄÓ°Ï죬µ«ÊǶԺܶàÀûÓÃLinuxΪ²Ù×÷ϵͳµÄ·À»ðǽºÍIDS²úÆ·À´Ëµ£¬Õâ¸ö©¶´È´ÊÇÖÂÃüµÄ¡£
¡¡¡¡IPµØÖ·ÆÛÆÊǺܶ๥»÷µÄ»ù´¡£¬Ö®ËùÒÔʹÓÃÕâ¸ö·½·¨£¬ÊÇÒòΪIP×ÔÉíµÄȱµã¡£IPÐÒéÒÀ¾ÝIPÍ·ÖеÄÄ¿µÄµØÖ·ÏîÀ´·¢ËÍIPÊý¾Ý°ü¡£Èç¹ûÄ¿µÄµØÖ·ÊDZ¾µØÍøÂçÄڵĵØÖ·£¬¸ÃIP°ü¾Í±»Ö±½Ó·¢Ë͵½Ä¿µÄµØ¡£Èç¹ûÄ¿µÄµØÖ·²»ÔÚ±¾µØÍøÂçÄÚ£¬¸ÃIP°ü¾Í»á±»·¢Ë͵½Íø¹Ø£¬ÔÙÓÉÍø¹Ø¾ö¶¨½«Æä·¢Ë͵½ºÎ´¦¡£ÕâÊÇIP·ÓÉIP°üµÄ·½·¨¡£IP·ÓÉIP°üʱ¶ÔIPÍ·ÖÐÌṩµÄIPÔ´µØÖ·²»×öÈκμì²é£¬ÈÏΪIPÍ·ÖеÄIPÔ´µØÖ·¼´Îª·¢Ë͸ðüµÄ»úÆ÷µÄIPµØÖ·¡£µ±½ÓÊÕµ½¸Ã°üµÄÄ¿µÄÖ÷»úÒªÓëÔ´Ö÷»ú½øÐÐͨÐÅʱ£¬ËüÒÔ½ÓÊÕµ½µÄIP°üµÄIPÍ·ÖÐIPÔ´µØÖ·×÷ΪÆä·¢Ë͵ÄIP°üµÄÄ¿µÄµØÖ·£¬À´ÓëÔ´Ö÷»ú½øÐÐÊý¾ÝͨÐÅ¡£IPµÄÕâÖÖÊý¾ÝͨÐÅ·½Ê½ËäÈ»·Ç³£¼òµ¥ºÍ¸ßЧ£¬µ«ËüͬʱҲÊÇIPµÄÒ»¸ö°²È«Òþ»¼£¬ºÜ¶àÍøÂ簲ȫʹʶ¼ÊÇÓÉIPµÄÕâ¸öȱµã¶øÒý·¢µÄ¡£
¡¡¡¡ºÚ¿Í»òÈëÇÖÕßÀûÓÃαÔìµÄIP·¢Ë͵ØÖ·²úÉúÐé¼ÙµÄÊý¾Ý·Ö×飬ÇÇ×°³ÉÀ´×ÔÄÚ²¿Õ¾µÄ·Ö×é¹ýÂËÆ÷£¬ÕâÖÖÀàÐ͵Ĺ¥»÷ÊǷdz£Î£Ïյġ£¹ØÓÚÉæ¼°µ½µÄ·Ö×éÕæÕýÊÇÄÚ²¿µÄ£¬»¹ÊÇÍⲿµÄ·Ö×é±»°ü×°µÃ¿´ÆðÀ´ÏñÄÚ²¿·Ö×éµÄÖÖÖÖ¼£Ïó¶¼ÒÑɥʧ´ù¾¡¡£Ö»ÒªÏµÍ³·¢ÏÖ·¢Ë͵ØÖ·ÔÚ×Ô¼ºµÄ·¶Î§Ö®ÄÚ£¬¾Í°Ñ¸Ã·Ö×é°´ÄÚ²¿Í¨ÐŶԴý²¢ÈÃÆäͨ¹ý¡£
Á¬Â¶ ÓÚ 2006-10-18 11:19:31·¢±í:
¡¡¡¡¾Ü¾ø·þÎñÀ੶´
¡¡¡¡¾Ü¾ø·þÎñ¹¥»÷ÊÇÄ¿Ç°±È½ÏÁ÷ÐеĹ¥»÷·½Ê½£¬Ëü²¢²»È¡µÃ·þÎñÆ÷ȨÏÞ£¬¶øÊÇʹ·þÎñÆ÷±ÀÀ£»òʧȥÏìÓ¦¡£¶ÔLinuxµÄ¾Ü¾ø·þÎñ´ó¶àÊý¶¼ÎÞÐëµÇ¼¼´¿É¶Ôϵͳ·¢Æð¾Ü¾ø·þÎñ¹¥»÷£¬Ê¹ÏµÍ³»òÏà¹ØµÄÓ¦ÓóÌÐò±ÀÀ£»òʧȥÏìÓ¦ÄÜÁ¦£¬ÕâÖÖ·½Ê½ÊôÓÚÀûÓÃϵͳ±¾Éí©¶´»òÆäÊØ»¤½ø³ÌȱÏݼ°²»ÕýÈ·ÉèÖýøÐй¥»÷¡£
¡¡¡¡ÁíÍâÒ»ÖÖÇé¿ö£¬¹¥»÷ÕߵǼµ½Linuxϵͳºó£¬ÀûÓÃÕâÀ੶´£¬Ò²¿ÉÒÔʹϵͳ±¾Éí»òÓ¦ÓóÌÐò±ÀÀ£¡£ÕâÖÖ©¶´Ö÷ÒªÓɳÌÐò¶ÔÒâÍâÇé¿öµÄ´¦ÀíʧÎóÒýÆð£¬ÈçдÁÙʱÎļþ֮ǰ²»¼ì²éÎļþÊÇ·ñ´æÔÚ£¬Ã¤Ä¿¸úËæÁ´½ÓµÈ¡£
¡¡¡¡ÏÂÃ棬ÎÒÃǼòµ¥ÃèÊöÒ»ÏÂLinuxÔÚ´¦Àíintel IA386 CPUÖеļĴæÆ÷ʱ·¢Éú´íÎó¶ø²úÉúµÄ¾Ü¾ø·þÎñ©¶´¡£¸Ã©¶´ÊÇÒòΪIA386¶àýÌåÖ¸ÁîʹÓõļĴæÆ÷MXCSRµÄÌØÐÔµ¼Öµġ£ÓÉÓÚIA386 CPU¹æ¶¨MXCSR¼Ä´æÆ÷µÄ¸ß16λ²»ÄÜÓÐÈκÎλ±»ÖÃ룬·ñÔòCPU¾Í»á±¨´íµ¼ÖÂϵͳ±ÀÀ£¡£ÎªÁ˱£Ö¤ÏµÍ³Õý³£ÔËת£¬ÔÚlinuxϵͳÖÐÓÐÒ»¶Î´úÂëרÃŶÔMXCSRµÄÕâ¸öÌØÐÔ×÷´¦Àí£¬¶øÕâÒ»¶Î´úÂëÔÚÌض¨µÄÇé¿öÏ»á³öÏÖ´íÎ󣬵¼ÖÂMXCSRÖеĸß16λûÓб»ÇåÁ㣬ʹϵͳ±ÀÀ£¡£Èç¹û¹¥»÷ÕßÖÆÔìÁËÕâÖÖ¡°¼«ÏÞ¡±µÄÄÚ´æÇé¿ö¾Í»á¶Ôϵͳ²úÉúDoSЧ¹û¡£
¡¡¡¡¹¥»÷Õßͨ¹ýµ÷ÓÃget_fpxregsº¯Êý¿ÉÒÔ¶ÁÈ¡¶àýÌå¼Ä´æÆ÷ÖÁÓû§¿Õ¼ä£¬ÕâÑùÓû§¾Í¿ÉÒÔÈ¡µÃMXCSR¼Ä´æÆ÷µÄÖµ¡£µ÷ÓÃset_fpxregsº¯Êý¿ÉÒÔʹÓÃÓû§¿Õ¼äÌṩµÄÊý¾Ý¶ÔMXCSR¼Ä´æÆ÷½øÐи³Öµ¡£Í¨¹ý¶ÔMXCSRµÄ¸ß16λ½øÐÐÇå0£¬¾Í±£Ö¤ÁËIA386 CPUµÄÕâ¸öÌØÐÔ¡£Èç¹û²úÉúÒ»ÖÖ¼«ÏÞЧ¹ûʹ³ÌÐòÌø¹ýÕâÒ»ÐУ¬Ê¹MXCSR¼Ä´æÆ÷µÄ¸ß16λûÓб»Çå0£¬Ò»µ©MXCSR¼Ä´æÆ÷µÄ¸ß16λÓÐÈκÎλ±»ÖÃλ£¬ÏµÍ³¾Í»áÁ¢¼´±ÀÀ££¡
¡¡¡¡ÒòΪÀûÓÃÕâ¸ö©¶´¹¥»÷Õß»¹ÐèÒªµÇ¼µ½ÏµÍ³£¬Õâ¸ö©¶´Ò²²»ÄÜʹ¹¥»÷ÕßÌáÉýȨÏÞ£¬Ö»ÄÜ´ïµ½DoSµÄЧ¹û£¬ËùÒÔÕâ¸ö©¶´µÄΣº¦»¹ÊDZȽÏСµÄ¡£µ«ÊÇ·ÖÎöÕâ¸ö©¶´¾ÍûÓÐÒâÒåÁËÂð£¿ÆäʵÓÉ·ÖÎöÕâ¸ö©¶´¿ÉÒÔ¿´³ö£ºLinuxÄں˿ª·¢³ÉÔ±¶ÔÕâÖÖÄڴ濽±´Ê±³öÏÖ´íÎóµÄÇé¿öûÓнøÐп¼ÂÇ£¬ÒÔÖÁÔì³ÉÁËÕâ¸ö©¶´£¬·ÖÎöÁ˽âÁËÕâ¸ö©¶´ºó£¬ÔÚ©¶´ÍÚ¾ò·½ÃæÒ²³öÏÖÁËÒ»ÖÖеÄÀàÐÍ£¬Ê¹ÎÒÃÇÔÚÒÔºóµÄ¿ª·¢ÖпÉÒÔ¾¡Á¿±ÜÃâÕâÖÖÇé¿ö¡£
¡¡¡¡½ÓÏÂÀ´ÈÃÎÒÃÇ¿´Ò»ÖÖLinuxÄÚºËËã·¨ÉϳöÏֵĩ¶´¡£ÏÈÀ´¼òµ¥½éÉÜÒ»ÏÂÕâ¸ö©¶´£¬µ±Linuxϵͳ½ÓÊÕµ½¹¥»÷Õß¾¹ýÌØÊâ¹¹ÔìµÄ°üºó£¬»áÒýÆðhash±í²úÉú³åÍ»µ¼Ö·þÎñÆ÷×ÊÔ´±»ºÄ¾¡¡£ÕâÀïËù˵µÄhash³åÍ»¾ÍÊÇÖ¸£ºÐí¶àÊýÖµ¾¹ýijÖÖhashËã·¨ÔËËãÒÔºóµÃ³öµÄÖµÏàͬ£¬²¢ÇÒÕâЩֵ¶¼±»´¢´æÔÚͬһ¸öhash²ÛÄÚ£¬Õâ¾Íʹhash±í±ä³ÉÁËÒ»¸öµ¥ÏòÁ´±í¡£¶ø¶Ô´Ëhash±íµÄ²åÈë²Ù×÷»á´ÓÔÀ´µÄ¸´ÔÓ¶ÈO(n)±äΪO(n*n)¡£ÕâÑù¾Í»áµ¼ÖÂϵͳÏûºÄ¾Þ´óµÄcpu×ÊÔ´£¬´Ó¶ø²úÉúÁËDoS¹¥»÷Ч¹û¡£
¡¡¡¡ÎÒÃÇÏÈ¿´Ò»ÏÂÔÚlinuxÖÐʹÓõÄhashËã·¨£¬Õâ¸öËã·¨ÓÃÔÚ¶ÔLinux route catchµÄË÷ÒýÓë·ÖƬÖØ×éµÄ²Ù×÷ÖС£ÔÚ½ñÄêÎåÔÂRice University¼ÆËã»ú¿ÆѧϵµÄScott A. CrosbyÓëDan S. WallachÌá³öÁËÒ»ÖÖеĵʹø¿íµÄDoS¹¥»÷·½·¨£¬¼´Õë¶ÔÓ¦ÓóÌÐòËùʹÓõÄhashËã·¨µÄ´àÈõÐÔ½øÐй¥»÷¡£ÕâÖÖ·½·¨Ìá³ö£ºÈç¹ûÓ¦ÓóÌÐòʹÓõÄhashËã·¨´æÔÚÈõµã£¬Ò²¾ÍÊÇ˵hashËã·¨²»ÄÜÓÐЧµØ°ÑÊý¾Ý½øÐÐÉ¢ÁУ¬¹¥»÷Õ߾ͿÉÒÔͨ¹ý¹¹ÔìÌØÊâµÄֵʹhashËã·¨²úÉú³åÍ»ÒýÆðDoS¹¥»÷¡£
[code]¡¡¡¡202
¡¡¡¡
¡¡¡¡203 static __inline__ unsigned rt_hash_code(u32 daddr, u32 saddr, u8 tos)
¡¡¡¡
¡¡¡¡204 {
¡¡¡¡
¡¡¡¡205 unsigned hash = ((daddr & 0xF0F0F0F0) >> 4) ©¦
¡¡¡¡
¡¡¡¡206 ((daddr & 0x0F0F0F0F) << 4);
¡¡¡¡
¡¡¡¡207 hash ^= saddr ^ tos;
¡¡¡¡
¡¡¡¡208 hash ^= (hash >> 16);
¡¡¡¡
¡¡¡¡209 return (hash ^ (hash >> 8)) & rt_hash_mask;
¡¡¡¡
¡¡¡¡210 }[/code]
¡¡¡¡
¡¡¡¡ÒÔÉϵĴúÂë¾ÍÊÇLinux¶Ôip°ü½øÐзÓÉ»òÕßÖØ×éʱʹÓõÄËã·¨¡£´ËËã·¨ÓÉÓÚ¹ýÓÚ¼òµ¥¶ø²»ÄÜ°Ñroute»º´æ½øÐÐÓÐЧµÄÉ¢ÁУ¬´Ó¶ø²úÉúÁËDoS©¶´¡£ÏÂÃæÎÒÃÇÀ´·ÖÎöһϴ˺¯Êý¡£
¡¡¡¡203ÐÐΪ´Ëº¯ÊýµÄº¯ÊýÃûÓëÈë¿Ú²ÎÊý£¬u32 daddrΪ32λµÄÄ¿µÄµØÖ·£¬¶øu32 saddrΪ32λµÄÔµØÖ·£¬tosΪÐÒé¡£
¡¡¡¡205ÐÐ-206ÐÐÊÇ°ÑÄ¿±êµØÖ·Ç°ºó×Ö½Ú½øÐÐת»»¡£
¡¡¡¡207ÐаÑÔµØÖ·Óëtos½øÐÐÒì»òºóÔÙÓëhashÒì»òÈ»ºóÔÙ¸³Öµ¸øhash¡£
¡¡¡¡208ÐаÑhashµÄÖµÏòÓÒÆ«ÒÆ16λȻºóÓëhashÒì»òÔÙ¸³Öµ¸øhash¡£
¡¡¡¡209ÐÐÊǴ˺¯Êý·µ»ØhashÓëËü±¾ÉíÏòÓÒÆ«ÒÆ8λµÄÖµÒì»ò£¬È»ºóÔÙ¸úrt_hash_mask½øÐÐÓë²Ù×÷µÄÖµ¡£
¡¡¡¡ÕâÖÖ¹¥»÷ÊÇÒ»ÖÖ½ÏΪÉÙ¼ûµÄ¾Ü¾ø·þÎñ·½Ê½£¬ÒòΪËüÀûÓÃÁËϵͳ±¾ÉíµÄËã·¨ÖеÄ©¶´¡£¸Ã©¶´Ò²´ú±íÁËÒ»ÖÖеĩ¶´·¢¾òµÄ·½Ïò£¬¾ÍÊÇÕë¶ÔÓ¦ÓÃÈí¼þ»òÕßϵͳʹÓõÄhashËã·¨½øÐЩ¶´ÍÚ¾ò¡£Òò´Ë£¬ÕâÖÖÕë¶Ôhash±í¹¥»÷µÄ·½·¨¶Ô²»½ö¶ÔLinux£¬¶øÇÒ»á¶ÔºÜ¶àÓ¦ÓÃÈí¼þ²úÉúÓ°Ï죬±ÈÈç˵Perl5ÔÚÕâ¸öperlµÄ°æ±¾ÖÐʹÓõÄhashËã·¨¾ÍÈÝÒ×ʹ¹¥»÷ÕßÀûÓþ«ÐÄɸѡµÄÊý¾Ý£¬Ê¹ÓÃperl5½øÐбà³ÌµÄÓ¦ÓóÌÐòʹÓõÄhash±í²úÉúhash³åÍ»£¬°üÀ¨Ò»Ð©´úÀí·þÎñÆ÷Èí¼þ£¬ÉõÖÁһЩIDSÈí¼þ£¬·À»ðǽµÈ£¬ÒòʹÓõÄÊÇLinuxÄں˶¼»á±»´ËÖÖ¹¥»÷Ó°Ïì¡£