²©¿ÍÊ×Ò³ ×¢²á ½¨ÒéÓë½»Á÷ ÅÅÐаñ ¼ÓÈëÓÑÇéÁ´½Ó
ÍÆ¼ö ͶËß ËÑË÷£º °ïÖú

hardworkor

hardworkor.cublog.cn
tcpЭÒé

tcpЭÒé

´«Êä¿ØÖÆÐ­Ò飨Transmission Control Protocol, TCP£©

TCPЭÒéÖ÷ΪÁËÔÚÖ÷»ú¼äʵÏָ߿ɿ¿ÐԵİü½»»»´«ÊäЭÒé¡£±¾ÎĽ«ÃèÊöЭÒé±ê×¼ºÍʵÏÖµÄһЩ·½·¨¡£ÒòΪ¼ÆËã»úÍøÂçÔÚÏÖ´úÉç»áÖÐÒѾ­ÊDz»¿ÉȱÉÙµÄÁË£¬TCPЭÒéÖ÷ÒªÔÚÍøÂç²»¿É¿¿µÄʱºòÍê³ÉͨÐÅ£¬¶Ô¾ü·½¿ÉÄÜÌØ±ðÓÐÓ㬵«ÊǶÔÓÚÕþ¸®ºÍÉÌÓò¿ÃÅÒ²ÊÊÓá£TCPÊÇÃæÏòÁ¬½ÓµÄ¶Ëµ½¶ËµÄ¿É¿¿Ð­Òé¡£ËüÖ§³Ö¶àÖÖÍøÂçÓ¦ÓóÌÐò¡£TCP¶Ôϲã·þÎñûÓжàÉÙÒªÇó£¬Ëü¼Ù¶¨Ï²ãÖ»ÄÜÌṩ²»¿É¿¿µÄÊý¾Ý±¨·þÎñ£¬Ëü¿ÉÒÔÔÚ¶àÖÖÓ²¼þ¹¹³ÉµÄÍøÂçÉÏÔËÐС£ÏÂÃæµÄͼÊÇTCPÔÚ²ã´Îʽ½á¹¹ÖеÄλÖã¬ËüµÄϲãÊÇIPЭÒ飬TCP¿ÉÒÔ¸ù¾ÝIPЭÒéÌṩµÄ·þÎñ´«ËÍ´óС²»¶¨µÄÊý¾Ý£¬IPЭÒ鸺Ôð¶ÔÊý¾Ý½øÐзֶΣ¬ÖØ×飬ÔÚ¶àÖÖÍøÂçÖд«ËÍ¡£

ÍøÂç²ã´Î

TCPµÄÉÏÃæ¾ÍÊÇÓ¦ÓóÌÐò£¬ÏÂÃæÊÇIPЭÒ飬Éϲã½Ó¿Ú°üÀ¨Ò»ÏµÁÐÀàËÆÓÚ²Ù×÷ϵͳÖжϵĵ÷Ó᣶ÔÓÚÉϲãÓ¦ÓóÌÐòÀ´Ëµ£¬TCPÓ¦¸ÃÄܹ»Òì²½´«ËÍÊý¾Ý¡£Ï²ã½Ó¿ÚÎÒÃǼٶ¨ÎªIPЭÒé½Ó¿Ú¡£ÎªÁËÔÚ²¢²»¿É¿¿µÄÍøÂçÉÏʵÏÖÃæÏòÁ¬½ÓµÄ¿É¿¿µÄ´«ËÍÊý¾Ý£¬TCP±ØÐë½â¾ö¿É¿¿ÐÔ£¬Á÷Á¿¿ØÖƵÄÎÊÌ⣬±ØÐëÄܹ»ÎªÉϲãÓ¦ÓóÌÐòÌṩ¶à¸ö½Ó¿Ú£¬Í¬Ê±Îª¶à¸öÓ¦ÓóÌÐòÌṩÊý¾Ý£¬Í¬Ê±TCP±ØÐë½â¾öÁ¬½ÓÎÊÌ⣬ÕâÑùTCP²ÅÄܳƵÃÉÏÊÇÃæÏòÁ¬½ÓµÄ£¬×îºó£¬TCPÒ²±ØÐëÄܹ»½â¾öͨÐŰ²È«ÐÔµÄÎÊÌâ¡£

ÍøÂç»·¾³°üÀ¨ÓÉÍø¹Ø£¨»òÆäËüÉ豸£©Á¬½ÓµÄÍøÂç£¬ÍøÂç¿ÉÒÔÊǾÖÓòÍøÒ²¿ÉÒÔÊÇһЩ³ÇÓòÍø»ò¹ãÓòÍø£¬µ«ÎÞÂÛËüÃÇÊÇʲô£¬ËüÃDZØÐëÊÇ»ùÓÚ°ü½»»»µÄ¡£Ö÷»úÉϲ»Í¬µÄЭÒéÓв»Í¬µÄ¶Ë¿ÚºÅ£¬Ò»¶Ô½ø³Ìͨ¹ýÕâ¸ö¶Ë¿ÚºÅ½øÐÐͨÐÅ¡£Õâ¸öͨÐŲ»°üÀ¨¼ÆËã»úÄÚµÄI/O²Ù×÷£¬Ö»°üÀ¨ÔÚÍøÂçÉϽøÐеIJÙ×÷¡£ÍøÂçÉϵļÆËã»ú±»¿´×÷°ü´«Ë͵ÄÔ´ºÍÄ¿µÄ½áµã¡£ÌرðÓ¦¸Ã×¢ÒâµÄÊÇ£º¼ÆËã»úÖеIJ»Í¬½ø³Ì¿ÉÄÜͬʱ½øÐÐͨÐÅ£¬ÕâʱËüÃÇ»áÓö˿ںŽøÐÐÇø±ð£¬²»»á°Ñ·¢ÏòA½ø³ÌµÄÊý¾ÝÓÉB½ø³Ì½ÓÊյġ£

½ø³ÌΪÁË´«ËÍÊý¾Ý»áµ÷ÓÃTCP£¬½«Êý¾ÝºÍÏàÓ¦µÄ²ÎÊý´«Ë͸øTCP£¬ÓÚÊÇTCP»á½«Êý¾Ý´«Ë͵½Ä¿µÄTCPÄÇÀµ±È»ÕâÊÇͨ¹ý½«TCP°ü´ò°üÔÚIP°üÄÚÔÚÍøÂçÉÏ´«ËÍ´ïµ½µÄ¡£½ÓÊÕ·½TCPÔÚ½ÓÊÕµ½Êý¾Ýºó»áͨÐÅÉϲãÓ¦ÓóÌÐò£¬TCP»á±£Ö¤½ÓÊÕÊý¾Ý˳ÐòµÄÕýÈ·ÐÔ¡£ËäȻϲãЭÒé¿ÉÄܲ»»á±£Ö¤Ë³ÐòÊÇÕýÈ·µÄ¡£ÕâÀïÐèҪ˵Ã÷µÄÊÇÍø¹ØÔÚ½ÓÊÕµ½Õâ¸ö°üºó£¬»á½«°ü½â¿ª£¬¿´¿´ÊDz»ÊÇÒѾ­µ½Ä¿µÄµØÁË£¬Èç¹ûûÓе½£¬Ó¦¸Ã×ßʲô·ÓɴﵽĿµÄµØ£¬ÔÚ¾ö¶¨ºó£¬Íø¹Ø»á¸ù¾ÝÏÂÒ»¸öÍøÂçÄÚµÄЭÒéÇé¿öÔٴν«TCP°ü´ò°ü´«ËÍ£¬Èç¹ûÐèÒª£¬»¹Òª°ÑÕâ¸ö°üÔٴηֳɼ¸¶ÎÔÙ´«ËÍ¡£Õâ¸öÂ䵨¼ì²éµÄ¹ý³ÌÊÇÒ»¸öºÄʱµÄ¹ý³Ì¡£´ÓÉÏÃæ£¬ÎÒÃÇ¿ÉÒÔ¿´³öTCP´«Ë͵Ļù±¾¹ý³Ì£¬µ±È»¾ßÌå¹ý³Ì¿ÉÄÜÒª¸´Ôӵöࡣ

ÔÚʵÏÖTCPµÄÖ÷»úÉÏ£¬TCP¿ÉÒÔ±»¿´³ÉÊÇÒ»¸öÄ£¿é£¬ºÍÎļþÏµÍ³Çø±ð²»´ó£¬TCPÒ²¿ÉÒÔµ÷ÓÃһЩ²Ù×÷ϵͳµÄ¹¦ÄÜ£¬TCP²»Ö±½ÓºÍÍøÂç´ò½»µÀ£¬¿ØÖÆÍøÂçµÄÈÎÎñÓÉרÃŵÄÉ豸Çý¶¯Ä£¿éÍê³É¡£TCPÖ»Êǵ÷ÓÃIP½Ó¿Ú£¬IPÏòTCPÌṩËùÓÐTCPÐèÒªµÄ·þÎñ¡£Í¨¹ýÏÂͼÎÒÃÇ¿ÉÒÔ¸üÇå³þµØ¿´µ½TCPЭÒéµÄ½á¹¹¡£

ÍøÂç²ã´ÎÁªÏµ

ÉÏÃæÒѾ­Ëµ¹ýÁË£¬TCPÁ¬½ÓÊǿɿ¿µÄ£¬¶øÇÒ±£Ö¤ÁË´«ËÍÊý¾Ý°üµÄ˳Ðò£¬±£Ö¤Ë³ÐòÊÇÓÃÒ»¸öÐòºÅÀ´±£Ö¤µÄ¡£ÏìÓ¦°üÄÚÒ²°üÀ¨Ò»¸öÐòÁкţ¬±íʾ½ÓÊÕ·½×¼±¸ºÃÕâ¸öÐòºÅµÄ°ü¡£ÔÚTCP´«ËÍÒ»¸öÊý¾Ý°üʱ£¬Ëüͬʱ°ÑÕâ¸öÊý¾Ý°ü·ÅÈëÖØ·¢¶ÓÁÐÖУ¬Í¬Ê±Æô¶¯¼ÇÊýÆ÷£¬Èç¹ûÊÕµ½Á˹ØÓÚÕâ¸ö°üµÄÈ·ÈÏÐÅÏ¢£¬½«´Ë°ü´Ó¶ÓÁÐÖÐɾ³ý£¬Èç¹û¼ÆÊ±³¬Ê±ÔòÐèÒªÖØÐ·¢Ëʹ˰ü¡£Çë×¢Ò⣬´ÓTCP·µ»ØµÄÈ·ÈÏÐÅÏ¢²¢²»±£Ö¤×îÖÕ½ÓÊÕÕß½ÓÊÕµ½Êý¾Ý£¬Õâ¸öÔðÈÎÓɽÓÊÕ·½¸ºÔð¡£

ÿ¸öÓÃÓÚ´«ËÍTCPµÄͨµÀ¶¼ÓÐÒ»¸ö¶Ë¿Ú±ê¼Ç£¬ÒòΪÕâ¸ö±ê¼ÇÊÇÓÉÿ¸öTCPÖÕ¶ËÈ·¶¨µÄ£¬Òò´ËTCP¿ÉÄܲ»Î¨Ò»£¬ÎªÁ˱£Ö¤Õâ¸öÊýÖµµÄΨһ£¬ÒªÊ¹ÓÃÍøÂçµØÖ·ºÍ¶Ë¿ÚºÅµÄ×éºÏ´ïµ½Î¨Ò»±êʶµÄÄ¿µÄ£¬ÎÒÃdzÆÕâ¸öΪÁËÌ×½Ó×Ö£¨Socket£©£¬Ò»¸öÁ¬½ÓÓÉÁ¬½ÓÁ½¶ËµÄÌ×½Ó×Ö±êʶ£¬±¾µØµÄÌ×½Ó×Ö¿ÉÄܺͲ»Í¬µÄÍⲿÌ×½Ó×ÖͨÐÅ£¬ÕâÖÖͨÐÅÊÇȫ˫¹¤µÄ¡£

ͨ¹ýÏò±¾µØ¶Ë¿Ú·¢ËÍOPENÃüÁî¼°ÍⲿÌ×½Ó×Ö²ÎÊý½¨Á¢Á¬½Ó£¬TCP·µ»ØÒ»¸ö±ê¼ÇÕâ¸öÁ¬½ÓµÄÃû³Æ£¬ÒÔºóÈç¹ûÓû§ÐèҪʹÓÃÕâ¸öÃû³Æ±ê¼ÇÕâ¸öÁ¬½Ó¡£ÎªÁ˱£´æÕâ¸öÁ¬½ÓµÄÐÅÏ¢£¬ÎÒÃǼÙÉèÓÐÒ»¸ö³ÆÎª´«Êä¿ØÖÆ¿é£¨Transmission Control Block£¬TCB£©µÄ¶«Î÷À´±£´æ¡£OPENÃüÁָ¶¨Õâ¸öÁ¬½ÓµÄ½¨Á¢ÊÇÖ÷¶¯ÇëÇó»¹ÊDZ»¶¯µÈ´ýÇëÇó¡£ÏÂÃæÎÒÃÇ񻃾¼°¾ßÌåµÄ¹¦ÄÜÁË£¬TCP¶ÎÒÔinternetÊý¾Ý±¨µÄÐÎʽ´«ËÍ¡£IP°üÍ·´«ËͲ»Í¬µÄÐÅÏ¢Óò£¬°üÀ¨Ô´µØÖ·ºÍÄ¿µÄµØÖ·¡£TCPÍ·¸úÔÚinternet°üÍ·ºóÃæ£¬ÌṩÁËһЩרÓÃÓÚTCPЭÒéµÄÐÅÏ¢¡£ÏÂͼÊÇTCP°üÍ·¸ñʽͼ£º

TCP°üÍ·¸ñʽ

Ô´¶Ë¿Ú£º16λ£»

Ä¿µÄ¶Ë¿Ú£º16λ

ÐòÁÐÂ룺32룬µ±SYN³öÏÖ£¬ÐòÁÐÂëʵ¼ÊÉÏÊdzõʼÐòÁÐÂ루ISN£©£¬¶øµÚÒ»¸öÊý¾Ý×Ö½ÚÊÇISN+1£»

È·ÈÏÂ룺32룬Èç¹ûÉèÖÃÁËACK¿ØÖÆÎ»£¬Õâ¸öÖµ±íʾһ¸ö×¼±¸½ÓÊյİüµÄÐòÁÐÂ룻

Êý¾ÝÆ«ÒÆÁ¿£º4λ£¬Ö¸Ê¾ºÎ´¦Êý¾Ý¿ªÊ¼£»

±£Áô£º6룬ÕâЩλ±ØÐëÊÇ0£»

¿ØÖÆÎ»£º6λ£»

´°¿Ú£º16λ£»

УÑéλ£º16λ£»

ÓÅÏÈÖ¸Õ룺16λ£¬Ö¸ÏòºóÃæÊÇÓÅÏÈÊý¾ÝµÄ×Ö½Ú£»

Ñ¡Ï³¤¶È²»¶¨£»µ«³¤¶È±ØÐëÒÔ×ֽڼǣ»Ñ¡ÏîµÄ¾ßÌåÄÚÈÝÎÒÃǽáºÏ¾ßÌåÃüÁîÀ´¿´£»

Ìî³ä£º²»¶¨³¤£¬Ìî³äµÄÄÚÈݱØÐëΪ0£¬ËüÊÇΪÁ˱£Ö¤°üÍ·µÄ½áºÏºÍÊý¾ÝµÄ¿ªÊ¼´¦Æ«ÒÆÁ¿Äܹ»±»32Õû³ý£»

¡¡

ÎÒÃÇÇ°ÃæÒѾ­Ëµ¹ýÓÐÒ»¸öTCBµÄ¶«Î÷ÁË£¬TCBÀïÓд洢Á˰üÀ¨·¢ËÍ·½£¬½ÓÊÕ·½µÄÌ×½Ó×Ö£¬Óû§µÄ·¢ËͺͽÓÊյĻº³åÇøÖ¸ÕëµÈ±äÁ¿¡£³ýÁËÕâЩ»¹ÓÐһЩ±äÁ¿ºÍ·¢ËͽÓÊÕÐòÁкÅÓйأº

·¢ËÍÐòÁбäÁ¿

SND.UNA - ·¢ËÍδȷÈÏ

SND.NXT - ·¢ËÍÏÂÒ»¸ö

SND.WND - ·¢ËÍ´°¿Ú

SND.UP - ·¢ËÍÓÅÏÈÖ¸Õë

SND.WL1 - ÓÃÓÚ×îºó´°¿Ú¸üеĶÎÐòÁкÅ

SND.WL2 - ÓÃÓÚ×îºó´°¿Ú¸üеĶÎÈ·ÈϺÅ

ISS - ³õʼ·¢ËÍÐòÁкÅ

¡¡

½ÓÊÕÐòÁкÅ

RCV.NXT - ½ÓÊÕÏÂÒ»¸ö

RCV.WND - ½ÓÊÕÏÂÒ»¸ö

RCV.UP - ½ÓÊÕÓÅÏÈÖ¸Õë

IRS - ³õʼ½ÓÊÕÐòÁкÅ

ÏÂͼ»á°ïÖúÄúÁ˽ⷢËÍÐòÁбäÁ¿¼äµÄ¹ØÏµ£º

·¢ËÍÐòÁпռä½ÓÊÕÐòÁпռä

µ±Ç°¶Î±äÁ¿

SEG.SEQ - ¶ÎÐòÁкÅ

SEG.ACK - ¶ÎÈ·Èϱê¼Ç

SEG.LEN - ¶Î³¤

SEG.WND - ¶Î´°¿Ú

SEG.UP - ¶Î½ô¼±Ö¸Õë

SEG.PRC - ¶ÎÓÅÏȼ¶

Á¬½Ó½ø³ÌÊÇͨ¹ýһϵÁÐ״̬±íʾµÄ£¬ÕâЩ״̬ÓУºLISTEN£¬SYN-SENT£¬SYN-RECEIVED£¬ESTABLISHED£¬FIN-WAIT-1£¬FIN-WAIT-2£¬CLOSE-WAIT£¬CLOSING£¬LAST-ACK£¬TIME-WAITºÍ CLOSED¡£CLOSED±íʾûÓÐÁ¬½Ó£¬¸÷¸ö״̬µÄÒâÒåÈçÏ£º

