´«Êä¿ØÖÆÐÒ飨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°üÍ·¸ñʽͼ£º

Ô´¶Ë¿Ú£º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״̬µÄת»»£¬µ«ÕâͼÖÐûÓаüÀ¨´íÎóµÄÇé¿öºÍ´íÎó´¦Àí£¬²»Òª°ÑÕâ·ùͼ¿´³ÉÊÇ×Ü˵Ã÷ÁË¡£

¡¡
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
²âÊԵĵÚÒ»²¿·ÖÊǼì²éÊý¾Ý¶ÎµÄ¿ªÊ¼²¿·ÖÊÇ·ñÔÚ½ÓÊÕ´°¿ÚÖУ¬µÚ¶þ²¿·ÖÊǼì²éÊý¾Ý¶ÎµÄ½áÊø²¿·ÖÊÇ·ñÒ²ÔÚ½ÓÊÕ´°¿ÚÄÚ£»ÉÏÃæÁ½¸ö¼ì²éͨ¹ýÈκÎÒ»¸ö¾Í˵Ã÷Ëü°üÀ¨´°¿ÚÒªÇóµÄÊý¾Ý¡£Êµ¼ÊÖеÄÇé¿ö»á¸ü¸´ÔÓһЩ£¬ÒòΪÓÐÁã´°¿ÚºÍÁãÊý¾Ý¶Î³¤£¬Òò´ËÎÒÃÇÓÐÏÂÃæËÄÖÖÇé¿ö£º
Çë×¢Òâ½ÓÊÕ´°¿ÚµÄ´óС¿ÉÒÔΪÁ㣬ÔÚ´°¿ÚΪÁãʱËüÖ»ÓÃÀ´½ÓÊÕ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ʱ£¬·ÅÆúÁ¬½Ó²¢Í¨¹ýÓû§¡£ÎÒÃÇÏÂÃæ¾ÍÏêϸ˵Ã÷ºóÒ»ÖÖÇé¿ö¡£

ͨ¹ýÉÏÃæµÄÀý×Ó£¬ÎÒÃÇ¿ÉÒÔ¿´³ö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״̬¡£

ÏÖʵÖеÄÇé¿öÌ«¶àÁË£¬ÎÒÃÇÁоÙһЩ²úÉúRST¿ØÖÆÐÅÏ¢µÄ¹æÔòÈçÏ£ºÍ¨³£Çé¿öÏ£¬RSTÔÚÊÕµ½µÄÐÅÏ¢²»ÊÇÆÚ´ýµÄÐÅϢʱ²úÉú¡£Èç¹ûÔÚ²»ÄÜÈ·¶¨Ê±²»ÒªÇáÒ×·¢ËÍRST¿ØÖÆÐÅÏ¢¡£ÏÂÃæÓÐÈýÀàÇé¿ö£º
Èç¹ûÁ¬½ÓÒѾ²»´æÔÚ£¬¶ø·¢ËÍÀ´µÄÏûÏ¢ÓÖ²»ÊÇRST£¬ÄÇôҪ·µ»ØRST¡£Èç¹ûÏë¾Ü¾ø¶Ô²»´æÔÚµÄÁ¬½Ó½øÐÐSYN£¬¿ÉÒÔʹÓÃÕâÖÖ°ì·¨¡£Èç¹ûµ½´ïµÄÐÅÏ¢ÓÐÒ»¸öACKÓò£¬·µ»ØµÄRSTÐÅÏ¢¿ÉÒÔ´ÓACKÓòÖÐÈ¡µÃÐòÁкţ¬Èç¹ûûÓÐÕâ¸öÓò£¬¾Í°ÑRSTµÄÐòÁкÅÉèÖÃΪ0£¬ACKÓò±»É豸ΪÐòÁкź͵½´ï¶Î³¤¶ÈÖ®ºÍ¡£Á¬½ÓÈÔÈ»´¦ÓÚCLOSE״̬¡£
Èç¹ûÁ¬½Ó´¦ÓÚ·Çͬ²½×´Ì¬£¨LISTEN£¬SYN-SENT£¬SYN-RECEIVED£©£¬¶øÇÒÊÕµ½µÄÈ·ÈÏÊǶÔδ·¢³ö°üµÄÈ·ÈÏ»òÊǽÓÊÕµ½Êý¾Ý¶ÎµÄ°²È«¼¶±ðÓë²»ÄÜÁ¬½ÓÒªÇóµÄÏàÒ»Ò»ÖÂʱ£¬¾Í·¢ËÍRST¡£Èç¹ûSYNδ±»È·ÈÏʱ£¬¶øÇÒÊÕµ½µÄÊý¾Ý¶ÎµÄÓÅÏȼ¶±ÈÒªÇóµÄÓÅÏȼ¶Òª¸ß£¬ÄÇôҪôÌá¸ß±¾µØÓÅÏȼ¶£¨µÃÊÂÏÈÕ÷µÃÓû§ºÍϵͳµÄÐí¿É£©ÒªÃ´·¢ËÍRST£»Èç¹û½ÓÊÕÊý¾Ý¶ÎµÄÓÅÏȼ¶±ÈÒªÇóµÄÓÅÏȼ¶µÍ£¬¾ÍËãÊÇÆ¥ÅäÁË£¬µ±È»Èç¹û¶Ô·½·¢ÏÖÓÅÏȼ¶²»¶ÔÌá¸ßÁËÓÅÏȼ¶£¬ÔÚÏÂÒ»¸ö°üÖÐÌá¸ßÁËÓÅÏȼ¶£¬Õâ¾Í²»ËãÊÇÆ¥ÅäÁË¡£Èç¹ûÁ¬½ÓÒѾ½øÈëSYN£¬ÄÇô½ÓÊÕµ½Êý¾Ý¶ÎµÄÓÅÏȼ¶±ØÐëºÍ±¾µØÓÅÏȼ¶Ò»Ñù£¬·ñÔò·¢ËÍRST¡£Èç¹ûµ½´ïµÄÐÅÏ¢ÓÐÒ»¸öACKÓò£¬·µ»ØµÄRSTÐÅÏ¢¿ÉÒÔ´ÓACKÓòÖÐÈ¡µÃÐòÁкţ¬Èç¹ûûÓÐÕâ¸öÓò£¬¾Í°ÑRSTµÄÐòÁкÅÉèÖÃΪ0£¬ACKÓò±»É豸ΪÐòÁкź͵½´ï¶Î³¤¶ÈÖ®ºÍ¡£Á¬½ÓÈÔÈ»´¦ÓÚÓëÔÀ´ÏàͬµÄ״̬¡£
Èç¹ûÁ¬½Ó´¦ÓÚͬ²½×´Ì¬£¨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µÄ´óС½øÐС£Èç¹ûÓеĶÎÄÚµÄÐÂÀÏÄÚÈÝÖØµþÔÚÒ»Æð£¬ÄÇÖ»Óô¦ÀíеÄÄÇÒ»²¿·Ö¡£ÏÂÃæÊǶԽÓÊÕµ½µÄÊý¾ÝµÄ¿É½ÓÊÜÐÔ²âÊÔÖеÄËÄÖÖÇé¿ö£º
Èç¹û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״̬²¢·µ»Ø¡£