LISTEN - ÕìÌýÀ´×ÔÔ¶·½TCP¶Ë¿ÚµÄÁ¬½ÓÇëÇó£»

SYN-SENT - ÔÚ·¢ËÍÁ¬½ÓÇëÇóºóµÈ´ýÆ¥ÅäµÄÁ¬½ÓÇëÇó£»

SYN-RECEIVED - ÔÚÊÕµ½ºÍ·¢ËÍÒ»¸öÁ¬½ÓÇëÇóºóµÈ´ý¶ÔÁ¬½ÓÇëÇóµÄÈ·ÈÏ£»

ESTABLISHED - ´ú±íÒ»¸ö´ò¿ªµÄÁ¬½Ó£¬Êý¾Ý¿ÉÒÔ´«Ë͸øÓû§£»

FIN-WAIT-1 - µÈ´ýÔ¶³ÌTCPµÄÁ¬½ÓÖжÏÇëÇ󣬻òÏÈǰµÄÁ¬½ÓÖжÏÇëÇóµÄÈ·ÈÏ£»

FIN-WAIT-2 - ´ÓÔ¶³ÌTCPµÈ´ýÁ¬½ÓÖжÏÇëÇó£»

CLOSE-WAIT - µÈ´ý´Ó±¾µØÓû§·¢À´µÄÁ¬½ÓÖжÏÇëÇó£»

CLOSING - µÈ´ýÔ¶³ÌTCP¶ÔÁ¬½ÓÖжϵÄÈ·ÈÏ£»

LAST-ACK - µÈ´ýÔ­À´·¢ÏòÔ¶³ÌTCPµÄÁ¬½ÓÖжÏÇëÇóµÄÈ·ÈÏ£»

TIME-WAIT - µÈ´ý×ã¹»µÄʱ¼äÒÔÈ·±£Ô¶³ÌTCP½ÓÊÕµ½Á¬½ÓÖжÏÇëÇóµÄÈ·ÈÏ£»

CLOSED - ûÓÐÈκÎÁ¬½Ó״̬£»

TCPÁ¬½Ó¹ý³ÌÊÇ״̬µÄת»»£¬´Ùʹ·¢Éú״̬ת»»µÄÊÇÓû§µ÷ÓãºOPEN£¬SEND£¬RECEIVE£¬CLOSE£¬ABORTºÍSTATUS£»´«Ë͹ýÀ´µÄÊý¾Ý¶Î£¬ÌرðÄÇЩ°üÀ¨ÒÔϱê¼ÇµÄÊý¾Ý¶ÎSYN£¬ACK£¬RSTºÍFIN£»»¹Óг¬Ê±£¬ÉÏÃæËù˵µÄ¶¼»áʱTCP״̬·¢Éú±ä»¯¡£

¡¡

ÏÂÃæµÄͼ±íʾÁËTCP״̬µÄת»»£¬µ«ÕâͼÖÐûÓаüÀ¨´íÎóµÄÇé¿öºÍ´íÎó´¦Àí£¬²»Òª°ÑÕâ·ùͼ¿´³ÉÊÇ×Ü˵Ã÷ÁË¡£

TCPÁ¬½Ó״̬ͼ

¡¡

3.3. ÐòÁкÅ

Çë×¢Ò⣬ÎÒÃÇÔÚTCPÁ¬½ÓÖз¢Ë͵Ä×Ö½Ú¶¼ÓÐÒ»¸öÐòÁкš£ÒòΪ±àÁ˺ţ¬ËùÒÔ¿ÉÒÔÈ·ÈÏËüÃǵÄÊÕµ½¡£¶ÔÐòÁкŵÄÈ·ÈÏÊÇÀÛ»ýÐԵģ¬Ò²¾ÍÊÇ˵£¬Èç¹ûÓû§ÊÕµ½¶ÔXµÄÈ·ÈÏÐÅÏ¢£¬Õâ±íʾÔÚXÒÔǰµÄÊý¾Ý£¨²»°üÀ¨X£©¶¼ÊÕµ½ÁË¡£ÔÚÿ¸ö¶ÎÖÐ×Ö½ÚÊÇÕâÑù°²ÅŵģºµÚÒ»¸ö×Ö½ÚÔÚ°üÍ·ºóÃæ£¬°´Õâ¸ö˳ÐòÅÅÁС£ÎÒÃÇÐèÒªÈϼÇʵ¼ÊµÄÐòÁпռäÊÇÓÐÏ޵ģ¬ËäÈ»ºÜ´ó£¬µ«ÊÇ»¹ÊÇÓÐÏ޵ģ¬ËüµÄ·¶Î§ÊÇ0µ½2µÄ32´Î·½¼õ1¡£ÎÒÏëÊìϤ±à³ÌµÄÒ»¶¨ÖªµÀΪʲôҪÔÚ¼ÆËãÁ½¸ö¶ÎÊDz»ÊÇÏà¼ÌµÄʱºòҪʹÓÃ2µÄ32´Î·½ÎªÄ£ÁË¡£TCP±ØÐë½øÐеÄÐòÁкűȽϲÙ×÷ÖÖÀà°üÀ¨ÒÔϼ¸ÖÖ£º

(a) ¾ö¶¨Ò»Ð©·¢ËÍÁ˵ĵ«Î´È·ÈϵÄÐòÁкţ»

(b) ¾ö¶¨ËùÓеÄÐòÁкŶ¼ÒѾ­ÊÕµ½ÁË£»

(c) ¾ö¶¨ÏÂÒ»¸ö¶ÎÖÐÓ¦¸Ã°üÀ¨µÄÐòÁкš£

¶ÔÓÚ·¢Ë͵ÄÊý¾ÝTCPÒª½ÓÊÕÈ·ÈÏ£¬´¦ÀíÈ·ÈÏʱ±ØÐë½øÐÐÏÂÃæµÄ±È½Ï²Ù×÷£º

SND.UNA = ×îÀϵÄÈ·ÈÏÁ˵ÄÐòÁкţ»

SND.NXT = ÏÂÒ»¸öÒª·¢Ë͵ÄÐòÁкţ»

SEG.ACK = ½ÓÊÕTCPµÄÈ·ÈÏ£¬½ÓÊÕTCPÆÚ´ýµÄÏÂÒ»¸öÐòÁкţ»

SEG.SEQ = Ò»¸öÊý¾Ý¶ÎµÄµÚÒ»¸öÐòÁкţ»

SEG.LEN = Êý¾Ý¶ÎÖаüÀ¨µÄ×Ö½ÚÊý£»

SEG.SEQ+SEG.LEN-1 = Êý¾Ý¶ÎµÄ×îºóÒ»¸öÐòÁкš£

Çë×¢ÒâÏÂÃæµÄ¹ØÏµ£º

SND.UNA < SEG.ACK =< SND.NXT

Èç¹ûÒ»¸öÊý¾Ý¶ÎµÄÐòÁкÅСÓÚµÈÓÚÈ·ÈϺŵÄÖµ£¬ÄÇôÕû¸öÊý¾Ý¶Î¾Í±»È·ÈÏÁË¡£¶øÔÚ½ÓÊÕÊý¾ÝʱÏÂÃæµÄ±È½Ï²Ù×÷ÊDZØÐëµÄ£º

RCV.NXT = ÆÚ´ýµÄÐòÁкźͽÓÊÕ´°¿ÚµÄ×îµÍÑØ£»

RCV.NXT+RCV.WND-1 = ×îºóÒ»¸öÐòÁкźͽÓÊÕ´°¿ÚµÄ×î¸ßÑØ£»

SEG.SEQ = ½ÓÊÕµ½µÄµÚÒ»¸öÐòÁкţ»

SEG.SEQ+SEG.LEN-1 = ½ÓÊÕµ½µÄ×îºóÒ»¸öÐòÁкţ»

¡¡

ÉÏÃæ¼¸¸öÁ¿ÓÐÈçϹØÏµ£º

RCV.NXT =< SEG.SEQ < RCV.NXT+RCV.WND »ò RCV.NXT =< SEG.SEQ+SEG.LEN-1 < RCV.NXT+RCV.WND

²âÊԵĵÚÒ»²¿·ÖÊǼì²éÊý¾Ý¶ÎµÄ¿ªÊ¼²¿·ÖÊÇ·ñÔÚ½ÓÊÕ´°¿ÚÖУ¬µÚ¶þ²¿·ÖÊǼì²éÊý¾Ý¶ÎµÄ½áÊø²¿·ÖÊÇ·ñÒ²ÔÚ½ÓÊÕ´°¿ÚÄÚ£»ÉÏÃæÁ½¸ö¼ì²éͨ¹ýÈκÎÒ»¸ö¾Í˵Ã÷Ëü°üÀ¨´°¿ÚÒªÇóµÄÊý¾Ý¡£Êµ¼ÊÖеÄÇé¿ö»á¸ü¸´ÔÓһЩ£¬ÒòΪÓÐÁã´°¿ÚºÍÁãÊý¾Ý¶Î³¤£¬Òò´ËÎÒÃÇÓÐÏÂÃæËÄÖÖÇé¿ö£º

¶Î³¤¶È

½ÓÊÕ´°¿Ú

²âÊÔ

0

0

SEG.SEQ = RCV.NXT

0

>0

RCV.NXT =< SEG.SEQ < RCV.NXT+RCV.WND

>0

0

²»¿É½ÓÊÜ

>0

>0

RCV.NXT =< SEG.SEQ < RCV.NXT+RCV.WND»òRCV.NXT =< SEG.SEQ+SEG.LEN-1 < RCV.NXT+RCV.WND

Çë×¢Òâ½ÓÊÕ´°¿ÚµÄ´óС¿ÉÒÔΪÁ㣬ÔÚ´°¿ÚΪÁãʱËüÖ»ÓÃÀ´½ÓÊÕACKÐÅÏ¢£¬Òò´Ë¶ÔÓÚÒ»¸öTCPÀ´Ëµ£¬Ëü¿ÉÒÔʹÓÃÁã´óС´°¿ÚÔÚ·¢ËÍÊý¾ÝµÄͬʱ½ÓÊÕÊý¾Ý¡£¼´Ê¹½ÓÊÕ´°¿ÚµÄ´óСΪÁ㣬TCP±ØÐë´¦ÀíËùÓнÓÊÕµ½ÐÅÏ¢µÄRSTºÍURGÓò¡£

ÎÒÃÇÒ²Ó¦ÓüÆÊýµÄ·½Ê½±£»¤ÁËÒ»Ð©ÌØ¶¨µÄ¿ØÖÆÐÅÏ¢£¬ÕâÊÇͨ¹ýÒþʽµØÊ¹ÓÃһЩ¿ØÖƱê¼ÇʹÊý¾Ý¶ÎÄܹ»¿É¿¿µØÖØÐ·¢ËÍ£¨»òÈ·ÈÏ£©Îª´ïµ½µÄ¡£¿ØÖÆÐÅÏ¢²¢²»ÔÚ¶ÎÊý¾Ý¿Õ¼äÖд«ËÍ£¬Òò´Ë£¬ÎÒÃDZØÐë²ÉÓÃÒþʽָ¶¨ÐòÁкŽøÐпØÖÆ¡£SYNºÍFINÊÇÐèÒª±£»¤µÄ¿ØÖÆÁ¿£¬ÕâÁ½¸ö¿ØÖÆÁ¿Ò²Ö»ÔÚÁ¬½Ó´ò¿ªºÍ¹Ø±ÕʱʹÓá£SYN±»ÈÏΪÊÇÔÚµÚÒ»¸öʵ¼ÊÊý¾ÝÖ®¼äµÄÊý¾Ý£¬¶øFINÊÇ×îºóÒ»¸öʵ¼ÊÊý¾ÝÖ®ºóµÄÊý¾Ý¡£¶Î³¤¶È£¨SEG.LEN£©°üÀ¨Êý¾ÝºÍÐòÁкſռ䣬Èç¹û³öÏÖÁËSYN£¬ÄÇôSEG.SEQÊÇSYNµÄÐòÁкš£

³õʼÐòÁкÅÑ¡Ôñ

ЭÒé¶ÔÓÚÌØ¶¨Á¬½Ó±»Öظ´Ê¹ÓÃûÓÐʲôÏÞÖÆ¡£Á¬½ÓÊÇÓÉÒ»¶ÔÌ×½Ó×Ö¶¨ÒåµÄ¡£ÐµÄÁ¬½ÓʵÀý±»¶¨ÒåΪÁ¬½ÓµÄÁíÒ»´Î»Ö¸´£¬Õâ¾Í´øÀ´ÁËÎÊÌ⣺TCPÈç¹ûÈ·¶¨¶à¸öÊý¾Ý¶ÎÊÇ´ÓÒÔǰÁ¬½ÓµÄÁíÒ»´Î»Ö¸´ÖÐÈ¡µÃµÄÄØ£¿Õâ¸öÎÊÌâÔÚÁ¬½ÓѸËÙ´ò¿ªºÍ¹Ø±Õ£¬»òÒòΪÄÚ´æÔ­Òò±»¹Ø±ÕÈ»ºóÓÖѸËÙ½¨Á¢ºóÏÔÊ¾ÌØ±ðÍ»³ö¡£

ΪÁ˱ÜÃâ»ìÂÒ£¬Óû§±ØÐë±ÜÃâÒò´Ë»Ö¸´Ê¹ÓÃijһÁ¬½Ó£¬¶øÊ¹ÐòÁкŷ¢Éú»ìÂÒ¡£ÎÒÃDZØÐë±£Ö¤ÐòÁкŵÄÕýÈ·ÐÔ£¬¼´Ê¹TCPʧ°Ü£¬¸ù±¾²»ÖªµÀÒÔǰµÄÐòÁкÅÊÇʲôµÄÇé¿öÏÂÒ²Òª±£Ö¤ÐòÁкŵÄÕýÈ·ÐÔ¡£µ±ÐµÄÁ¬½Ó±»´´½¨Ê±£¬²úÉúÒ»¸öеijõʼÐòÁкţ¨ISN£©²úÉú×Ó£¬ËüÓÃÀ´Ñ¡ÔñÒ»¸öеÄ32λISN¡£²úÉú×ÓºÍ32λʱÖӵĵͶÈλ×Ö½ÚÏà¹Ø£¬µÍλ×Ö½ÚµÄË¢ÐÂÆµÂÊ´ó¸ÅÊÇ4΢Ã룬Òò´ËISNµÄÑ­»·Ê±¼ä´ó¸ÅÊÇ4.55Сʱ¡£Òò´ËÎÒÃǰÑÍøÂç°üµÄ×Éú´æÊ±¼ä£¨MSL£©Ð¡ÓÚ4.55Сʱ£¬Òò´ËÎÒÃÇ¿ÉÒÔÈÏΪISNÊÇΨһµÄ¡£¶ÔÓÚÿ¸öÁ¬½Ó¶¼Óз¢ËÍÐòÁкźͽÓÊÕÐòÁкţ¬³õʼ·¢ËÍÐòÁкţ¨ISS£©ÓÉ·¢ËÍTCPÑ¡Ôñ£¬¶ø³õʼ½ÓÊÕÐòÁкÅÊÇÔÚÁ¬½Ó½¨Á¢¹ý³ÌÖвúÉúµÄ¡£

¶ÔÓÚ½«ÒªÁ¬½Ó»ò³õʼ»¯µÄÁ¬½Ó£¬Á½¸öTCP±ØÐëºÍ¶Ô·½µÄ³õʼÐòÁкÅͬ²½¡£Õâͨ¹ý½»»»Ò»¸ö¿ØÖÆÎ»SYNºÍ³õʼÐòÁкÅÍê³É¡£ÎÒÃǰѴøÓÐSYNµÄÊý¾Ý¶Î³ÆÎª"SYNs"¡£Í¬²½µÄ»ñµÃ¹ý³ÌÕâÀï¾Í²»Öظ´ÁË£¬Ã¿·½±ØÐë·¢ËÍ×Ô¼ºµÄÐòÁкŲ¢·µ»Ø¶Ô¶Ô·½ÐòÁкŵÄÈ·ÈÏ¡£

1) A --> B SYN ±¾·½ÐòÁкÅÊÇX

2) A <-- B ACK ±¾·½ÐòÁкű»È·ÈÏ

3) A <-- B SYN ¶Ô·½ÐòÁкÅÊÇY

4) A --> B ACK È·È϶Է½ÐòÁкÅ

ÉÏÃæµÄµÚ2²½ºÍµÚ3²½¿ÉÒԺϲ¢£¬Õâʱ¿ÉÒÔ³ÉΪ3½×¶Î£¬ËùÒÔÎÒÃÇ¿ÉÒÔ³ÆËüΪÈýÏûÏ¢ÎÕÊÖ¡£Õâ¸ö¹ý³ÌÊDZØÐëµÄ£¬ÒòΪÐòÁкŲ»ºÍÈ«¾ÖʱÖÓ¹ØÁª£¬TCPÒ²¿ÉÒÔÓв»Í¬µÄ»úÖÆÑ¡ÔñISN¡£½ÓÊÕµ½µÚÒ»¸öSYNµÄ½ÓÊÕ·½²»¿ÉÄÜÖªµÀÕâ¸öÊý¾Ý¶ÎÊDz»ÊDZ»ÑÓʱ£¬³ý·ÇËü¼ÇסÁËÔÚÁ¬½ÓÉÏʹÓõÄ×î½üµÄÐòÁкţ¨Õâͨ³£ÊDz»¿ÉÄܵģ©£¬Òò´ËËü±ØÐëÒªÇó·¢ËÍÕßÈ·ÈÏ¡£

ΪÁ˱£Ö¤TCP»ñµÃµÄÈ·ÈÏÊǸղŷ¢Ë͵ĶβúÉúµÄ£¬¶ø²»ÊÇÈÔÈ»ÔÚÍøÂçÖеÄÀÏÊý¾Ý¶Î²úÉúµÄ£¬Òò´ËTCP±ØÐëÔÚMSLʱ¼äÖ®ÄÚ±£³Ö³ÁĬ¡£ÔÚ±¾ÎÄÖУ¬ÎÒÃǼÙÉèMSL=2Сʱ£¬ÕâÊdzöÓÚ¹¤³ÌµÄÐèÒª£¬Èç¹ûÓû§¾õµÃ¿ÉÒÔ£¬Ëû¿ÉÒԸıäMSL¡£Çë×¢ÒâÈç¹ûTCPÖØÐ³õʼ»¯£¬¶øÄÚ´æÖеÄÐòÁкÅÕýÔÚʹÓ㬲»ÐèÒªµÈ´ý£¬µ«±ØÐëÈ·ÈÏʹÓõÄÐòÁкűȵ±Ç°Ê¹ÓõÄÒª´ó¡£

Èç¹ûһ̨Ö÷»úÔÚδ±£ÁôÈκÎÐòÁкŵÄÇé¿öÏÂʧ°Ü£¬ÄÇôËüÓ¦¸ÃÔÚMSLʱ¼äÖ®ÄÚ²»·¢³öÈκÎÊý¾Ý¶Î¡£ÏÂÃæ½«»áÕâÒ»Çé¿ö½øÐÐ˵Ã÷¡£TCPµÄʵÏÖ¿ÉÒÔ²»×ñÊØÕâ¸ö¹æ¶¨£¬µ«ÊÇÕâ»áÔì³ÉÀÏÊý¾Ý±»µ±³ÉÐÂÊý¾Ý½ÓÊÕ£¬¶øÐÂÊý¾Ý±»µ±³ÉÀÏÊý¾Ý¾Ü¾øµÄÇé¿ö¡£

ÿµ±Êý¾Ý¶ÎÐγɲ¢½øÈëÊä³ö¶ÓÁУ¬TCP»áΪËüÖ¸¶¨ÐòÁпռäÖеÄÒ»¸öÖµ¡£TCPÖжิ±¾¼ì²âºÍÐòÁÐËã·¨¶¼ÒÀÀµÓÚÕâ¸öµØÖ·¿Õ¼ä£¬ÔÚ¶Ô·½·¢ËÍ»ò½ÓÊÕ֮ǰ²»»á³¬¹ý2µÄ32´Î·½¸ö°ü´æÔÚÓÚÊä³ö¶ÓÁÐÖС£ËùÓжàÓàµÄÊý¾Ý¶Î¶¼»á±»É¾³ý¡£Èç¹ûûÓÐÕâ¸ö¹æ¶¨£¬»á³öÏÖ¶à¸öÊý¾Ý¶Î±»Ö¸¶¨Í¬Ò»¸öÐòÁкŵÄÇé¿ö£¬»áÔì³É»ìÂÒ¡£Êý¾Ý¶ÎÖÐÐòÁкŵĶàÉÙºÍÊý¾Ý¶ÎÖеÄ×Ö½ÚÊýÒ»Ñù¶à¡£

ÔÚͨ³£Çé¿öÏ£¬TCP±£ÁôÏÂÒ»¸öÒª·¢Ë͵ÄÐòÁкźͻ¹Î´È·ÈϵÄ×îÀϵÄÐòÁкţ¬²»ÒªÔÚûÓÐÈ·ÈϵÄʱºò¾ÍÔÙ´ÎʹÓã¬ÕâÑù»áÓÐЩ·çÏÕ£¬Ò²ÕýÊÇÒòΪÕâÑùµÄÄ¿µÄ£¬ËùÒÔÐòÁпռäºÜ´ó¡£¶ÔÓÚ2MµÄÍøÂ磬Ҫ4.5СʱÀ´ºÄ¾¡ÐòÁпռ䣬ÒòΪһ¸öÊý¾Ý¶Î¿ÉÄܵÄ×î´óÉú´æÊ±¼äÒ²²»¹ýÊ®¼¸·ÖÖ®Ò»Ã룬Õâ¾ÍÁôÏÂÁË×ã¹»µÄ¿Õ¼ä£»¶øÔÚ100MµÄÍøÂçÉÏÐèÒª5.4·ÖÖÓ£¬ËäÈ»ÉÙÁ˵㣬µ«Ò²¿ÉÒÔÁË¡£

Èç¹ûÔÚʵÏÖTCPʱûÓÐΪ±£´æÐòÁкÅÁôÏ¿ռ䣬ÄÇÇå³ý¶àÓàµÄ°ü¿ÉÄܾͲ»ÄÜʵÏÖÁË£¬Òò´ËÍÆ¼öÕâÖÖÀàÐ͵ÄTCPʵÏÖ×îºÃÔÚʧ°ÜºóµÈ´ýMSLʱ¼ä£¬ÕâÑù±£Ö¤¶àÓàµÄ°ü±»É¾³ý¡£ÕâÖÖÇé¿öÓÐʱºòÒ²¿ÉÄÜ»á³öÏÖÔÚ±£ÁôÐòÁкŵÄTCPʵÏÖÖС£Èç¹ûTCPÔÚÑ¡ÔñÒ»¸öÁíÒ»¸öTCPÁ¬½ÓÕýÔÚʹÓõÄÐòÁкÅʱ£¬Õą̂Ö÷»úͻȻʧ°ÜÁË£¬Õâ¾Í²úÉúÁËÎÊÌâ¡£Õâ¸öÎÊÌâµÄʵÖÊÔÚÓÚÖ÷»ú²»ÖªµÀËüʧ°ÜÁ˶à¾Ã£¬Ò²²»ÖªµÀ¶àÓàµÄ¸´±¾ÊDz»ÊÇ»¹ÔÚÍøÂçÖС£

´¦ÀíÕâÖÖÎÊÌâµÄ·½·¨ÊǵȴýMSLʱ¼ä£¬Èç¹û²»ÕâÑù¾ÍҪð×ŶԷ½´íÎó½ÓÊÕÊý¾ÝµÄΣÏÕ£¬ÒªµÈ´ýµÄʱ¼äÒ²¾Í³ÆÎª¡°³ÁĬʱ¼ä¡±¡£ÊµÏÖÕß¿ÉÒÔÈÃÓû§Ñ¡ÔñÊDz»Êǵȴý£¬µ«ÊÇÎÞÂÛÓû§ÈçºÎÒ²²»¼ûµÃ·ÇÒªµÈ´ýMSLʱ¼ä¡£

3.4. ½¨Á¢Ò»¸öÁ¬½Ó

½¨Á¢Á¬½ÓÓ¦ÓõÄÊÇÈýÏûÏ¢ÎÕÊÖ¡£Èç¹ûË«·½Í¬Ê±¶¼·¢ËÍSYNҲûÓйØÏµ£¬Ë«·½»á·¢ÏÖÕâ¸öSYNÖÐûÓÐÈ·ÈÏ£¬ÓÚÊǾÍÖªµÀÁËÕâÖÖÇé¿ö£¬Í¨³£À´Ëµ£¬Ó¦¸Ã·¢ËÍÒ»¸ö"reset"¶ÎÀ´½â¾öÕâÖÖÇé¿ö¡£ÈýÏûÏ¢ÎÕÊÖ¼õÉÙÁËÁ¬½Óʧ°ÜµÄ¿ÉÄÜÐÔ¡£ÏÂÃæ¾ÍÊÇÒ»¸öÀý×Ó£¬ÔÚ¼âÀ¨ºÅÊǵľÍÊÇÊý¾Ý¶ÎÖеÄÄÚÈݺͱê¼Ç¡£ÆäËüµÄ¾Í²»¶à˵ÁË¡£

»ù±¾ÈýÏûϢͬ²½

ÔÚµÚ2ÐУ¬TCP A·¢ËÍSYN³õʼ»¯ÐòÁкţ¬±íʾËüҪʹÓÃÐòÁкÅ100£»µÚ3ÐÐÖУ¬TCP B¸ø³öÈ·ÈÏ£¬²¢ÇÒÆÚ´ý×ÅAµÄ´øÓÐÐòÁкÅ101µÄÊý¾Ý¶Î£»µÚ4ÐУ¬TCP A¸ø³öÈ·ÈÏ£¬¶øÔÚµÚ5ÐУ¬ËüÒ²¸ø³öÈ·ÈÏ£¬²¢·¢ËÍÁËһЩÊý¾Ý£¬×¢ÒâµÚ4ÐеÄÐòÁкÅÓëµÚ5ºÅµÄÒ»Ñù£¬ÒòΪACKÐÅÏ¢²»Õ¼ÓÃÐòÁкſռäÄÚµÄÐòÁкš£Í¬Ê±²úÉúÇëÇóµÄÇé¿öÈçÏÂͼËùʾ£¬Ö»¸´ÔÓÒ»µã¡£

ͬʱÁ¬½Óͬ²½

ʹÓÃÈýÏûÏ¢ÎÕÊÖµÄÖ÷ÒªÔ­ÒòÊÇΪÁË·ÀֹʹÓùýÆÚµÄÊý¾Ý¶Î¡£ÎªÁËÕâ¸öÄ¿µÄ£¬±ØÐëÒýÈëеĿØÖÆÏûÏ¢£¬RESET¡£Èç¹û½ÓÊÕTCP´¦Àí·Çͬ²½×´Ì¬£¬ÔÚ½ÓÊÕµ½RESETºó·µ»Øµ½LISTEN״̬¡£Èç¹ûTCP´¦ÀíÏÂÃæ¼¸ÖÖ״̬ESTABLISHED£¬FIN-WAIT-1£¬FIN-WAIT-2£¬CLOSE-WAIT£¬CLOSING£¬LAST-ACK£¬TIME-WAITʱ£¬·ÅÆúÁ¬½Ó²¢Í¨¹ýÓû§¡£ÎÒÃÇÏÂÃæ¾ÍÏêϸ˵Ã÷ºóÒ»ÖÖÇé¿ö¡£

¹ýÆÚSYNµÄ»Ö¸´

ͨ¹ýÉÏÃæµÄÀý×Ó£¬ÎÒÃÇ¿ÉÒÔ¿´³öTCPÁ¬½ÓÊÇÈçºÎ´Ó¹ýÆÚÊý¾Ý¶ÎµÄ¸ÉÈÅÏ»ָ´µÄ¡£Çë×¢ÒâµÚ4Ðк͵Ú5ÐÐÖеÄRST£¨RESETÐźţ©¡£

°ë¿ªÁ¬½ÓºÍÆäËü·ÇÕý³£×´Ì¬

Èç¹ûÒ»·½ÔÚδͨ¹ýÁíÒ»·½µÄÇé¿öϹرÕÁ¬½Ó£¬»òË«·½ËäȻʧ°Ü¶ø²»Í¬²½µÄÇé¿öÎÒÃdzÆÎª°ë¿ªÁ¬½Ó״̬¡£ÔÚÒ»·½ÊÔͼ·¢ËÍÊý¾ÝʱÁ¬½Ó»á×Ô¶¯RESET¡£È»¶øÕâÖÖÇé¿ö±Ï¾¹ÊôÓÚ²»Õý³£Çé¿ö¡£Ó¦¸Ã×ö³öÏàÓ¦µÄ´¦Àí¡£Èç¹ûA´¦µÄÁ¬½ÓÒѾ­¹Ø±Õ£¬B´¦²¢²»ÖªµÀ¡£µ±BÏ£Íû·¢ËÍÊý¾Ýµ½Aʱ£¬¾Í»áÊÕµ½RESETÐźţ¬±íʾÕâ¸öTCPÁ¬½ÓÓÐÎó£¬ÒªÖÐÖ¹µ±Ç°Á¬½Ó¡£

¼ÙÉèAºÍBÁ½¸ö½ø³ÌÏ໥ͨÐŵÄʱºòAµÄTCP·¢ÉúÁËʧ°Ü£¬AÒÀ¿¿²Ù×÷ϵͳ֧³ÖTCPµÄ´æÔÚ£¬Í¨³£ÕâÖÖÇé¿öÏ»áÓлָ´»úÖÆÆð×÷Ó㬵±TCPÖØÐ»ָ´µÄʱºò£¬A¿ÉÄÜÏ£Íû´Ó»Ö¸´µã¿ªÊ¼¹¤×÷¡£ÕâÑùA¿ÉÄÜ»áÊÔͼOPENÁ¬½Ó£¬È»ºóÔÚÕâ¸öËüÈÏΪ»¹ÊÇ´ò¿ªµÄÁ¬½ÓÉÏ´«ËÍÊý¾Ý£¬ÕâʱA»á´Ó±¾µØ£¨Ò²¾ÍÊÇAµÄ£©TCPÉÏ»ñµÃ´íÎóÏûÏ¢¡°Î´´ò¿ªÁ¬½Ó¡±¡£AµÄTCP½«·¢ËͰüÀ¨SYNµÄÊý¾Ý¶Î¡£ÏÂÃæµÄÀý×Ó½«ÏÔʾÕâÒ»¹ý³Ì£º

¹Ø¿ªÁ¬½Ó¼ì²â

ÉÏÃæÕâ¸öÀý×ÓÖУ¬A·½ÊÕµ½µÄÐÅÏ¢²¢Ã»ÓÐÈ·ÈÏÈκζ«Î÷£¬ÕâʱºòA·¢ÏÖ³öÁËÎÊÌ⣬ÓÚÊÇ·¢ËÍÁËRST¿ØÖÆÐÅÏ¢¡£ÁíÒ»ÖÖÇé¿öÊÇ·¢ÉúÔÚAʧ°Ü£¬¶øB·½ÈÔÈ»ÊÔͼ·¢ËÍÊý¾Ýʱ£¬ÏÂÃæµÄÀý×Ó¿ÉÒÔ±íʾÕâÖÖÇé¿ö£¬Çë×¢ÒâµÚ2ÐÐÖÐA¶ÔB·¢ËÍÀ´µÄÐÅÏ¢²»ÖªËùÔÆ¡£

Ö÷¶¯·½ÒýÆð°ë¿ªÁ¬½Ó¼ì²â

ÔÚÏÂÃæµÄÀý×ÓÖУ¬A·½ºÍB·½½øÐеı»¶¯Á¬½Ó£¬ËüÃǶ¼ÔڵȴýSYNÐÅÏ¢¡£¹ýÆÚµÄ°ü´«Ë͵½B·½Ê¹B»ØÓ¦ÁË£¬¶øÊÕµ½»ØÓ¦µÄAÈ´·¢ÏÖ²»¶ÔÍ·£¬´«ËÍRST¿ØÖÆÐÅÏ¢£¬B·½·µ»Ø±»¶¯LISTEN״̬¡£

¹ýÆÚSYNÔÚÁ½¸ö±»¶¯Ì×½Ó×ÖÉÏ¿ªÊ¼RESET

ÏÖʵÖеÄÇé¿öÌ«¶àÁË£¬ÎÒÃÇÁоÙһЩ²úÉúRST¿ØÖÆÐÅÏ¢µÄ¹æÔòÈçÏ£ºÍ¨³£Çé¿öÏ£¬RSTÔÚÊÕµ½µÄÐÅÏ¢²»ÊÇÆÚ´ýµÄÐÅϢʱ²úÉú¡£Èç¹ûÔÚ²»ÄÜÈ·¶¨Ê±²»ÒªÇáÒ×·¢ËÍRST¿ØÖÆÐÅÏ¢¡£ÏÂÃæÓÐÈýÀàÇé¿ö£º

  1. Èç¹ûÁ¬½ÓÒѾ­²»´æÔÚ£¬¶ø·¢ËÍÀ´µÄÏûÏ¢ÓÖ²»ÊÇRST£¬ÄÇôҪ·µ»ØRST¡£Èç¹ûÏë¾Ü¾ø¶Ô²»´æÔÚµÄÁ¬½Ó½øÐÐSYN£¬¿ÉÒÔʹÓÃÕâÖÖ°ì·¨¡£Èç¹ûµ½´ïµÄÐÅÏ¢ÓÐÒ»¸öACKÓò£¬·µ»ØµÄRSTÐÅÏ¢¿ÉÒÔ´ÓACKÓòÖÐÈ¡µÃÐòÁкţ¬Èç¹ûûÓÐÕâ¸öÓò£¬¾Í°ÑRSTµÄÐòÁкÅÉèÖÃΪ0£¬ACKÓò±»É豸ΪÐòÁкź͵½´ï¶Î³¤¶ÈÖ®ºÍ¡£Á¬½ÓÈÔÈ»´¦ÓÚCLOSE״̬¡£

  2. Èç¹ûÁ¬½Ó´¦ÓÚ·Çͬ²½×´Ì¬£¨LISTEN£¬SYN-SENT£¬SYN-RECEIVED£©£¬¶øÇÒÊÕµ½µÄÈ·ÈÏÊǶÔδ·¢³ö°üµÄÈ·ÈÏ»òÊǽÓÊÕµ½Êý¾Ý¶ÎµÄ°²È«¼¶±ðÓë²»ÄÜÁ¬½ÓÒªÇóµÄÏàÒ»Ò»ÖÂʱ£¬¾Í·¢ËÍRST¡£Èç¹ûSYNδ±»È·ÈÏʱ£¬¶øÇÒÊÕµ½µÄÊý¾Ý¶ÎµÄÓÅÏȼ¶±ÈÒªÇóµÄÓÅÏȼ¶Òª¸ß£¬ÄÇôҪôÌá¸ß±¾µØÓÅÏȼ¶£¨µÃÊÂÏÈÕ÷µÃÓû§ºÍϵͳµÄÐí¿É£©ÒªÃ´·¢ËÍRST£»Èç¹û½ÓÊÕÊý¾Ý¶ÎµÄÓÅÏȼ¶±ÈÒªÇóµÄÓÅÏȼ¶µÍ£¬¾ÍËãÊÇÆ¥ÅäÁË£¬µ±È»Èç¹û¶Ô·½·¢ÏÖÓÅÏȼ¶²»¶ÔÌá¸ßÁËÓÅÏȼ¶£¬ÔÚÏÂÒ»¸ö°üÖÐÌá¸ßÁËÓÅÏȼ¶£¬Õâ¾Í²»ËãÊÇÆ¥ÅäÁË¡£Èç¹ûÁ¬½ÓÒѾ­½øÈëSYN£¬ÄÇô½ÓÊÕµ½Êý¾Ý¶ÎµÄÓÅÏȼ¶±ØÐëºÍ±¾µØÓÅÏȼ¶Ò»Ñù£¬·ñÔò·¢ËÍRST¡£Èç¹ûµ½´ïµÄÐÅÏ¢ÓÐÒ»¸öACKÓò£¬·µ»ØµÄRSTÐÅÏ¢¿ÉÒÔ´ÓACKÓòÖÐÈ¡µÃÐòÁкţ¬Èç¹ûûÓÐÕâ¸öÓò£¬¾Í°ÑRSTµÄÐòÁкÅÉèÖÃΪ0£¬ACKÓò±»É豸ΪÐòÁкź͵½´ï¶Î³¤¶ÈÖ®ºÍ¡£Á¬½ÓÈÔÈ»´¦ÓÚÓëÔ­À´ÏàͬµÄ״̬¡£

  3. Èç¹ûÁ¬½Ó´¦ÓÚͬ²½×´Ì¬£¨ESTABLISHED£¬FIN-WAIT-1£¬FIN-WAIT-2£¬CLOSE-WAIT£¬CLOSING£¬LAST-ACK£¬TIME-WAIT£©£¬Èκ㬳ö½ÓÊÕ´°¿ÚµÄÐòÁкŵÄÊý¾Ý¶Î¶¼²úÉúÈçϽá¹û£º·¢³öÒ»¸ö¿ÕÈ·ÈÏÊý¾Ý¶Î£¬´Ë¶ÎÖаüÀ¨µ±Ç°·¢ËÍÐòÁкţ¬ÁíÍ⻹°üÀ¨Ò»¸öÈ·ÈÏÖ¸³öÏ£Íû½ÓÊÕµÄÏÂÒ»¸öÊý¾Ý¶ÎµÄÐòÁкţ¬Á¬½ÓÈÔÈ»±£´æÔÚÔ­À´µÄ״̬¡£Èç¹ûÒòΪ°²È«¼¶£¬ÓÅÏȼ¶Ö®ÀàµÄÎÊÌ⣬ÄǾͷ¢ËÍRSTÐźÅÈ»ºó½øÈëCLOSED״̬¡£

RST¹ý³Ì

³ýÁËSYN-SENT״̬ÍâµÄÆäËü״̬ÖУ¬ËùÓеÄRSTÊý¾Ý¶Î¿ÉÒÔͨ¹ý¼ì²éSEQÓò²éÃ÷¡£Èç¹ûÐòÁкÅÔÚ½ÓÊÕ´°¿ÚÖУ¬RSTÊÇÓÐЧµÄ¡£µ±Á¬½Ó´¦ÓÚSYN-SENT״̬ʱ£¬Èç¹ûACKÓòÈ·ÈÏSYN£¬ÄÇôRSTÒ²ÊǺϷ¨µÄ¡£

RSTµÄ½ÓÊÕ·½Ê×ÏÈÈ·ÈÏËüµÄºÏ·¨ÐÔ£¬È»ºó½øÐÐ״̬ת»»¡£Èç¹û½ÓÊÕ·½´¦ÓÚLISTEN״̬£¬Ëü¾ÍºöÂÔRST°ü¡£Èç¹û½ÓÊÕ·½´¦ÓÚSYN-RECEIVED״̬£¬¶øÇÒÒÔǰ´¦ÓÚLISTEN״̬£¬½ÓÊÕ·½·µ»ØLISTEN״̬£¬·ñÔò½ÓÊÕ·½¹Ø±ÕÁ¬½Ó½øÈëCLOSED״̬¡£µ±½ÓÊÕ·½´¦ÓÚÆäËü״̬ʱ£¬Ö±½Ó¹Ø±ÕÁ¬½Ó»Øµ½CLOSED״̬¡£

¡¡

3.5. ¹Ø±ÕÁ¬½Ó

CLOSEÊÇÒ»¸ö²Ù×÷£¬ËüµÄÒâ˼¾ÍÊÇ¡°±¾·½ÒѾ­ÓÐÊý¾Ý·¢ËÍ¡±¡£ÓÉÓÚÊÇȫ˫¹¤µÄ£¬ËùÒÔ»áÔì³ÉһЩÂé·³£¬ÒòΪ½ÓÊÕ·½¶ÔÓÚ´¦Àí½ÓÊÕ·½µÄÁ¬½ÓÓеãÂé·³¡£ÎÒÃÇÒÔÒ»ÖÖ¼òµ¥µÄ·½Ê½¶Ô´ýCLOSE£¬·¢ËÍCLOSEµÄÒ»·½ÔÚ½ÓÊÕµ½¶Ô·½µÄCLOSED֮ǰ£¬»¹Òª¼ÌÐø½ÓÊÕÊý¾Ý¡£Òò´Ë³ÌÐò¿ÉÒÔÔÚÒ»¸öCLOSEÖ®ºó³õʼ»¯¼¸¸öSEND£¬È»ºó¿ªÊ¼RECEIVE£¬Ö±µ½½ÓÊÕµ½¶Ô·½µÄCLOSED¶øRECEIVEʧ°ÜΪֹ¡£ÎÒÃǼÙÉèTCP¿ÉÒÔ֪ͨÓû§Á¬½Ó¹Ø±Õ£¬¼´Ê¹ÈÔÔÚRECEIVEÒ²¿ÉÒÔ£¬ÕâÑùÓû§¾Í¿ÉÒÔÕý³£¹Ø±ÕÁË¡£ÕâÑù£¬TCP¿ÉÒÔÔÚÁ¬½Ó¹Ø±Õǰ¿É¿¿µØ·¢ËÍÊý¾Ý¡£ÏÂÃæÁоÙÁËÈýÖÖ»ù±¾Çé¿ö£º

Çé¿ö1£º±¾µØÓû§¹Ø±Õ

ÕâÖÖÇé¿öÏ£¬¿ÉÒÔ½¨Á¢Ò»¸öFIN¶Î·ÅÈë·¢ËͶÓÁС£TCP²»ÔÙ½ÓÊÕÓû§µÄSENDÖ¸ÁTCP½øÈëFIN-WAIT-1״̬¡£RECEIVEÔÚÕâÖÖ״̬ÏÂÊÇÔÊÐíµÄ¡£ËùÓÐÊý¾Ý¶ÎºÍFINÔÚδ½ÓÊÕµ½È·ÈÏÒÔǰ»áÒ»Ö±·¢ËÍ¡£µ±ÁíÒ»¸öTCPÈ·ÈÏFIN£¬²¢·¢ËÍ×Ô¼ºµÄFINºó£¬±¾µØµÄTCP¿ÉÒÔÈ·ÈÏÕâ¸öFINÁË¡£Çë×¢Ò⣬TCPÒ²¿ÉÒÔÔÚÈ·ÈÏFINʱ²»·µ»Ø×Ô¼ºµÄFIN£¬Ö±µ½Óû§¹Ø±ÕÁ¬½ÓʱÔÙ·µ»Ø×Ô¼ºµÄFIN¡£

Çé¿ö2£ºTCP´ÓÍøÂçÉϽÓÊÕµ½Ò»¸öFIN

Èç¹ûÔÚûÓÐÇëÇóµÄÇé¿öÏÂÊÕµ½FIN£¬TCP¿ÉÒÔ·µ»ØACK²¢Í¨ÖªÓû§Á¬½ÓÒѾ­¹Ø±Õ¡£Óû§¿ÉÒÔÒÔCLOSEÏìÓ¦£¬TCPÔÚ·¢ËÍÍêʣϵÄÊý¾Ýºó·¢ËÍ×Ô¼ºµÄFIN£¬È»ºóTCPµÈ´ý¶ÔÕâ¸öFINµÄÈ·ÈÏ£¬ÔÚ½ÓÊÕµ½ºó£¬Ëü¹Ø±ÕÁ¬½Ó¡£Èç¹ûÈ·Èϳ¬Ê±£¬¿ÉÒԹرÕÁ¬½Ó²¢Í¨ÖªÓû§ÍêÊ¡£

Çé¿ö3£ºË«·½Í¬Ê±¹Ø±Õ

Ë«·½Í¬Ê±¹Ø±Õ»áµ¼Ö½»»»FIN¡£Ë«·½»áÔÚÊÕµ½¶Ô×Ô¼ºFINµÄÈ·ÈÏºó¹Ø±ÕÁ¬½Ó¡£

ͨ³£µÄ¹Ø±Õ˳Ðò
ͬʱ¹Ø±Õ

¡¡

3.6. ÓÅÏȺͰ²È«

TCPµÄ²Ù×÷±ØÐëÔÚÁ½¸öÓÅÏȼ¶ÏàͬµÄ¶Ë¿Ú¼ä½øÐС£TCPʹÓõÄÓÅÏȺͰ²È«²ÎÊýÔÚIPЭÒéÖж¨Òå¡£ÎÒÃÇÕâÀïËù˵µÄ°²È«/¼ä¸ô¾ÍÊÇÖ¸µÄIPÖж¨ÒåµÄÓÅÏÈ£¬Óû§×éºÍ´¦Àí¹æ¶¨¡£Èç¹û²»·ûºÏÔò·¢ËÍRST¡£ÕâЩÄÚÈÝÇë´ó¼Ò¿´ÉÏÒ»½ÚÖеÄÐðÊö¡£TCPÔÚ²Ù×÷¹ý³ÌÖÐÒ²»á¼ì²é½ÓÊÕÊý¾Ý¶ÎµÄÓÅÏȼ¶£¬»¹¿ÉÒÔÔÚ²Ù×÷ÖÐÌá¸ßÓÅÏȼ¶¡£ËäÈ»ÔËÐÐÔÚÎÞ°²È«»·¾³ÖУ¬Ö÷»úÒ²±ØÐëÄܹ»´¦Àí°²È«²ÎÊý¡£

3.7. Êý¾ÝͨÐÅ

½¨Á¢ÁËÁ¬½ÓÒÔºó¾ÍÊÇ´«ËÍÊý¾ÝÁË£¬TCPͨ¹ýÖØÐ´«Ëͱ£Ö¤Ã¿¸öÊý¾Ý¶Îµ½´ï¶Ô·½£¬ÒòΪÓÐÁËÖØÐ´«ËÍ£¬ËùÒÔ¶Ô·½¿ÉÄܽÓÊÕµ½Á½¸öÏàͬµÄ°ü£¬ÄǾͱØÐë¸ù¾ÝÄÚ²¿µÄÐòÁкÅÅжÏÄĸöÊý¾Ý¶ÎÊÇ¿ÉÒÔ½ÓÊյġ£·¢ËÍ·½Í¨¹ýʹÓÃSND.NXT¸ú×ÙÏÂÒ»¸öÒª·¢Ë͵ÄÊý¾Ý¶Î£¬¶ø½ÓÊÕ·½Ôò¸ú×ÙRCV.NXTÀ´ÖªµÀÏÂÒ»¸öÒª½ÓÊÕµÄÊý¾Ý¶Î¡£·¢ËÍ·½Òª»¹Î´È·ÈϵÄ×îÀϵÄÐòÁкű£´æÓÚSND.UNA¡£

µ±·¢ËÍ·½ÐγÉÊý¾Ý¶Î²¢·¢ËÍËüºóSND.NXTÔö´ó£»µ±½ÓÊÕ·½½ÓÊÕµ½Êý¾Ý¶ÎºóRCV.NXTÔö´ó²¢·¢ËÍÈ·ÈÏ£»µ±·¢ËÍ·½½ÓÊÕµ½È·ÈϺóSND.UNAÔö´ó¡£ËüÃÇÈýÕßÔÚ²»Í¬µÄʱ¼äÔö´ó£¬ÕâÊÇÒòΪ´«ËÍʱÑÓÔì³ÉµÄ¡£¶øÔö´ó¶àÉÙÔòÓÉÊý¾Ý¶ÎÖÐÊý¾ÝµÄ´óС¾ö¶¨¡£×¢Ò⣺Á¬½Ó½øÈëESTABLISHED״̬ºó£¬ËùÓеĶαØÐë°üÀ¨µ±Ç°µÄÈ·ÈÏÐÅÏ¢¡£¶øCLOSEÓû§²Ù×÷µÄÐÔÖÊÀàÐÍÓÚÍÆ²Ù×÷£¬ÕâºÍÔÚ½ÓÊÕµ½µÄÊý¾Ý¶ÎÖеÄFIN±ê¼ÇÒ»Ñù¡£

ÖØ´«³¬Ê±

ÒòÎªÍøÂçÖÐÓв»ÀàÐ͵ÄÍøÂ磬¶øÊ¹ÓÃTCPµÄ·¶Î§Óֺܹ㣬Òò´ËÖØ´«³¬Ê±±ØÐ붯̬¾ö¶¨¡£ÏÂÃæ¸ø³öÒ»¸öÀý×Ó£¬Í¨¹ýÀý×Ó¿ÉÒÔ¿´³öÈ·¶¨ÖØ´«³¬Ê±µÄ¹ý³Ì¡£ÏÂÃæÓÐÁ½¸ö±äÁ¿ËµÃ÷ʱÑÓµÄÎÊÌ⣬һ¸öÊÇ»·Â·Ê±¼ä£¨RTT£©£¬ËüÊÇÓÉÒ»¸öÐòÁÐÂëµÃµ½µÄ£¬Õâ¸öÐòÁÐÂëÔÚ·¢ËÍʱ¸ø³ö£¬ÔÚ½ÓÊÕµ½È·ÈÏʱ±»¸²¸Ç£»ÁíÒ»¸öƽ»¬»·Â·Ê±¼ä£¨SRTT£©£º

SRTT = ( ALPHA * SRTT ) + ((1-ALPHA) * RTT)

ͨ¹ýÉÏÃæµÄʽ×Ó£¬¿ÉÒԵõ½ÖØ´«³¬Ê±£¨RTO£©£º

RTO = min[UBOUND,max[LBOUND,(BETA*SRTT)]]

ÆäÖÐUBOUNDÊdz¬Ê±µÄÉϽ磨Èç1·ÖÖÓ£©£¬LBOUNDÊdz¬Ê±µÄϽ磨Èç1ÃëÖÓ£©£¬ALPHAÊÇÆ½»¬Òò×Ó£¨Èç0.8µ½0.9£©£¬BETAÊÇÑÓʱ±äÁ¿£¨Èç1.3µ½2.0£©¡£

´«Ëͽô¼±ÏûÏ¢

TCPµÄ½ô¼±»úÖÆÊÇÔÊÐí·¢ËÍÕßʹ½ÓÊÕÕß½ÓÊÕһЩ½ô¼±ÏûÏ¢£¬²¢ÈýÓÊÕ·½ÔÚ½ÓÊÕµ½ÕâÒ»ÏûÏ¢ºóÁ¢¿Ì֪ͨÓû§¡£ÕâÖÖ»úÖÆÊÇÔÚÊý¾ÝÁ÷ÊǼÓÈëÒ»¸öµã£¬Ö¸³öÕâÊǽô¼±Êý¾ÝµÄ½áÊøµã£¬µ±½ÓÊÕ·½Òª½ÓÊÕµ½Õâ¸öµã֮ǰ£¬Ëü»á֪ͨÓû§½øÈë½ô¼±×´Ì¬£¬ÔÚ½ÓÊÕµ½Õâ¸öµãµÄÊý¾Ýºó£¬Ëü»á֪ͨÓû§½øÈëͨ³£×´Ì¬¡£Èç¹ûÕâ¸ö½ô¼±µãÔÚÓû§½øÈë½ô¼±×´Ì¬Ê±¸üУ¬Õâ¸ö¸üбØÐë¶ÔÓû§Í¸Ã÷¡£

Ó¦ÓÃÒ»¸ö½ô¼±ÓòµÄ·½·¨¿ÉÒÔ´ïµ½ÉÏÊöÄ¿µÄ£¬¶øURG¿ØÖƱê¼ÇÔòÖ¸Ã÷½ô¼±ÓòÊÇ·ñ±»Ê¹Ó㬶øÇÒÔÚÊý¾Ý¶ÎÖбØÐë¼ÓÈëָʾ½ô¼±µãµÄÐòÁкţ¬Èç¹ûûÓÐÕâ¸ö±ê¼ÇÔò˵Ã÷ûÓнô¼±µã¡£Èç¹ûÐèÒª·¢Ëͽô¼±Êý¾Ý£¬·¢ËÍ·½±ØÐëÆðÂë·¢ËÍÒ»¸ö×Ö½Ú¡£

¹ÜÀí´°¿Ú

Èç¹ûÎÒÃÇѧϰ¹ýÍøÂç»ù´¡£¬ÎÒÃÇÒ»¶¨ÖªµÀÓÐÒ»¸ö´°¿ÚЭÒ飬TCPÖÐÿ¸öÊý¾Ý¶Î¶¼°üÀ¨ÏÂÒ»¸öÏ£Íû½ÓÊÕµ½µÄÐòÁкš£´°¿Ú±È½Ï´ó»áÌá¸ß´«ËÍËÙ¶È£¬Èç¹û´«Ë͹ýÀ´µÄÊý¾Ý³¬¹ýµÄ´°¿Ú´óС£¬Êý¾Ý»á±»Åׯú¡£ÕâÑù»á¼ÓÖØÍøÂ縺µ£¡£Èç¹ûTCP¿ªÊ¼Ê±µÄ½ÓÊÕ´°¿Ú±È½Ï´ó£¬¶øµ½×îºóÕâ¸ö´°¿ÚËõСÁË£¬ÕâÖÖ×÷·¨¿É²»ÊǺð취¡£¶ÔÓÚ½¡×³µÄTCPÀ´Ëµ£¬×îºÃ²»Òª×Ô¼ºËõС´°¿Ú£¬µ«Òª×öҪ׼±¸¶Ô·½µÄTCPËõС´°¿Ú¡£

¼´Ê¹·¢ËÍ´°¿Ú´óСΪÁ㣬·¢ËÍTCPÒ²±ØÐë×öºÃ×¼±¸½ÓÊÕÊý¾Ý²¢ÇÒ¿ÉÒÔ·¢ËÍÖÁÉÙһλÐÂÊý¾Ý¡£¼´Ê¹½ÓÊÕ´°¿ÚΪÁ㣬·¢ËÍ·½Ò²»áÖØ·¢£¬ÖØ·¢¼äµÄ¼ä¸ôʱ¼äÒ»°ãΪÁ½·ÖÖÓ¡£µ±½ÓÊÕTCPµÄ½ÓÊÕ´°¿ÚΪÁãʱ£¬ÔÚËü½ÓÊÕµ½Êý¾Ýʱ£¬ËüÒÀÈ»»á·µ»ØÈ·ÈÏ£¬ÆäÖаüÀ¨Ï£ÍûÊÕµ½µÄÐòÁÐÂëºÍµ±Ç°´°¿Ú´óС£¨ÎªÁ㣩¡£

·¢ËÍTCP½«Êý¾Ý´ò³É·ûºÏµ±Ç°´óСµÄ°ü£¬µ«ÔÚÖØÐ´«ËͶÓÁÐÖпÉÄÜÖØÐ´ò°ü¡£ÕâÖÖÖØÐ´ò°ü²¢²»ÊDZØÐëµÄ£¬µ«ÊÇ»áºÜÓкô¦¡£Èç¹ûÒ»¸öÁ¬½ÓÖ»Óе¥ÏòÊý¾ÝÁ÷£¬´°¿ÚÐÅÏ¢¿ÉÒÔÔÚÈ·ÈÏÐÅÏ¢Öеõ½£¬ÕâЩµÄÐòÁкŶ¼ÊÇÒ»¸ö£¬Òò´Ëû·¨Çø±ð³öË­ÏÈË­ºó¡£µ«Õâ²¢²»ÊÇÒ»¸öÑÏÖØµÄÎÊÌâ¡£¸Ä½øµÄ·½·¨ÊÇÔÚÊý¾Ý¶ÎÖмÓÈë×îÐÂµÄÆÚ´ýÐòÁкţ¬ÕâÑù¾Í¿ÉÒÔÇø±ð³öË­ÏÈË­ºóÁË¡£´°¿Ú¹ÜÀí¶Ô´«ËÍЧÂÊÓкܴóÓ°Ï죬ÏÂÃæÊÇһЩ½¨Ò飺

µ±Ê¹ÓøüÉٵĴóÊý¾Ý¶øÒª»ñµÃ¸ßЧÂÊʱ·ÖÅä·Ç³£Ð¡µÄ´°¿ÚʹÊý¾ÝÒÔÐí¶àС¶Î´«ËÍ¡£¶ÔÓÚ·¢ËÍÕßÀ´ËµÒª±ÜÃâÔÚ·¢ËÍСÊý¾Ý¶Îʱ±ØÐëµÈµ½´°¿Ú´óµ½Ò»¶¨³Ì¶ÈÔÙ½øÐС£È·Èϲ»Òª±»ÑÓʱ¡£½ÓÊÕ´°¿ÚÈç¹û´óСΪÁãʱ£¬Òª´«Ë͵ÄÊý¾Ý¶Î¿ÉÄܱ»·Ö³ÉÔ½À´Ô½Ð¡µÄ¶Î¡£Èç¹û·¢ËÍTCP½ö½ö·¢ËÍ´°¿ÚÔÊÐí´óСµÄÊý¾Ý¶Î£¬¿ÉÄÜÕâЩÊý¾Ý¶Î»á±»»»³É±ÈÕâ¸ö¶Î´ó£¨»òÕßС£©µÄÊý¾Ý¶Î·¢ËÍ¡£½ÓÊÕ·½Ê±²»Ê±µØ½øÐд°¿Ú´óСµ÷Õû»áʹ´óÊý¾Ý¶Î·ÖΪС¶Î£¬¶ø²»³É¶Ô¡£¾¡Á¿°ÑСµÄ´°¿ÚºÏ³É´óµÄ´°¿Ú¡£

3.8. ½Ó¿Ú

ÍøÂçЭÒéµÄ·Ö²ã½á¹¹¾ö¶¨ÁËTCPÓÐÁ½¸ö½Ó¿Ú£¬ÏòÉϵÄÓû§½Ó¿ÚºÍÏÂÃæµÄ½Ó¿Ú¡£¶Ôϲã½ÓÊÕ¿ÚµÄÃèÊö²»ÊǺÜÇå³þ£¬Õâ¸ö¹¤×÷ÓÉϲãЭÒéÀ´ÃèÊö£¬µ«ÊÇÕâÀïÎÒÃÇÒ²ÃèÊöһЩTCPҪʹÓÃÒªµÄ²ÎÊý¡£

Óû§/TCP½Ó¿Ú

ÏÂÃæÃèÊöһЩTCPÃüÁÕâЩÃüÁîÊǹ¦ÄÜÐԵģ¬Òò¸÷ϵͳ²»Í¬¾ßÌåʵÏÖ¿ÉÄܲ»Í¬¡£×îºó£¬ÎÒÃDZØÐëÇå³þ£¬²»Í¬µÄTCPʵÏÖ¿ÉÄÜÓв»Í¬µÄÓû§½Ó¿Ú£¬µ«ÊÇÓÐһЩ¹¦ÄÜÊÇ×î»ù±¾µÄ£¬±¾½ÚÃèÊöµÄ¹¦ÄܱãÊÇÕâ¸ö»ù±¾¹¦Äܼ¯¡£

TCPÓû§ÃüÁî

ÏÂÃæ¶¨ÒåµÄÃüÁîÓëÆäËü¸ß¼¶ÓïÑÔÖж¨ÒåµÄ·½·¨²î²»¶à£¬µ«ÓÐЩÏݾ®²Ù×÷ÐèÒªµÄ£¬ÈçSVC£¬UUO£¬EMT¡£ÏÂÃæÖ»ÊÇÒ»¸ö¹¦ÄܽéÉÜ£¬¾ßÌåʵÏÖ¿ÉÄÜ´óΪ²»Í¬£¬ÈçÓÐЩϵͳ»á°ÑÕâÀïµÄ¶àÌõÃüÁî½áºÏ³ÉÒ»ÌõÃüÁîʹÓá£ÎªÁËʵÏÖͨÐŹ¦ÄÜ£¬TCP²»ÄÜÖ»»á½ÓÊÕÃüÁ¶øÇÒÄܹ»·µ»ØÏûÏ¢¸øËü·þÎñµÄ½ø³Ì£¬ÕâЩÏûÏ¢°üÀ¨£º

(a) ¹ØÓÚÁ¬½ÓµÄͨ³£ÏûÏ¢£¬ÈçÖжϣ¬Ô¶³Ì¹Ø±ÕµÈµÈ£»

(b) ¶ÔÓû§ÃüÁî×ö³öÓ¦´ð£¬Êdzɹ¦»¹ÊÇʧ°Ü¡£

Open

¸ñʽ£ºOPEN (local port, foreign socket, active/passive [, timeout] [, precedence] [, security/compartment] [, options]) -> local connection name

ÎÒÃǼٶ¨±¾µØTCP×¢Òâµ½ËüËù·þÎñµÄ½ø³Ì±ê¼Ç£¬¶øÇÒ½«¼ì²é½ø³ÌµÄÈÏÖ¤¡£ÒòʵÏÖ²»Í¬£¬±¾µØÍøÂçºÍÔ´µØÖ·µÄTCPÈÏÖ¤¿ÉÄÜÓÉTCP½øÐÐÒ²¿ÉÒÔÓÉϲãЭÒé½øÐУ¨ÈçIPЭÒ飩¡£ÕâЩ¿¼ÂÇÖ÷ÒªÊÇ»ùÓÚ°²È«ÐԵĿ¼ÂÇ¡£

Èç¹ûactive/passive±ê¼ÇÉèÖÃΪpassive£¬TCP»á¼ì²âµ½´ïµÄÁ¬½ÓÇëÇó£¬ËüÊDZ»¶¯µÄ£¬±»¶¯µÄÁ¬½Ó¿ÉÒÔÓÐÒ»¸öÍêȫָ¶¨µÄÍâÌ×½Ó×ÖÓÃÓڵȴýÌØ¶¨µÄÁ¬½Ó»òδָ¶¨µÄÍâÌ×½Ó×ÖÀ´µÈ´ýÈκκô½Ð¡£Ò»¸öÍêÈ«¶¨ÒåµÄ±»¶¯ºô½Ð¿ÉÒÔͨ¹ýÖ´ÐÐһϵÁеÄSENDÃüÁî¶ø±äΪÖ÷¶¯µÄ¡£´´½¨Ò»¸ö´«Êä¿ØÖÆ¿é£¨TCB£©£¬ÆäÖÐÒ»²¿·Ö²ÎÊýÊÇÓÉOPENÃüÁî²ÎÊý¶øÀ´¡£ÔÚÖ÷¶¯OPENʱ£¬TCP»áÁ¢¿Ì¿ªÊ¼Í¬²½Á¬½Ó¡£Èç¹û¸ø³ö²ÎÊýtimeout£¬»áÔÊÐíºô½ÐÕßÓ¦ÓÃÓÚËùÓÐTCPÊý¾Ý¡£Èç¹ûÔÚtimeout¹æ¶¨µÄʱ¼äÄÚ»¹Î´°ÑÊý¾ÝË͵½Ä¿µÄµØ£¬¾Í¹Ø±ÕÁ¬½Ó£¬Ò»°ãµÄĬÈÏÖµÊÇ5·ÖÖÓ¡£

²ÎÊýprecedence»òsecurity/compartmentÊÇÓÃÓڹ淶Óû§¶ÔijһÁ¬½ÓµÄ°²È«ÐԵģ¬Èç¹ûûÓÐÖ¸¶¨ÔòʹÓÃĬÈÏÖµ¡£TCP»áÆ¥ÅäÕâÁ½¸ö²ÎÊý£¬Ö»ÓÐÔÚsecurity/compartmentÒ»Ö¶øÇÒ½ÓÊÕµ½µÄprecedenceСÓÚµÈÓÚÒªÇóµÄprecedenceʱ²Å»á´ò¿ªÁ¬½Ó¡£µ±Á¬½ÓµÄprecedence´óÓÚÒªÇóµÄֵʱ£¬´Ó½ÓÊÕµ½µÄÊý¾Ý¶ÎÖÐÈ¡µÃÕâÒ»Öµ£¬²¢ÔÚÁ¬½ÓÖÐһֱʹÓÃÕâ¸ö±È½Ï´óµÄÖµ¡£¾ßÌåʵÏÖʱ¿ÉÒÔ¸øÓû§È¨Á¦¿ØÖÆprecedenceµÄ¾ö¶¨¹ý³Ì¡£ÀýÈ磬Óû§¿ÉÒÔÒªÇóprecedence±ØÐ밲ȫһÖ£¬»òÔÚÌáÉýprecedenceʱҪ֪ͨÓû§¡£

±¾µØÁ¬½ÓÃû£¨local connection name£©ÓÉTCP·µ»ØÓû§£¬Ëü¿ÉÒÔ´úÌæ<±¾µØÌ×½Ó×Ö£¬ÍâÌ×½Ó×Ö>±ê¼ÇÒ»¸öÁ¬½Ó¡£

Send

¸ñʽ£ºSEND (local connection name, buffer address, byte count, PUSH flag, URGENT flag [,timeout])

Õâ¸öÃüÁîʹָ¶¨»º³åÇøÄÚµÄÊý¾Ý·¢ÏòÖ¸¶¨Á¬½Ó£¬Èç¹ûÁ¬½Óδ´ò¿ªÔò·µ»ØÒ»¸ö´íÎó£¬Ò»Ð©ÊµÏÖÖпÉÄÜÔÚ´ò¿ªÁ¬½ÓÒÔǰµ÷ÓÃSEND£¬ÓÉSEND×Ô¶¯´ò¿ªÁ¬½Ó¡£Èç¹ûÉèÖÃÁËPUSH±ê¼Ç£¬Êý¾Ý±ØÐëÁ¢¿Ì´«Ë͸ø½ÓÊÕÕߣ¬¶øÇÒPUSHλÔÚ»º³åÇøÖеÄ×îºóÒ»¸ö¶ÎÊDZØÐëÉèÖá£Èç¹ûûÓÐÉèÖ㬴ËÊý¾Ý¶Î¾Í»áÒòΪЧÂʵĿ¼ÂǶøºÍÏÂÒ»¸öSENDÃüÁî´«Ë͵ÄÊý¾ÝÒ»Æð´«ËÍ¡£Èç¹ûÉèÖÃÁËURGENT±ê¼Ç£¬ÄǾͱØÐëÏóÉÏÃæËùÊöµÄÒ»Ñù½ô¼±´¦Àí¡£´«ËÍ·½ÉèÖõÄURGENTÊýÄ¿²»Ò»¶¨·ÇÒªµÈÓÚ֪ͨ½ÓÊÕ·½Óû§µÄ´ÎÊý¡£

Èç¹ûÔÚOPENÖÐûÓÐÖ¸¶¨ÍâÌ×½Ó×Ö£¬ÄÇ»º³åÇøÊý¾Ý»á±»·¢Ë͵½ÒþʽÍâÌ×½Ó×Ö¡£Î´Ê¹ÓÃÍâÌ×½Ó×Ö´ò¿ªÁ¬½ÓµÄÓû§ÈÔÈ»¿ÉÒÔSEND£¬¶ø²»ÓÃÖªµÀÍâÌ×½Ó×ÖµØÖ·¡£µ«ÊÇ£¬Èç¹ûÔÚÖ¸¶¨ÍâÌ×½Ó×Öǰ½øÐÐSEND£¬Ôò»á³ö´í¡£Óû§¿ÉÒÔʹÓÃSTATUESÈ·¶¨Á¬½Ó״̬¡£Èç¹ûÖ¸¶¨ÁËtimeout£¬¶ÔÓÚµ±Ç°Á¬½ÓµÄµ±Ç°Óû§timeout»á¸ü¸ÄΪеÄÁ¬½Ó¡£

×î¼òµ¥µÄʵÏÖ·½·¨¾ÍÊÇÔÚûÓаÑÊý¾Ý·¢ËÍÍê±ÏÒÔǰ£¬SEND²»°Ñ¿ØÖÆÈ¨½»¸ø·¢Ëͽø³Ì£¬µ«ÊÇÕâÑù¿ÉÄÜ»áÔì³ÉËÀËø£¨ÀýÈ磬˫·½¶¼ÊÔͼSEND£¬¶ø²»×¼±¸RECEIVE£©£¬Ð§ÂÊÒ²²»ºÃ¡£ºÃµÄʵÏÖ·½·¨ÊÇÔÚ·¢ËÍÒ»¶ÎÊý¾Ýºó·µ»Ø¿ØÖÆÈ¨¸ø·¢Ëͽø³Ì£¬µ±È»Èç¹ûÄܹ»¶à¸öSENDͬʱ·¢ËÍ£¬ÄǸüºÃ²»¹ýÁË¡£Óжà¸öSENDÐèÒª·þÎñʱһ°ã²ÉÈ¡ÏÈÀ´ÏÈ·þÎñ¡£

¶ÔÓÚ±¾µØÀ´Ëµ£¬ÎÒÃÇÏÖÔÚ¼Ù¶¨µÄÊÇSENDÔÚ·¢ËÍÊý¾Ýºó»á²úÉúÀàËÆÖжϵĶ«Î÷¸æËß·¢Ëͽø³ÌÊý¾Ý·¢Ë͵ÄÇé¿ö£»µ±È»SENDÒ²¿ÉÒÔÔÚ·¢ËÍÍêºóÁ¢¿Ì¸æÖª½øÐÐÊý¾Ý·¢Ë͵ÄÇé¿ö¡£ÎÒÃÇ¿ÉÒÔÀÖ¹ÛµØÈÏΪ·¢ËÍÊdzɹ¦µÄ£¬Èç¹û·¢ËÍʧ°Ü£¬Á¬½Ó»áÒòΪ³¬Ê±¶ø¹Ø±Õ¡£ÔÚʵÏÖÖУ¬¼´Ê¹ÊÇͬ²½·µ»ØÇé¿ö£¬Ò²ÐèҪһЩÒì²½Ðźţ¬µ«ÕâЩÒì²½ÐźÅÊÇÓÃÓÚ´¦ÀíÁ¬½ÓµÄ£¬¶ø²»ÊÇÓÃÓÚ´¦ÀíÊý¾Ý·¢Ë͵ġ£¼ÈÈ»ÔÊÐí¶à¸öSENDͬʱ¹¤×÷£¬Òò´ËÓбØÒªÇø±ð·µ»ØµÄÐÅÏ¢ÊÇÄÄÒ»¸öSENDµÄ¡£¾ßÌåµÄÇé¿öÏÂÃæ»áÌÖÂÛµ½¡£

Receive

¸ñʽ£º RECEIVE (local connection name, buffer address, byte count) -> byte count, urgent flag, push flag

´ËÃüÁî·ÖÅäÒ»¸ö½ÓÊÕ»º³åÇø¸øÖ¸¶¨µÄÁ¬½Ó¡£Èç¹ûÏÂÃæ²»ÊÇÒ»¸öOPENÃüÁî»òÕߴ˵÷ÓýøÐÐδ±»ÊÚȨʹÓôËÁ¬½Ó·µ»Ø´íÎó¡£×î¼òµ¥µÄʵÏÖ·½·¨ÊÇÔÚ»º³åÇøÃ»ÓÐÌî³äÍêÒÔǰ²»·µ»Ø¿ØÖÆÈ¨£¬µ«ÕâÑù¿ÉÄÜ»áÔì³ÉÑÏÖØµÄËÀËø¡£¸ü¸´ÔÓµÄʵÏÖ·½·¨ÔÊÐíͬʱ´æÔÚ¶à¸öRECEIVE£¬ÕâÑù»áÌá¸ßЧÂÊ¡£ÕâÑùÊÇÔÚ¿ØÖƸ´ÔÓµÄÇé¿öÏÂÈ¡µÃÁ˸ßЧÂÊ¡£

Èç¹ûÔÚPUSH֮ǰµÄÊý¾ÝÒѾ­ÌîÂú»º³åÇø£¬ÄÇô¶ÔÓÚRECEIVEµÄÏìÓ¦ÖоͲ»ÓÃÉèÖÃPUSHλÁË¡£»º³åÇø»áÈÝÄɾ¡¿ÉÄܶàµÄÊý¾Ý£¬Èç¹ûÔÚ»º³åÇøÌî³äÂúÒÔǰ¿´µ½PUSH룬½«·µ»Ø»º³åÇøÖеÄÊý¾Ý²¢ÉèÖÃPUSH¡£ÔÚ´¦Àí½ô¼±×´Ì¬Ê±£¬Èç¹ûÓÐURGENT±ê¼Ç£¬»¹Óнô¼±Êý¾Ý£»Èç¹ûûÓÐURGENT±ê¼ÇÁË£¬¾Í·µ»ØËùÓнô¼±Êý¾Ý£¬Óû§Ò²À뿪½ô¼±×´Ì¬¡£Çë×¢Ò⣬ÔÚ½ô¼±Ö¸ÕëÖ¸ÏòµÄµãÒÔºóµÄÄÇЩÊý¾Ý²»Äܺͽô¼±Êý¾ÝÒ»Æð·µ»Ø£¬¼´Ê¹ËüÃÇÔÚͬһ¸ö»º³åÇøÄÚ£¬µ±È»£¬Èç¹ûÓû§Ö¸¶¨ÒªÕâô×öÀýÍâ¡£

ΪÁËÇø±ð¶à¸öRECEIVE²¢±£Ö¤»º³åÇø²»±»³äÂú£¬·µ»ØµÄÊý¾ÝÖÐÒ²Òª°üÀ¨»º³åÇøÖ¸ÕëºÍÒ»¸ö¼ÆÊýÆ÷Ö¸Ã÷ÏÖÔÚ½ÓÊÕÁ˶àÉÙÊý¾Ý¡£RECEIVE¿ÉÒÔÓÐ×Ô¼º×¨ÓÃÁË»º³åÇø£¬Ò²¿ÉÒÔºÍÓû§¹²ÏíÒ»¸ö»º³åÇø¡£

Close

¸ñʽ£º CLOSE (±¾µØÁ¬½ÓÃû)

´ËÃüÁî¹Ø±ÕÁ¬½Ó£¬Èç¹ûÁ¬½Óδ´ò¿ª£¬»òδÊÚȨ¿ÉÒԹرÕÁ¬½Ó·µ»Ø´íÎó¡£ÔڹرյÄʱºòÓ¦¸Ã×¢ÒâÕý³£¹Ø±Õ£¬ÈÃËùÓеķ¢ËͶ¼·¢ËÍÍêÊý¾Ý£¬Ò²¿ÉÒÔÈçÉÏËù˵ÔÚCLOSEºóÃæ¼ÓÉϼ¸¸öSEND£¬Õâ¾ÍÒªÇóÓû§ÔÚÊÕµ½CLOSEºóÈÔȻҪ½øÐнÓÊÕ¡£Òò´Ë£¬CLOSEÒâÖ¸¡°ÎÒûÓиü¶àµÄÊý¾ÝÒª·¢ÁË¡±£¬²¢²»´ú±í¡°ÎÒ²»ÔÙ·¢ËÍÈκÎÊý¾ÝÁË¡±¡£¹Ø±Õ·½Ò²¿ÉÄÜÔÚ³¬Ê±Ç°²»ÄÜ·¢³öËùÓÐÊý¾Ý£¬ÕâÖÖÇé¿öÏ£¬ÒªÓÉCLOSEתÈëABORT״̬¡£Óû§¿ÉÒÔ×Ô¼º¾ö¶¨ÔÚÈκÎʱ¼ä¹Ø±ÕÁ¬½Ó£¬Ò²¿ÉÒÔ¸ù¾ÝTCP·µ»ØµÄÌáʾ¹Ø±Õ¡£Òò´Ë¹Ø±Õ²Ù×÷ÒªºÍÍâTCP½øÐÐͨÐÅ£¬Òò´ËÔڹرÕ״̬¿ÉÄÜÒª´ôÒ»»á¶ù£¬ÔÚCLOSEûÓзµ»ØÇ°µ÷Óôò¿ª£¬»á·µ»Ø´íÎó¡£

Status

¸ñʽ: STATUS (±¾µØÁ¬½ÓÃû) -> status data

Õâ¸öÃüÁîºÍ¾ßÌåµÄʵÏÖÓйأ¬¶øÇÒÓпÉÄÜ»áÓиº×÷Ó᣷µ»ØµÄÐÅϢͨ³£À´×ÔÓÐÁ¬½ÓÏà¹ØµÄTCB¡£·µ»ØµÄÊý¾Ý¿éÖаüÀ¨ÏÂÃæµÄÐÅÏ¢£º±¾µØÌ×½Ó×Ö£¬ÍâÌ×½Ó×Ö£¬±¾µØÁ¬½ÓÃû£¬½ÓÊÕ´°¿Ú£¬·¢ËÍ´°¿Ú£¬Á¬½Ó״̬£¬µÈ´ýÈ·ÈϵĻº³åÇøÊý£¬µÈ´ý½ÓÊյĻº³åÇøÊý£¬½ô¼±×´Ì¬£¬ÓÅÏȼ¶£¬security/compartmentºÍ´«Ê䳬ʱ¡£Òò´ËʵÏÖ²»Í¬£¬ËùÒÔÉÏÊöÊý¾ÝÏîÖпÉÄÜÓм¸ÏîûÓÐÒâÒå»ò¸ù±¾²»´æÔÚ¡£Èç¹ûµ÷Óýø³ÌûÓб»ÊÚȨʹÓÃÕâÒ»Á¬½Ó£¬·µ»Ø´íÎó¡£ÕâÒ»µã»á·Àֹδ±»ÊÚȨµÄ½ø³Ì»ñµÃÁ¬½Ó״̬¡£

Abort

¸ñʽ: ABORT (±¾µØÁ¬½ÓÃû)

´ËÃüÁîÖÐÖ¹ËùÓÐSENDºÍRECEIVE£¬É¾³ýTCB£¬½«·¢ËÍÌØÊâµÄRESERTÐÅÏ¢µ½¶Ô·½TCP¡£¾ßÌåµÄ·µ»ØÐÅÏ¢»áÒòʵÏÖ²»Í¬¶ø²»Í¬¡£

TCPµ½Óû§ÐÅÏ¢

¼Ù¶¨²Ù×÷ϵͳÌṩһÖÖ¿ÉÒÔʹTCPÒì²½´«ËÍÐÅÏ¢µ½Óû§³ÌÐòµÄ»úÖÆ¡£µ±TCPȷʵ֪ͨÓû§³ÌÐòʱ»á·µ»ØÒ»Ð©Ìض¨µÄÐÅÏ¢¡£Í¨³£ÔÚÕâЩÐÅÏ¢ÖÐÒ²»áÓдíÎóÐÅÏ¢£¬ÔÚÆäËüÇé¿öÏ»áÓйØÓÚÍê³ÉSEND»òRECEIVE»òÆäËüÓû§µ÷ÓõÄÏà¹ØÐÅÏ¢¡£»áÌṩÏÂÃæµÄ¼¸ÖÖÏûÏ¢£º

±¾µØÁ¬½ÓÃû ¶¼Ìṩ

ÏìÓ¦´® ¶¼Ìṩ

»º³åÇøµØÖ· ·¢ËͺͽÓÊÕ

×Ö½Ú¼ÇÊý ½ÓÊÕ

Push±ê¼Ç ½ÓÊÕ

Urgent±ê¼Ç ½ÓÊÕ

¡¡

TCPºÍϲã½Ó¿Ú

TCPʵ¼ÊÉϵ÷ÓÃϲã·þÎñ²ÅÄÜÔÚÍøÂçÉÏ´«ÊäÊý¾Ý£¬ÔÚ»¥ÁªÍøÉÏÎÒÃÇͨ³£ÈÏΪTCPµÄϲãÊÇIPЭÒé¡£Èç¹ûϲãÊÇIP²ã£¬ËüÌṩһЩÀàÓÚ·þÎñÀàÐͺÍÉú´æÊ±¼äµÄ²ÎÊý¡£TCPʹÓÃÕâЩ²ÎÊýµÄÈçÏÂÉèÖãº

Type of Service = Precedence: routine, Delay: normal, Throughput: normal, Reliability: normal£»»òÊÇÊý×Ö00000000¡£

Time to Live = Ò»·ÖÖÓ£¬»òÊÇÊý×Ö00111100¡£

Çë×¢Ò⣺¼Ù¶¨µÄ×î´óÊý¾Ý¶ÎµÄÉú´æÊ±¼äΪ2·ÖÖÓ£¬ÕâÀïÈËΪָ¶¨Îª1·ÖÖÓ¡£

Èç¹ûϲãÊÇIP¶øÇÒʹÓÃÔ´µØÖ·Â·ÓÉ£¬½Ó¿Ú±ØÐëÔÊÐí·ÓÉÐÅÏ¢µÄͨÐÅ¡£Õâ¶Ô½¨Á¢Á¬½ÓºÍ½øÐзÓÉÊÇÊ®·ÖÖØÒªµÄ¡£µ±È»Ò²¿ÉÒÔ²»Ê¹ÓÃIPЭÒé×÷ΪTCPµÄµ×²ãЭÒ飬µ«ÎÞÂÛϲãЭÒéÊÇʲô£¬¶¼±ØÐëÌṩԴµØÖ·£¬Ä¿µÄµØÖ·ºÍЭÒéÓò£¬ÒÔ¼°Ò»Ð©¾ö¶¨TCP³¤¶ÈµÄÓò£¬×ÜÖ®Ò»¾ä»°£¬ÒªÄܹ»ÌṩÀàËÆÓÚIPµÄ¹¦ÄÜ¡£

3.9. ʼþ´¦Àí

ÏÂÃæËµÃ÷µÄ¹ý³ÌÊÇ¿ÉÄܵÄʵÏÖ£¬ÆäËüʵÏֺͱ¾ÀýµÄ¹ý³Ì¿ÉÄÜÓÐÒ»µãµã²»Í¬£¬µ«Ö»ÔÚϸ½Ú£¬¶ø¾ö²»ÔÚ½á¹û¡£TCPµÄ»î¶¯¿ÉÒÔ×ܽáΪ¶ÔʼþµÄÏìÓ¦¡£Ê¼þ¿ÉÒÔ·ÖΪÈýÀࣺÓû§µ÷Ó㬽ÓÊÕÊý¾Ý¶ÎºÍ³¬Ê±¡£ÏÂÃæÃèÊöµÄÊÇTCP¶Ô¾ßÌåʼþµÄÏìÓ¦£¬ÔÚÐí¶àÇé¿öÏ£¬Ïà¹ØµÄ¶¯×÷£¨ÏìÓ¦£©ÒªºÍÁ¬½Ó״̬Ïà¹Ø¡£

Óû§µ÷ÓõÄÓУº

OPEN

SEND

RECEIVE

CLOSE

ABORT

STATUS

½ÓÊÕÊý¾Ý¶ÎµÄÓУº

SEGMENT ARRIVES

³¬Ê±µÄÓУº

USER TIMEOUT

RETRANSMISSION TIMEOUT

TIME-WAIT TIMEOUT

TCP¶ÔÓû§µÄÏìÓ¦¿ÉÄÜÊÇÁ¢¼´µÄÒ²¿ÉÄÜÊÇÑÓʱµÄ¡£´íÎóÐÅÏ¢ÒÔ×Ö·û´®µÄÐÎʽ¸ø³ö¡£ÏÂÃæ¾ÍÊÇÒ»¸ö¾ßÌåµÄ´íÎóÐÅÏ¢£ºerror: connection not open¡£ÁíÍ⣬Çë¼ÇסÐòÁкſռä´óСΪ2µÄ32´Î·½¡£´¦ÀíÊý¾Ý¶ÎµÄ˳ÐòΪÊ×ÏȽÓÊÕ£¬ÔÙ¼ì²éÐòÁкţ¬Èç¹ûÊÇÒª½ÓÊյľͷÅÈë½ÓÊÕ¶ÓÁС£ÁíÍ⣬ûÓÐ˵Ã÷×´Ì¬×ªÒÆÊ±£¬TCP±£³ÖÔ­À´µÄ״̬¡£

OPENµ÷ÓÃ

CLOSED״̬

´´½¨ÐµÄTCB±£´æÁ¬½Ó״̬ÐÅÏ¢£¬Ìî³ä±¾µØÌ×½Ó×Ö±ê¼Ç£¬ÍâÌ×½Ó×Ö£¬ÓÅÏȼ¶£¬security/compartmentºÍÓû§³¬Ê±ÐÅÏ¢¡£×¢ÒâÒ»²¿·ÖÍâÌ×½Ó×ÖÔÚ±»¶¯OPENÖпÉÄÜδ˵Ã÷¡£Èç¹ûÊÇÖ÷¶¯µÄ£¬¶øÍâÌ×½Ó×Öδָ¶¨£¬·µ»Ø"error: foreign socket unspecified"£»Èç¹ûÊÇÖ÷¶¯µÄ£¬¶øÍâÌ×½Ó×ÖÖ¸¶¨ÁË£¬·¢ËÍÒ»¸öSYNÊý¾Ý¶Î¡£Ñ¡Ôñ³õʼ·¢ËÍÐòÁкÅISS¡£SYNÊý¾Ý¶ÎµÄ¸ñʽÈçÏÂ<SEQ=ISS><CTL=SYN>£¬ÉèÖÃSND.UNAΪISS£¬SND.NXTΪISS+1£¬½øÐÐSYN-SENT״̬£¬È»ºó·µ»Ø¡£

Èç¹ûµ÷ÓÃÕß²»ÄÜ·ÃÎÊÖ¸¶¨µÄ±¾µØÌ×½Ó×Ö£¬·µ»Ø"error: connection illegal for this process"¡£Èç¹ûûÓпռä½ÓÊÕеÄÁ¬½Ó£¬·µ»Ø"error: insufficient resources"¡£

LISTEN״̬

Èç¹û´¦ÓÚÖ÷¶¯×´Ì¬£¬Ö¸¶¨ÁËÍâÌ×½Ó×Ö£¬¿ÉÒÔ½«Á¬½Ó´Ó±»¶¯¸ÄΪÖ÷¶¯£¬²¢Ñ¡ÔñISS¡£·¢ËÍÒ»¸öSYNÊý¾Ý¶Î£¬ÉèÖÃSND.UNAΪISS£¬SND.NXTΪISS+1¡£½øÈëSYN-SENT״̬¡£ºÍSENDÒ»ÆðµÄÊý¾Ý¿ÉÒÔºÍSYNÊý¾Ý¶ÎÒ»Æð·¢ËÍ£¬Ò²¿ÉÒÔÔÚ½øÈëESTABLISHED״̬ºó·¢ËÍ¡£Èç¹ûûÓпռä½ÓÊÕÇëÇ󣬷µ»Ø"error: insufficient resources"¡£Èç¹ûδָ¶¨ÍâÌ×½Ó×Ö£¬·µ»Ø"error: foreign socket unspecified"¡£Èç¹û´¦ÓÚÒÔÏÂ״̬£ºSYN-SENT״̬£¬SYN-RECEIVED£¬ESTABLISHED״̬£¬FIN-WAIT-1״̬£¬FIN-WAIT-2״̬£¬CLOSE-WAIT״̬£¬CLOSING״̬£¬LAST-ACK״̬»òTIME-WAIT״̬ʱ·µ»Ø"error: connection already exists"¡£

SENDµ÷ÓÃ

CLOSED״̬

Èç¹ûÓû§ÎÞȨ·ÃÎÊÁ¬½Ó£¬·µ»Ø"error: connection illegal for this process"¡£·ñÔò·µ»Ø"error: connection does not exist"¡£

LISTEN״̬

Èç¹ûÖ¸¶¨ÁËÍâÌ×½Ó×Ö£¬¿ÉÒÔ½«Á¬½Ó´Ó±»±»¶¯¸ÄΪÖ÷¶¯£¬Ñ¡ÔñÒ»¸öISS¡£·¢ËÍSYNÊý¾Ý¶Î£¬ÉèÖÃSND.UNAΪISS£¬SND.NXTΪISS+1¡£½øÈëSYN-SENT״̬¡£ºÍSENDÒ»ÆðµÄÊý¾Ý¿ÉÒÔºÍSYNÊý¾Ý¶ÎÒ»Æð·¢ËÍ£¬Ò²¿ÉÒÔÔÚ½øÈëESTABLISHED״̬ºó·¢ËÍ¡£Èç¹ûûÓпռä½ÓÊÕÇëÇ󣬷µ»Ø"error: insufficient resources"£¬Èç¹ûδָ¶¨ÍâÌ×½Ó×Ö£¬Ôò·µ»Ø"error: foreign socket unspecified"¡£

SYN-SENT״̬ºÍSYN-RECEIVEDʱ

ÔÚ½øÈëESTABLISHED״̬ºó½«ÐèÒª´«Ë͵ÄÊý¾Ý¼ÓÈë¶ÓÁС£Èç¹û¶ÓÁÐÒÑÎ޿ռ䣬Ôò·µ»Ø"error: insufficient resources"¡£

ESTABLISHED״̬ºÍCLOSE-WAIT״̬

½«»º³åÇø·Ö¶Î£¬·¢ËÍ»º³åÇøÊý¾Ý£¬²¢Ê¹Ëü´øÓÐÈ·ÈÏÖµRCV.NXT¡£Èç¹ûûÓпռ䱣´æ»º³åÇø£¬Ôò·µ»Ø"error: insufficient resources"¡£Èç¹ûÉèÖÃÁ˽ô¼±±ê¼Ç£¬ÄÇôSND.UP <- SND.NXT-1£¬²¢ÉèÖýô¼±Ö¸ÕëÖ¸Ïò·¢ËÍÊý¾Ý¶ÎÖеÄÏàӦλÖá£

ÔÚFIN-WAIT-1£¬FIN-WAIT-2£¬CLOSING£¬LAST-ACKºÍTIME-WAIT״̬ʱ·µ»Ø"error: connection closing"£¬²»Àí»áÇëÇó¡£

RECEIVEµ÷ÓÃ

CLOSED״̬

Èç¹ûÓû§Ã»ÓÐȨÀû·ÃÎÊÕâ¸öÁ¬½Ó£¬·µ»Ø"error: connection illegal for this process"¡£Èç¹ûÓÐȨÀû£¬Ôò·µ»Ø"error: connection does not exist"¡£

ÔÚLISTEN£¬SYN-SENTºÍSYN-RECEIVED״̬ÏÂ

ÔÚ½øÈëESTABLISHED״̬ºó£¬½«Êý¾Ý·ÅÈë¶ÓÁÐ×¼±¸´¦Àí¡£Èç¹û¶ÓÁÐÖÐûÓпռ䣬·µ»Ø"error: insufficient resources"¡£

ÔÚESTABLISHED£¬FIN-WAIT-1ºÍFIN-WAIT-2״̬ÏÂ

Èç¹ûûÓнÓÊÕµ½×ã¹»µÄÊý¾Ý¶ÎÂú×ãÇëÇ󣬽«ÇëÇó·ÅÈë¶ÓÁС£Èç¹û¶ÓÁÐÖÐûÓпռä¼Ç¼RECEIVE£¬·µ»Ø"error: insufficient resources"¡£ÖØÐ½«½ÓÊÕÊý¾Ý¶Î·ÅÈë½ÓÊÕ»º³åÇø£¬²¢·µ»Ø¸øÓû§¡£ÔÚÕâÖÖÇé¿öÏ£¬¿ÉÒÔÉèÖÃPUSH±ê¼Ç¡£Èç¹ûRCV.UP±ÈÏÖÔÚ´«Ë͸øÓû§µÄÒª´ó£¬Í¨ÖªÓû§Óнô¼±Êý¾Ý¡£

CLOSE-WAIT״̬

ÒòΪԶ·½TCPÒѾ­·¢ËÍÁËFIN£¬RECEIVE±ØÐëÓÉÏÖÔÚÔÚ»º³åÇøµ«»¹Î´´«Ë͸øÓû§µÄÊý¾ÝÂú×ã¡£Èç¹ûûÓÐÊý¾ÝÁË£¬RECEIVE»áµÃµ½"error: connection closing"µÄÏìÓ¦¡£

ÔÚCLOSING£¬LAST-ACKºÍTIME-WAIT״̬Ï·µ»Ø"error: connection closing".

¡¡

CLOSE µ÷ÓÃ

CLOSED״̬

Èç¹ûÓû§Ã»ÓÐȨÀû·ÃÎÊÕâ¸öÁ¬½Ó£¬·µ»Ø"error: connection illegal for this process"¡£Èç¹ûÓÐȨÀû£¬Ôò·µ»Ø"error: connection does not exist"¡£

LISTEN״̬

´æÔÚ×ŵÄÈκÎRECEIVE¶¼»á·µ»Ø"error: closing"µÄÏìÓ¦¡£É¾³ýTCB£¬È»ºó½øÈëCLOSED״̬²¢·µ»Ø¡£

SYN-SENT״̬

ɾ³ýTCB²¢·µ»Ø"error: closing"ÏìÓ¦¸øÈκÎÔÚ¶ÓÁÐÖеÄSEND»òRECEIVE¡£

SYN-RECEIVED״̬

Èç¹ûûÓз¢ËÍSEND£¬¶øÇÒûÓеȴý·¢Ë͵ÄÊý¾ÝÁË£¬ÔòÐγɲ¢·¢ËÍFINÊý¾Ý¶Î£¬½øÈëFIN-WAIT-1״̬£»·ñÔòÔÚ½øÈëESTABLISHED״̬ºó½«ÃüÁî±£´æÔÚ¶ÓÁÐÖеȴý´¦Àí¡£

ESTABLISHED״̬

½«ÕâÒ»ÃüÁî±£´æÔÚ¶ÓÁÐÖУ¬Ö±µ½ËùÓÐÕýÔÚ½øÐеÄSENDÍê³Éºó£¬Ðγɲ¢·¢ËÍFINÊý¾Ý¶Î£¬È»ºó½øÈëFIN-WAIT-1״̬¡£

ÔÚFIN-WAIT-1ºÍFIN-WAIT-2״̬ÏÂ

ÑϸñµØËµ£¬Õ⽫»áÊǸö´íÎ󣬻áÊÕµ½"error: connection closing"¡£Ö»ÒªµÚ¶þ¸öFINûÓз¢³ö£¬Ò²¿ÉÒÔÊÕµ½Ò»¸ö"ok"ÏìÓ¦¡£

CLOSE-WAIT״̬

Ö±µ½ËùÓÐSENDÃüÁîÍê³ÉºóÔÙ½«Õâ¸öÇëÇó·ÅÈë¶ÓÁУ»È»ºó·¢ËÍFINÊý¾Ý¶Î£¬½øÈëCLOSING״̬¡£

ÔÚCLOSING£¬LAST-ACKºÍTIME-WAIT״̬Ï·µ»Ø"error: connection closing"¡£

¡¡

ABORTµ÷ÓÃ

CLOSED״̬

Èç¹ûÓû§Ã»ÓÐȨÀû·ÃÎÊÕâ¸öÁ¬½Ó£¬·µ»Ø"error: connection illegal for this process"¡£Èç¹ûÓÐȨÀû£¬Ôò·µ»Ø"error: connection does not exist"¡£

LISTEN״̬

ÈκδæÔÚµÄRECEIVE¶¼Ó¦¸Ã·µ»Ø"error: connection reset"£¬É¾³ýTCB£¬½øÈëCLOSED״̬£¬È»ºó·µ»Ø¡£

SYN-SENT״̬

¶ÔÓÚËùÓÐÔÚ¶ÓÁÐÖеÄSENDºÍRECEIVE£¬¶¼·µ»Ø"connection reset"£¬É¾³ýTCB£¬½øÈëCLOSED״̬£¬È»ºó·µ»Ø¡£

ÔÚSYN-RECEIVED£¬ESTABLISHED£¬FIN-WAIT-1£¬FIN-WAIT-2ºÍCLOSE-WAIT״̬

·¢ËÍÊý¾Ý¶Î<SEQ=SND.NXT><CTL=RST>£¬¶ÔÓÚËùÓÐÔÚ¶ÓÁÐÖеÄSENDºÍRECEIVE£¬¶¼·µ»Ø"connection reset"£¬£»ËùÓÐÒª½øÐд«ËÍ»òÖØÐ´«Ë͵ÄÊý¾Ý¶ÎÁ¢¿Ì½øÐУ¬É¾³ýTCB£¬½øÈëCLOSED״̬£¬È»ºó·µ»Ø¡£

ÔÚCLOSING£¬LAST-ACKºÍTIME-WAIT״̬Ï·µ»Ø"ok"£¬É¾³ýTCB£¬½øÈëCLOSED״̬£¬È»ºó·µ»Ø¡£

¡¡

STATUS µ÷ÓÃ

CLOSED״̬

Èç¹ûÓû§Ã»ÓÐȨÀû·ÃÎÊÕâ¸öÁ¬½Ó£¬·µ»Ø"error: connection illegal for this process"¡£Èç¹ûÓÐȨÀû£¬Ôò·µ»Ø"error: connection does not exist"¡£

LISTEN״̬

·µ»Ø"state = LISTEN"ºÍTCBÖ¸Õë¡£

SYN-SENT״̬

·µ»Ø"state = SYN-SEND"ºÍTCBÖ¸Õë¡£

SYN-RECEIVED״̬

·µ»Ø"state = SYN-RECEIVED"ºÍTCBÖ¸Õë¡£

ESTABLISHED״̬

·µ»Ø"state = ESTABLISHED"ºÍTCBÖ¸Õë¡£

FIN-WAIT-1״̬

·µ»Ø"state = FIN-WAIT-1"ºÍTCBÖ¸Õë¡£

FIN-WAIT-2״̬

·µ»Ø"state = FIN-WAIT-2"ºÍTCBÖ¸Õë¡£

CLOSE-WAIT״̬

·µ»Ø"state = CLOSE-WAIT"ºÍTCBÖ¸Õë¡£

CLOSING״̬

·µ»Ø"state = CLOSING"ºÍTCBÖ¸Õë¡£

LAST-ACK״̬

·µ»Ø"state = LAST-ACK"ºÍTCBÖ¸Õë¡£

TIME-WAIT״̬

·µ»Ø"state = TIME-WAIT"ºÍTCBÖ¸Õë¡£

½ÓÊÕµ½Êý¾Ý¶Î

Èç¹û´¦ÓÚCLOSED״̬£¬ËùÓе½´ïµÄÊý¾Ý¶¼±»Åׯú¡£°üÀ¨RSTµÄÒ²²»ÀýÍâ¡£Èç¹û½ÓÊÕµ½µÄÊý¾Ý¶Î²»°üÀ¨RST£¬Ôò·µ»ØÒ»¸öRST¡£¶ÔÓÚ·¢ËÍTCPҪѡÔñËü¿ÉÒÔÈÏÖªµÄÈ·ÈϺÍÐòÁкš£Èç¹û¹Ø±ÕACK룬ÔòÐòÁкÅΪ0£¬¸ñʽÈçÏÂ:<SEQ=0><ACK=SEG.SEQ+SEG.LEN><CTL=RST,ACK>Èç¹û´ò¿ªACK룬¸ñʽÈçÏ£º<SEQ=SEG.ACK><CTL=RST>¡£

Èç¹û´¦ÓÚLISTEN״̬£¬Ê×Ïȼì²éRST£¬½ÓÊÕµ½µÄRSTÓ¦¸Ã±»ºöÂÔ¡£ÏÂÀ´Ó¦¸Ã¼ì²éACK£¬Èç¹ûÁ¬½Ó´¦ÓÚLISTEN״̬Ï£¬ÈκÎACK¶¼ÊÇ´íÎóµÄ£¬Ó¦¸Ã·µ»ØRST¶Î£¬ËüµÄ¸ñʽÈçÏ£º<SEQ=SEG.ACK><CTL=RST>¡£

µÚÈý²½Ó¦¸Ã¼ì²éSYN£¬Èç¹ûSYNλÉèÖÃÁË£¬¼ì²é°²È«ÐÔ£¬Èç¹û½ÓÊÕÊý¾Ý¶ÎÖеÄsecurity/compartmentÓëTCBÖеIJ»ÄÜÆ¥Å䣬·µ»ØRST¶Î£¬¸ñʽÈçÏ£º<SEQ=SEG.ACK><CTL=RST>¡£ÔÚSEG.PRC´óÓÚTCB.PRCµÄÇé¿öÏ£¬Èç¹ûÓû§ºÍϵͳÔÊÐí£¬ÔòÉèÖÃTCB.PRC<-SEG.PRC£¬Èç¹ûÓû§ºÍϵͳ²»ÔÊÐí£¬·¢ËÍRST¶Î²¢·µ»Ø¡£Æä¸ñʽÈçÏ£º<SEQ=SEG.ACK><CTL=RST>¡£Èç¹ûSEG.PRCСÓÚTCB.PRC£¬¼ÌÐø½øÐС£ÉèÖÃRCV.NXTΪSEG.SEQ+1£¬IRSΪSEG.SEQÖеÄÖµ£¬ÆäËü¿ØÖÆÐÅÏ¢ºÍÊý¾ÝÒÔºó´¦Àí¡£Ó¦¸ÃÑ¡ÔñISS£¬²¢·¢ËÍSYN¶Î£¬Æä¸ñʽÈçÏ£º<SEQ=ISS><ACK=RCV.NXT><CTL=SYN,ACK>¡£SND.NXTÉèÖÃΪISS+1£¬SND.UNAÉèÖÃΪISSµÄÖµ£¬Á¬½Ó״̬¸ÄΪSYN-RECEIVED¡£ÆäËü¿ØÖÆÐÅÏ¢ºÍÊý¾Ý½«ÔÚSYN-RECEIVED״̬Öд¦Àí£¬µ«ÒÔÓÚSYNºÍACKµÄ´¦Àí²»Ó¦¸ÃÖØ¸´¡£Èç¹ûδÍêȫָ¶¨LISTENÓò£¬ÏÖÔÚ¾ÍÓ¦¸ÃÖ¸¶¨ÁË¡£

µÚËIJ½ÊÇ´¦ÀíÆäËüÊý¾ÝºÍ¿ØÖÆÐÅÏ¢¡£ÆäËüµÄÊý¾Ý¶Î£¨²»°üÀ¨SYN£©Ó¦¸ÃÓÐACK£¬Òò´Ë²»Òª¶ÔËü½øÐÐACK´¦Àí¡£Èç¹û½ÓÊÕµ½RST¶Î£¬ÔòËüÊÇ·Ç·¨µÄ¡£Èç¹ûȷʵ½ÓÊÕµ½ÁË£¬ÅׯúËü£¬Ö±½Ó·µ»Ø¡£

Èç¹û´¦ÓÚSYN-SENT״̬¡£Ê×Ïȼì²éACK룬Èç¹ûÉèÖÃÁËACK룬¶øÇÒSEG.ACK =< ISS»òSEG.ACK > SND.NXT£¬·¢ËÍRST¡££¨³ý·ÇÉèÖÃÁËRST룬Èç¹ûÕâÑù£¬ÅׯúÕâ¸öÊý¾Ý¶ÎÖ±½Ó·µ»Ø£©¡£RST¶ÎµÄ¸ñʽÈçÏ£º<SEQ=SEG.ACK><CTL=RST>¡£²»ÓÃÀí»áÊÕµ½µÄÊý¾Ý¶Î£¬Ö±½Ó·µ»Ø¡£Èç¹ûSND.UNA =< SEG.ACK =< SND.NXT£¬ÄÇôACKÊÇ¿ÉÒÔ½ÓÊܵġ£

ÏÂÒ»²½¼ì²éRSTλ¡£ÔÚÉèÖÃÁËRSTµÄÇé¿öÏ£¬Èç¹ûACKÊÇ¿ÉÒÔ½ÓÊܵģ¬Í¨ÖªÓû§"error: connection reset"£¬Åׯú½ÓÊÕµ½µÄÊý¾Ý¶Î²¢½øÈëCLOSED״̬£¬É¾³ýTCB²¢·µ»Ø¡£Èç¹ûACK²»ÄܽÓÊÜ£¬ÅׯúÊý¾Ý¶Î·µ»Ø¡£

µÚÈý²½¼ì²é°²È«ÐÔºÍÓÅÏȼ¶¡£Èç¹ûsecurity/compartmentºÍTCBÖеÄsecurity/compartment²»Æ¥Å䣬·¢ËÍRST¶Î¡£ÔÚ·¢ËÍRST¶ÎµÄʱºò£¬Èç¹ûÒѾ­ÓÐACKÁË£¬¸ñʽΪ£º<SEQ=SEG.ACK><CTL=RST>£¬Èç¹ûûÓÐACK£¬¸ñʽΪ<SEQ=0><ACK=SEG.SEQ+SEG.LEN><CTL=RST,ACK>¡£ÔÚûÓз¢ÏÖ²»Æ¥ÅäµÄʱºò£¬Èç¹ûÓÐACK£¬¶ÎÖеÄÓÅÏȼ¶±ØÐëºÍTCBÖÐµÄÆ¥Å䣬Èç¹û²»Æ¥Å䣬·¢ËÍRST£¬Æä¸ñʽΪ£º<SEQ=SEG.ACK><CTL=RST>£»Èç¹ûδ·¢ÏÖ²»Æ¥Å䣬¶øÇÒûÓÐACKµÄÇé¿öÏ£¬Èç¹û½ÓÊÕµ½µÄÊý¾Ý¶ÎÖеÄÓÅÏȼ¶¸ßÓÚTCBÖеÄÓÅÏȼ¶£¬Ôڵõ½Óû§ºÍϵͳÐí¿ÉµÄÇé¿öÏ¿ÉÒÔ½«TCBÖеÄÓÅÏȼ¶Éý¸ß£¬Èç¹ûÓû§»òϵͳ²»Ðí¿É£¬Ìá¸ßprec£¬È»ºóÒÔÈçϸñʽ·¢ËÍRST£º<SEQ=0><ACK=SEG.SEQ+SEG.LEN><CTL=RST,ACK>£¬Èç¹û½ÓÊÕÊý¾Ý¶ÎÖеÄÓÅÏȼ¶Ð¡ÓÚTCBÖеÄÓÅÏȼ¶Ôò¼ÌÐø¡£ÔÚ·¢ËÍÁËRSTºó£¬ÅׯúÊý¾Ý¶Î²¢·µ»Ø¡£

µÚËIJ½¼ì²éSYNλ¡£Ö»ÓÐÔÚACKλÊǺϷ¨»òûÓÐACK¶øÇÒÊý¾Ý¶ÎÖв»°üÀ¨RSTµÄÇé¿öϲÅÄܽøÐÐÕâÒ»²½¡£Èç¹ûÉèÖÃÁËSYN룬¶øÇÒsecurity/compartmentºÍÓÅÏȼ¶ºÏ·¨£¬ÄÇôRCV.NXTÉèΪSEG.SEQ+1£¬IRSÉèΪSEG.SEQ¡£SND.UNAÓ¦¸ÃÔö¼ÓºÍSEG.ACKÏàµÈ£¬ÔÚÖØÐ·¢ËͶÓÁÐÖÐÔ­À´µÈ´ýÈ·È϶øÏÖÔÚÒѾ­±»È·ÈϵÄÊý¾Ý¶ÎÒ²±»Çå³ý¡£Èç¹ûSND.UNA > ISS£¬¸Ä±äÁ¬½Ó״̬ΪESTABLISHED£¬ÐγÉÏÂÃæ¸ñʽµÄACK¶Î²¢·¢ËÍ£º <SEQ=SND.NXT><ACK=RCV.NXT><CTL=ACK>¡£¶ÓÁÐÖÐÓÃÓÚ·¢Ë͵ÄÊý¾ÝµÄ¿ØÖÆÐÅÏ¢Ò²Ò»Æð·¢ËÍ£¬Èç¹û¶ÎÖÐûÓÐÊý¾Ý»ò¿ØÖÆÐÅÏ¢£¬Ôò½øÐеÚÁù²½£¬·ñÔò·µ»Ø¡£Èç¹ûSND.UNA > ISS²»³ÉÁ¢£¬ÐγÉSYN£¬ACK¶Î£¬¸ñʽÈçÏ£º<SEQ=ISS><ACK=RCV.NXT><CTL=SYN,ACK>£¬²¢·¢ËÍËü¡£Èç¹ûÔÚ¶ÎÖÐûÓÐÊý¾Ý»ò¿ØÖÆÐÅÏ¢£¬´ý½øÈëESTABLISHED״̬ºóÔÙ½øÐд¦Àí¡£

µÚÎå²½£¬Èç¹ûSYN»òRSTλûÓÐÉèÖã¬ÅׯúÊý¾Ý¶Î·µ»Ø¡£

ÏÂÀ´ÎÒÃÇÀ´¿´¿´ÆäËü״̬¡£Ê×ÏÈÓ¦¸Ã¼ì²éÐòÁкš£ÔÚÏÂÃæ×´Ì¬ÏÂ

SYN-RECEIVED״̬

ESTABLISHED״̬

FIN-WAIT-1״̬

FIN-WAIT-2״̬

CLOSE-WAIT״̬

CLOSING״̬

LAST-ACK״̬

TIME-WAIT״̬

¶Î°´Ë³Ðò´¦Àí£¬Ê×ÏÈÅׯúÖØ¸´µÄ¶Î£¬¶ÔÓÚÒÔºóµÄ´¦ÀíÒª¸ù¾ÝSEG.SEQµÄ´óС½øÐС£Èç¹ûÓеĶÎÄÚµÄÐÂÀÏÄÚÈÝÖØµþÔÚÒ»Æð£¬ÄÇÖ»Óô¦ÀíеÄÄÇÒ»²¿·Ö¡£ÏÂÃæÊǶԽÓÊÕµ½µÄÊý¾ÝµÄ¿É½ÓÊÜÐÔ²âÊÔÖеÄËÄÖÖÇé¿ö£º

¶Î³¤¶È

½ÓÊÕ´°¿Ú

²âÊÔ

0

0

SEG.SEQ = RCV.NXT

0

>0

RCV.NXT =< SEG.SEQ < RCV.NXT+RCV.WND

>0

0

²»½ÓÊÜ

>0

>0

RCV.NXT =< SEG.SEQ < RCV.NXT+RCV.WND»òRCV.NXT =< SEG.SEQ+SEG.LEN-1 < RCV.NXT+RCV.WND

Èç¹ûRCV.WND = 0£¬³ýÁ˺Ϸ¨µÄACK£¬URGºÍRST¶ÎÍâ¾Ü¾øÆäËüµÄÊý¾Ý¶Î¡£Èç¹û½ÓÊÕµ½µÄÊý¾Ý¶Î²»¿É½ÓÊÜ£¬Ó¦¸Ã·µ»ØÒ»¸öÓ¦´ð£¬¸ñʽÈçÏ£º<SEQ=SND.NXT><ACK=RCV.NXT><CTL=ACK>¡£ÔÚ·¢ËÍÍêÓ¦´ðºó£¬Åׯú²»¿É½ÓÊܵÄÊý¾Ý¶Î£¬È»ºó·µ»Ø¡£

µÚ¶þ²½¼ì²éRSTλ¡£

Èç¹û´¦ÓÚSYN-RECEIVED ״̬ʱ£¬¶øÇÒ´¦ÓÚÉèÖÃÁËRSTµÄÇé¿öÏ£¬Èç¹ûÁ¬½ÓÒÔ±»¶¯OPEN¿ªÊ¼£¬½«Á¬½Ó·µ»Øµ½LISTEN״̬£¬²»ÐèҪ֪ͨÓû§£»Èç¹ûÁ¬½ÓÒÔÖ÷¶¯OPEN´ò¿ª£¬¾Ü¾øÁ¬½Ó£¬²¢Í¨ÖªÓû§"connection refused"¡£ÔÚÉÏÃæÈκÎÒ»ÖÖÇé¿öÏ£¬ËùÓÐÔÚÖØ·¢¶ÓÁÐÖеÄÊý¾Ý¶¼ÒªÉ¾³ý¡£ÔÚÖ÷¶¯OPENµÄÄÇÖÖÇé¿öÏ£¬½øÈëCLOSED״̬£¬É¾³ýTCBÈ»ºó·µ»Ø¡£

Èç¹û´¦ÓÚESTABLISHED£¬FIN-WAIT-1£¬FIN-WAIT-2»òCLOSE-WAIT״̬ʱ£¬¶øÇÒRSTÒѾ­ÉèÖã¬ÄÇôÈκδæÔÚµÄRECEIVEºÍSEND¶¼»áÊÕµ½"reset"¡£ËùÓжÓÁÐÖеÄÊý¾Ý¶Î¶¼Ó¦¸ÃÁ¢¼´·¢ËÍ¡£Óû§Ò²»áÊÕµ½"connection reset"¡£½øÈëCLOSED״̬£¬É¾³ýTCB²¢·µ»Ø¡£

Èç¹û´¦ÓÚCLOSING״̬£¬LAST-ACK״̬»òTIME-WAIT״̬£¬¶øÇÒRSTÒѾ­ÉèÖ㬽øÈëCLOSED״̬£¬É¾³ýTCB²¢·µ»Ø¡£

¼ì²é°²È«ºÍÓÅÏȼ¶

ÔÚSYN-RECEIVED״̬ÏÂ

Èç¹û¶ÎÖеÄsecurity/compartmentºÍÓÅÏȼ¶ºÍTCBÖеIJ»Æ¥Å䣬·¢ËÍRST²¢·µ»Ø¡£

ÔÚESTABLISHED״̬ÏÂ

Èç¹û¶ÎÖеÄsecurity/compartmentºÍÓÅÏȼ¶ºÍTCBÖеIJ»Æ¥Å䣬·¢ËÍRST £¬ËùÓдæÔÚµÄRECEIVEºÍSEND½ÓÊÕµ½"reset"£¬Á¢¼´·¢ËÍËùÓжÓÁÐÖеÄÊý¾Ý¶Î£¬Óû§½ÓÊÕµ½"connection reset"¡£½øÈëCLOSED״̬£¬É¾³ýTCB²¢·µ»Ø¡£

µÚËIJ½¼ì²éSYN룬Èç¹ûÁ¬½Ó´¦ÓÚÒÔÏÂ״̬

SYN-RECEIVED

ESTABLISHED״̬

FIN-WAIT STATE-1

FIN-WAIT STATE-2

CLOSE-WAIT״̬

CLOSING״̬

LAST-ACK״̬

TIME-WAIT״̬

Èç¹ûSYNÔÚ´°¿ÚÖоÍÊÇ´íÎ󣬷¢ËÍRST£¬ÈκδæÔÚµÄRECEIVEºÍSENDÊÕµ½"reset"£¬ËùÓÐÔÚ¶ÓÁÐÖеÄÊý¾Ý¶ÎÁ¢¼´·¢ËÍ£¬Óû§Ò²½ÓÊÕµ½"connection reset"£¬½øÈëCLOSED״̬£¬É¾³ýTCB²¢·µ»Ø¡£Èç¹ûSYNδÔÚ´°¿ÚÖУ¬ÕâÒ»²½²»»á·¢Éú¡£

µÚÎå²½¼ì²éACKÓò

Èç¹ûACKλ¹Ø±Õ£¬ÅׯúÊý¾Ý¶Î·µ»Ø¡£Èç¹ûACKÓò´ò¿ªµÄÇé¿öÏ£¬Èç¹ûÁ¬½Ó´¦ÓÚ

SYN-RECEIVED״̬ʱ

Èç¹ûSND.UNA =< SEG.ACK =< SND.NXT£¬½øÈëESTABLISHED״̬¡£Èç¹û¶ÎµÄÈ·ÈÏÏûÏ¢²»¿É½ÓÊÜ£¬ÐγÉÈçÏÂÐÎʽµÄRST²¢·¢ËÍ£º

<SEQ=SEG.ACK><CTL=RST>

ESTABLISHED״̬ʱ

Èç¹ûSND.UNA < SEG.ACK =< SND.NXT£¬ÉèÖÃSND.UNA <- SEG.ACK¡£Òò´Ë¶ø¶ÔÖØÐ´«ËͶÓÁÐÖÐÊý¾Ý¶ÎµÄÈ·ÈÏÒ²´øÀ´Á˶ÔÕâЩÊý¾Ý¶ÎµÄɾ³ý¡£Óû§Ó¦¸Ã½ÓÊÕ¶Ô»º³åÇøµÄÖ÷¶¯È·ÈÏ£¬Èç¹ûACKÊÇÖØ¸´µÄ£¨SEG.ACK < SND.UNA£©¿ÉÒÔºöÂÔÕâ¸öACK¡£Èç¹ûACKÈ·ÈÏÁË»¹Î´·¢Ë͵Ķ«Î÷£¨SEG.ACK > SND.NXT£©£¬ÄÇô¿ÉÒÔ·¢ËÍACK,ÅׯúÊý¾Ý¶Î²¢·µ»Ø¡£

Èç¹ûSND.UNA < SEG.ACK =< SND.NXT£¬Ó¦¸Ã¸üз¢ËÍ´°¿Ú¡£Èç¹û£¨SND.WL1 < SEG.SEQ£©»ò£¨SND.WL1 = SEG.SEQÇÒSND.WL2 =< SEG.ACK£©£¬ÉèÖÃSND.WND <- SEG.WND£¬SND.WL1 <- SEG.SEQºÍSND.WL2 <- SEG.ACK¡£

FIN-WAIT-1״̬

³ýÁ˶ÔÓÚESTABLISHED״̬µÄ´¦ÀíÍ⣬Èç¹ûÈ·¶¨ÁËFIN£¬Ôò½øÈëFIN-WAIT-2״̬²¢ÔÚÕâ¸ö״̬ϼÌÐø´¦Àí¡£

FIN-WAIT-2״̬ʱ

³ýÁ˶ÔÓÚESTABLISHED״̬µÄ´¦ÀíÍ⣬Èç¹ûÖØÐ·¢ËͶÓÁÐΪ¿Õ£¬È·ÈÏÓû§µÄCLOSE£¬µ«²»É¾³ýTCB¡£

CLOSE-WAIT״̬ʱ

ͬESTABLISHED״̬µÄ´¦Àí¡£

CLOSING״̬ʱ

³ýÁ˶ÔÓÚESTABLISHED״̬µÄ´¦ÀíÍ⣬Èç¹ûÈ·¶¨ÁËFIN£¬Ôò½øÈëTIME-WAIT״̬£¬Èç¹ûδȷÈÏ£¬ÔòºöÂÔÕâ¸ö¶Î¡£

LAST-ACK״̬ʱ

ÔÚ´Ë״̬ÏÂΨһ¿ÉÄÜ·¢ÉúµÄ¾ÍÊÇÖØÒª·¢ËÍÔ¶³ÌFIN¡£Èç¹ûÈ·ÈÏÁËFIN£¬Ôòɾ³ýTCB£¬½øÈëCLOSED״̬²¢·µ»Ø¡£

TIME-WAIT״̬ʱ

ÔÚ´Ë״̬ÏÂΨһ¿ÉÄÜ·¢ÉúµÄ¾ÍÊÇÖØÒª·¢ËÍÔ¶³ÌFIN¡£È·ÈÏËü£¬²¢ÖØÐ¿ªÊ¼2 MSL³¬Ê±¡£

µÚÁù²½¼ì²éURG룬Èç¹ûÁ¬½Ó´¦ÓÚESTABLISHED״̬£¬FIN-WAIT-1״̬»òFIN-WAIT-2 ״̬£¬¶øÇÒURGλ±»ÉèÖã¬ÄÇôRCV.UP <- max(RCV.UP,SEG.UP)£¬Í¨ÖªÓû§Ô¶·½Óнô¼±Êý¾Ý£¬Èç¹ûÓû§ÒѾ­´¦ÓÚ½ô¼±×´Ì¬£¬²»ÓÃÔÙ¶à×ìÁË¡£Á¬½ÓÔÚ´Ëʱ²»»á´¦ÓÚCLOSE-WAIT״̬£¬CLOSING״̬£¬LAST-ACK״̬»òTIME-WAIT״̬£¬ÒòΪ»¹Ã»ÓдÓÔ¶·½»ñµÃFIN¡£

µÚÆß²½´¦Àí¶ÎÊý¾Ý

´¦ÓÚESTABLISHED״̬£¬FIN-WAIT-1 ״̬»òFIN-WAIT-2 ״̬ʱ£¬ÔÚ½øÈëESTABLISHED״̬ºó²Å¿ÉÄÜÏòÓû§½ÓÊÕ»º³åÇø´«ËÍÊý¾Ý¡£¶ÎÖеÄÊý¾Ý¿ÉÒÔÒÆÏò»º³åÇø£¬Ö±µ½»º³åÇøÂú»ò¶ÎΪ¿ÕΪֹ¡£Èç¹û¶ÎΪ¿Õ²¢´øÓбê¼ÇPUSH£¬ÔÚ·µ»Ø»º³åÇøÊý¾ÝºóҪ֪ͨÓû§½ÓÊÕµ½PUSH¡£TCP´«ËÍÊý¾Ýʱ±ØÐë¶Ô½ÓÊÕµ½µÄÊý¾ÝÒ²·¢¸øÈ·ÈÏ¡£Ç°ÃæÒѾ­Ëµ¹ý¶ÔRCV.NXTºÍRCV.WNDµÄ´¦Àí£¬ÕâÀï²»ÔÙ¶à˵ÁË¡£·¢Ë͵ÄÈ·ÈÏÓÐÈçϸñʽ£º<SEQ=SND.NXT><ACK=RCV.NXT><CTL=ACK>¡£

¶øCLOSE-WAIT״̬£¬CLOSING״̬£¬LAST-ACK״̬»òTIME-WAIT ״̬¸ù±¾²»»á·¢Éú£¬ÒòΪ»¹Î´´ÓÔ¶³ÌTCP½ÓÊÕµ½FIN¡£

µÚ°Ë²½¼ì²éFINλ¡£Èç¹û״̬ÊÇCLOSED£¬LISTEN»òSYN-SENT£¬²»Òª´¦ÀíFIN£¬ÒòΪ´ËʱµÄSEG.SEQ²»»áµÄÒâÒ壬Ӧ¸ÃÖ±½ÓÅׯúÊý¾Ý¶Î·µ»Ø¡£Èç¹ûÉèÖÃÁËFINλ£¬Í¨ÖªÓû§"connection closing"ÖÐÖ¹ËùÓÐÕýÔÚ½øÐеÄRECEIVE£¬Ôö¼ÓRCV.NXT³¬¹ýFIN£¬¶ÔFIN·¢ËÍÈ·ÈÏ¡£

Èç¹û´Ëʱ´¦ÓÚ£ºSYN-RECEIVED״̬»òESTABLISHED״̬½øÈëCLOSE-WAIT״̬¡£

Èç¹û´Ëʱ´¦ÓÚFIN-WAIT-1 ״̬

Èç¹ûÈ·¶¨ÁËFIN¶Î£¬ÄÇô½øÈëTIME-WAIT״̬£¬´ò¿ªtime-wait¼ÆÊýÆ÷£¬¹Ø±ÕÆäËü¼ÆÊýÆ÷£¬Èç¹ûûÓÐÈ·ÈÏ£¬½øÈëCLOSING״̬¡£

Èç¹û´Ëʱ´¦ÓÚFIN-WAIT-2״̬

½øÈëTIME-WAIT״̬£¬¹Ø±ÕÆäËü¼ÆÊýÆ÷£¬´ò¿ªtime-wait¼ÆÊýÆ÷¡£

Èç¹û´Ëʱ´¦ÓÚCLOSE-WAIT״̬»òCLOSING״̬»òLAST-ACK״̬£¬±£Áô¸÷×ÔÔ­À´µÄ״̬¡£

Èç¹û´Ëʱ´¦ÓÚTIME-WAIT״̬£¬±£³ÖÔÚTIME-WAIT״̬¡£ÖØÐ¿ªÊ¼2 MSL time-wait³¬Ê±¡£

¡¡

Óû§³¬Ê±

¶ÔÓÚÈκÎÒ»ÖÖ״̬£¬Óû§³¬Ê±µÄÇé¿öÏ£¬·¢ËͶÓÁÐÖеÄÊý¾Ý£¬·µ»Ø"error: connection aborted due to user timeout"£¬É¾³ýTCB£¬½øÐÐCLOSED״̬²¢·µ»Ø¡£

¡¡

ÖØ·¢³¬Ê±

ÔÚÈκÎ״̬Ï£¬Èç¹ûÖØ·¢¶ÓÁÐÖеÄÊý¾Ý¶Î·¢Ëͳ¬Ê±£¬½«ËüÔٴηŵ½¶ÓÁÐÊײ¿ÖØÐ·¢ËÍ¡£

¡¡

TIME-WAIT³¬Ê±

Èç¹ûtime-wait³¬Ê±£¬É¾³ýTCB£¬½øÐÐCLOSE״̬²¢·µ»Ø¡£

·¢±íÓÚ£º 2005-09-22£¬ÐÞ¸ÄÓÚ£º 2005-09-22 16:24£¬ÒÑä¯ÀÀ444´Î£¬ÓÐÆÀÂÛ0Ìõ ÍÆ¼ö ͶËß

¸øÎÒÁôÑÔ
°æÈ¨ËùÓÐ ChinaUnix.net Ò³ÃæÉú³Éʱ¼ä£º0.01193