TCP常è§é¢è¯é¢æ»ç»
è¿æ¯ä¸åæè®¸å¯¹ä½ æå¸®å©çä¿¡æ¯
- é¢è¯æåï¼è¿æ¯ä¸ä»½å¤§å½¬ç²¾å¿æ´çç大åé¢è¯æåææ°çï¼ç®åå·²ç»æ´æ°è¿ä»£äº19ä¸ªçæ¬ï¼è´¨éå¾é«ï¼ä¸ä¸ºé¢è¯æé ï¼
- ç¥è¯æçï¼ä¸å±é¢è¯æå/ä¸å¯¹ä¸äº¤æµ/ç®åä¿®æ¹/è¶ æ£çå¦ä¹ æ°å´/å¦ä¹ 路线è§åï¼æ¬¢è¿å å ¥å¤§å½¬çç¥è¯æçï¼ç¹å»é¾æ¥æ¥çæçç详ç»ä»ç»ï¼
TCPåè®®é¢è¯é¢
为ä»ä¹éè¦TCPåè®®ï¼
IP 屿¯ãä¸å¯é ãç,å®ä¸ä¿è¯ç½ç»å ç交ä»ãä¸ä¿è¯ç½ç»å çæåºäº¤ä»ãä¹ä¸ä¿è¯ç½ç»å ä¸çæ°æ®ç宿´æ§ã
å 为 TCP æ¯ä¸ä¸ªå·¥ä½å¨ä¼ è¾å±çå¯é æ°æ®ä¼ è¾çæå¡,å®è½ç¡®ä¿æ¥æ¶ç«¯æ¥æ¶çç½ç»å æ¯æ æåãæ é´éãéåä½åæåºçã
说说TCPç䏿¬¡æ¡æ
å设åé端为客æ·ç«¯ï¼æ¥æ¶ç«¯ä¸ºæå¡ç«¯ãå¼å§æ¶å®¢æ·ç«¯åæå¡ç«¯çç¶æé½æ¯CLOSEDã

- ç¬¬ä¸æ¬¡æ¡æï¼å®¢æ·ç«¯åæå¡ç«¯å起建ç«è¿æ¥è¯·æ±ï¼å®¢æ·ç«¯ä¼éæºçæä¸ä¸ªèµ·å§åºåå·xï¼å®¢æ·ç«¯åæå¡ç«¯åéçåæ®µä¸å
嫿 å¿ä½
SYN=1ï¼åºåå·seq=xãç¬¬ä¸æ¬¡æ¡æå客æ·ç«¯çç¶æä¸ºCLOSEï¼ç¬¬ä¸æ¬¡æ¡æå客æ·ç«¯çç¶æä¸ºSYN-SENTãæ¤æ¶æå¡ç«¯çç¶æä¸ºLISTENã - ç¬¬äºæ¬¡æ¡æï¼æå¡ç«¯å¨æ¶å°å®¢æ·ç«¯åæ¥çæ¥æåï¼ä¼éæºçæä¸ä¸ªæå¡ç«¯çèµ·å§åºåå·yï¼ç¶åç»å®¢æ·ç«¯åå¤ä¸æ®µæ¥æï¼å
¶ä¸å
æ¬æ å¿ä½
SYN=1ï¼ACK=1ï¼åºåå·seq=yï¼ç¡®è®¤å·ack=x+1ãç¬¬äºæ¬¡æ¡æåæå¡ç«¯çç¶æä¸ºLISTENï¼ç¬¬äºæ¬¡æ¡æåæå¡ç«¯çç¶æä¸ºSYN-RCVDï¼æ¤æ¶å®¢æ·ç«¯çç¶æä¸ºSYN-SENTãï¼å ¶ä¸SYN=1表示è¦å客æ·ç«¯å»ºç«ä¸ä¸ªè¿æ¥ï¼ACK=1表示确认åºå·ææï¼ - ç¬¬ä¸æ¬¡æ¡æï¼å®¢æ·ç«¯æ¶å°æå¡ç«¯åæ¥çæ¥æåï¼ä¼ååæå¡ç«¯å鿥æï¼å
¶ä¸å
嫿 å¿ä½
ACK=1ï¼åºåå·seq=x+1ï¼ç¡®è®¤å·ack=y+1ãç¬¬ä¸æ¬¡æ¡æå客æ·ç«¯çç¶æä¸ºSYN-SENTï¼ç¬¬ä¸æ¬¡æ¡æå客æ·ç«¯åæå¡ç«¯çç¶æé½ä¸ºESTABLISHEDãæ¤æ¶è¿æ¥å»ºç«å®æã
ä¸¤æ¬¡æ¡æå¯ä»¥åï¼
乿以éè¦ç¬¬ä¸æ¬¡æ¡æï¼ä¸»è¦ä¸ºäºé²æ¢å·²å¤±æçè¿æ¥è¯·æ±æ¥ææ®µçªç¶åä¼ è¾å°äºæå¡ç«¯ï¼å¯¼è´äº§çé®é¢ã
- æ¯å¦å®¢æ·ç«¯Aååºè¿æ¥è¯·æ±ï¼å¯è½å 为ç½ç»é»å¡åå ï¼Aæ²¡ææ¶å°ç¡®è®¤æ¥æï¼äºæ¯Aåéä¼ ä¸æ¬¡è¿æ¥è¯·æ±ã
- ç¶åè¿æ¥æåï¼çå¾ æ°æ®ä¼ è¾å®æ¯åï¼å°±éæ¾äºè¿æ¥ã
- ç¶åAååºç第ä¸ä¸ªè¿æ¥è¯·æ±çå°è¿æ¥éæ¾ä»¥åçæä¸ªæ¶é´æå°è¾¾æå¡ç«¯Bï¼æ¤æ¶B误认为Aåååºä¸æ¬¡æ°çè¿æ¥è¯·æ±ï¼äºæ¯å°±åAååºç¡®è®¤æ¥ææ®µã
- 妿ä¸éç¨ä¸æ¬¡æ¡æï¼åªè¦Bååºç¡®è®¤ï¼å°±å»ºç«æ°çè¿æ¥äºï¼æ¤æ¶Aä¸ä¼ååºBç确认ä¸ä¸åéæ°æ®ï¼åBä¸ç´çå¾ Aåéæ°æ®ï¼æµªè´¹èµæºã
说说TCPç忬¡æ¥æ

- Açåºç¨è¿ç¨å
åå
¶TCPååºè¿æ¥éæ¾æ¥ææ®µï¼
FIN=1ï¼seq=uï¼ï¼å¹¶åæ¢ååéæ°æ®ï¼ä¸»å¨å ³éTCPè¿æ¥ï¼è¿å ¥FIN-WAIT-1ï¼ç»æ¢çå¾ 1ï¼ç¶æï¼çå¾ Bç确认ã - Bæ¶å°è¿æ¥éæ¾æ¥ææ®µåå³ååºç¡®è®¤æ¥ææ®µï¼
ACK=1ï¼ack=u+1ï¼seq=vï¼ï¼Bè¿å ¥CLOSE-WAITï¼å ³éçå¾ ï¼ç¶æï¼æ¤æ¶çTCPå¤äºåå ³éç¶æï¼Aå°Bçè¿æ¥éæ¾ã - Aæ¶å°Bç确认åï¼è¿å
¥
FIN-WAIT-2ï¼ç»æ¢çå¾ 2ï¼ç¶æï¼çå¾ Bååºçè¿æ¥éæ¾æ¥ææ®µã - Båé宿°æ®ï¼å°±ä¼ååºè¿æ¥éæ¾æ¥ææ®µï¼
FIN=1ï¼ACK=1ï¼seq=wï¼ack=u+1ï¼ï¼Bè¿å ¥LAST-ACKï¼æå确认ï¼ç¶æï¼çå¾ Aç确认ã - Aæ¶å°Bçè¿æ¥éæ¾æ¥ææ®µåï¼å¯¹æ¤ååºç¡®è®¤æ¥ææ®µï¼
ACK=1ï¼seq=u+1ï¼ack=w+1ï¼ï¼Aè¿å ¥TIME-WAITï¼æ¶é´çå¾ ï¼ç¶æãæ¤æ¶TCPæªéæ¾æï¼éè¦ç»è¿æ¶é´çå¾ è®¡æ¶å¨è®¾ç½®çæ¶é´2MSLï¼æå¤§æ¥ææ®µçåæ¶é´ï¼åï¼Aæè¿å ¥CLOSEDç¶æãBæ¶å°Aååºçç¡®è®¤æ¥ææ®µåå ³éè¿æ¥ï¼è¥æ²¡æ¶å°Aååºçç¡®è®¤æ¥ææ®µï¼Bå°±ä¼éä¼ è¿æ¥éæ¾æ¥ææ®µã
ç¬¬åæ¬¡æ¥æä¸ºä»ä¹è¦çå¾ 2MSLï¼
- ä¿è¯Aåéçæåä¸ä¸ªACKæ¥ææ®µè½å¤å°è¾¾Bãè¿ä¸ª
ACKæ¥ææ®µæå¯è½ä¸¢å¤±ï¼Bæ¶ä¸å°è¿ä¸ªç¡®è®¤æ¥æï¼å°±ä¼è¶ æ¶éä¼ è¿æ¥éæ¾æ¥ææ®µï¼ç¶åAå¯ä»¥å¨2MSLæ¶é´å æ¶å°è¿ä¸ªéä¼ çè¿æ¥éæ¾æ¥ææ®µï¼æ¥çAéä¼ ä¸æ¬¡ç¡®è®¤ï¼éæ°å¯å¨2MSL计æ¶å¨ï¼æåAåBé½è¿å ¥å°CLOSEDç¶æï¼è¥Aå¨TIME-WAITç¶æä¸çå¾ ä¸æ®µæ¶é´ï¼èæ¯åéå®ACKæ¥ææ®µåç«å³éæ¾è¿æ¥ï¼åæ æ³æ¶å°Béä¼ çè¿æ¥éæ¾æ¥ææ®µï¼æä»¥ä¸ä¼ååé䏿¬¡ç¡®è®¤æ¥ææ®µï¼Bå°±æ æ³æ£å¸¸è¿å ¥å°CLOSEDç¶æã - 鲿¢å·²å¤±æçè¿æ¥è¯·æ±æ¥ææ®µåºç°å¨æ¬è¿æ¥ä¸ãAå¨åé宿åä¸ä¸ª
ACKæ¥ææ®µåï¼åç»è¿2MSLï¼å°±å¯ä»¥ä½¿è¿ä¸ªè¿æ¥æäº§ççæææ¥ææ®µé½ä»ç½ç»ä¸æ¶å¤±ï¼ä½¿ä¸ä¸ä¸ªæ°çè¿æ¥ä¸ä¸ä¼åºç°æ§çè¿æ¥è¯·æ±æ¥ææ®µã
为ä»ä¹æ¯åæ¬¡æ¥æï¼
å 为å½Server端æ¶å°Client端çSYNè¿æ¥è¯·æ±æ¥æåï¼å¯ä»¥ç´æ¥åéSYN+ACKæ¥æã使¯å¨å
³éè¿æ¥æ¶ï¼å½Server端æ¶å°Client端ååºçè¿æ¥éæ¾æ¥ææ¶ï¼å¾å¯è½å¹¶ä¸ä¼ç«å³å
³éSOCKETï¼æä»¥Server端å
åå¤ä¸ä¸ªACKæ¥æï¼åè¯Clientç«¯ææ¶å°ä½ çè¿æ¥éæ¾æ¥æäºãåªæçå°Server端ææçæ¥æé½åéå®äºï¼è¿æ¶Server端æè½åéè¿æ¥éæ¾æ¥æï¼ä¹å两边æä¼çæ£çæå¼è¿æ¥ãæ
éè¦åæ¬¡æ¥æã
SIN/FINä¸å 嫿°æ®å´è¦æ¶èåºåå·
塿¯éè¦å¯¹ç«¯ç¡®è®¤çï¼ä¸å®æ¶èTCPæ¥æçåºåå·ãSYNåFINéè¦å¯¹ç«¯ç确认ï¼å æ¤éè¦æ¶èä¸ä¸ªåºåå·ã
SYNä½ä¸ºä¸æ¬¡æ¡æç确认ãFINä½ä¸ºåæ¬¡æ¥æç确认ãå¦ææ²¡æåºåå·ï¼ä¼å¯¼è´SYN请æ±å¤æ¬¡éåï¼æå¡ç«¯å¤æ¬¡å¤çï¼é æèµæºæµªè´¹
说说TCPæ¥æé¦é¨æåªäºå段ï¼å ¶ä½ç¨åå嫿¯ä»ä¹ï¼

- 16ä½ç«¯å£å·ï¼æºç«¯å£å·ï¼ä¸»æºè¯¥æ¥ææ®µæ¯æ¥èªåªéï¼ç®æ 端å£å·ï¼è¦ä¼ ç»åªä¸ªä¸å±åè®®æåºç¨ç¨åº
- 32ä½åºå·ï¼ä¸æ¬¡TCPéä¿¡ï¼ä»TCPè¿æ¥å»ºç«å°æå¼ï¼è¿ç¨ä¸æä¸ä¸ªä¼ è¾æ¹åä¸çåèæµçæ¯ä¸ªåèçç¼å·ã
- 32ä½ç¡®è®¤å·ï¼ç¨ä½å¯¹å¦ä¸æ¹åéçtcpæ¥ææ®µçååºãå ¶å¼æ¯æ¶å°çTCPæ¥ææ®µçåºå·å¼å 1ã
- 4ä½å¤´é¨é¿åº¦ï¼è¡¨ç¤ºtcp头鍿å¤å°ä¸ª32bitåï¼4åèï¼ãå 为4ä½æå¤§è½æ è¯15ï¼æä»¥TCPå¤´é¨æé¿æ¯60åèã
- 6使 å¿ä½ï¼URG(ç´§æ¥æéæ¯å¦ææ)ï¼ACkï¼è¡¨ç¤ºç¡®è®¤å·æ¯å¦ææï¼ï¼PSHï¼ç¼å²åºå°æªå¡«æ»¡ï¼ï¼RSTï¼è¡¨ç¤ºè¦æ±å¯¹æ¹éæ°å»ºç«è¿æ¥ï¼ï¼SYNï¼å»ºç«è¿æ¥æ¶æ¯æ å¿æ¥ï¼ï¼FINï¼è¡¨ç¤ºåç¥å¯¹æ¹æ¬ç«¯è¦å ³éè¿æ¥äºï¼
- 16ä½çªå£å¤§å°ï¼æ¯TCPæµéæ§å¶çä¸ä¸ªææ®µãè¿é说ççªå£ï¼æçæ¯æ¥æ¶éåçªå£ãå®åè¯å¯¹æ¹æ¬ç«¯çTCPæ¥æ¶ç¼å²åºè¿è½å®¹çº³å¤å°åèçæ°æ®ï¼è¿æ ·å¯¹æ¹å°±å¯ä»¥æ§å¶åéæ°æ®çé度ã
- 16使 ¡éªåï¼ç±åé端填å ï¼æ¥æ¶ç«¯å¯¹TCPæ¥ææ®µæ§è¡CRCç®æ³ä»¥æ£éªTCPæ¥ææ®µå¨ä¼ è¾è¿ç¨ä¸æ¯å¦æåãæ³¨æï¼è¿ä¸ªæ ¡éªä¸ä» å æ¬TCP头é¨ï¼ä¹å æ¬æ°æ®é¨åãè¿ä¹æ¯TCPå¯é ä¼ è¾çä¸ä¸ªéè¦ä¿éã
- 16ä½ç´§æ¥æéï¼ä¸ä¸ªæ£çåç§»éãå®ååºå·å段çå¼ç¸å 表示æåä¸ä¸ªç´§æ¥æ°æ®çä¸ä¸åèçåºå·ãå æ¤ï¼ç¡®åå°è¯´ï¼è¿ä¸ªå段æ¯ç´§æ¥æéç¸å¯¹å½ååºå·çåç§»ï¼ä¸å¦¨ç§°ä¹ä¸ºç´§æ¥åç§»ãTCPçç´§æ¥æéæ¯åéç«¯åæ¥æ¶ç«¯åéç´§æ¥æ°æ®çæ¹æ³ã
TCPæåªäºç¹ç¹ï¼
- TCPæ¯é¢åè¿æ¥çè¿è¾å±åè®®ã
- ç¹å¯¹ç¹ï¼æ¯ä¸æ¡TCPè¿æ¥åªè½æä¸¤ä¸ªç«¯ç¹ã
- TCPæä¾å¯é 交ä»çæå¡ã
- TCPæä¾å ¨åå·¥éä¿¡ã
- é¢ååèæµã
TCPåUDPçåºå«ï¼
- TCPé¢åè¿æ¥ï¼UDPæ¯æ è¿æ¥çï¼å³åéæ°æ®ä¹åä¸éè¦å»ºç«è¿æ¥ã
- TCPæä¾å¯é çæå¡ï¼UDPä¸ä¿è¯å¯é 交ä»ã
- TCPé¢ååèæµï¼ææ°æ®çæä¸è¿ä¸²æ ç»æçåèæµï¼UDPæ¯é¢åæ¥æçã
- TCPææ¥å¡æ§å¶ï¼UDPæ²¡ææ¥å¡æ§å¶ï¼å æ¤ç½ç»åºç°æ¥å¡ä¸ä¼ä½¿æºä¸»æºçåééçéä½ï¼å¯¹å®æ¶åºç¨å¾æç¨ï¼å¦å®æ¶è§é¢ä¼è®®çï¼ã
- æ¯ä¸æ¡TCPè¿æ¥åªè½æ¯ç¹å°ç¹çï¼UDPæ¯æä¸å¯¹ä¸ãä¸å¯¹å¤ãå¤å¯¹ä¸åå¤å¯¹å¤çéä¿¡æ¹å¼ã
- TCPé¦é¨å¼é20åèï¼UDPçé¦é¨å¼éå°ï¼åªæ8个åèã
TCP å UDP åå«å¯¹åºç常è§åºç¨å±åè®®æåªäºï¼
åºäºTCPçåºç¨å±åè®®æï¼HTTPãFTPãSMTPãTELNETãSSH
- HTTPï¼HyperText Transfer Protocolï¼è¶ ææ¬ä¼ è¾åè®®ï¼ï¼é»è®¤ç«¯å£80
- FTP: File Transfer Protocol (æä»¶ä¼ è¾åè®®), é»è®¤ç«¯å£(20ç¨äºä¼ è¾æ°æ®ï¼21ç¨äºä¼ è¾æ§å¶ä¿¡æ¯)
- SMTP: Simple Mail Transfer Protocol (ç®åé®ä»¶ä¼ è¾åè®®) ,é»è®¤ç«¯å£25
- TELNET: Teletype over the Network (ç½ç»çµä¼ ), é»è®¤ç«¯å£23
- SSHï¼Secure Shellï¼å®å ¨å¤å£³åè®®ï¼ï¼é»è®¤ç«¯å£ 22
åºäºUDPçåºç¨å±åè®®ï¼DNSãTFTPãSNMP
- DNS : Domain Name Service (ååæå¡),é»è®¤ç«¯å£ 53
- TFTP: Trivial File Transfer Protocol (ç®åæä»¶ä¼ è¾åè®®)ï¼é»è®¤ç«¯å£69
- SNMPï¼Simple Network Management Protocolï¼ç®åç½ç»ç®¡çåè®®ï¼ï¼éè¿UDP端å£161æ¥æ¶ï¼åªæTrapä¿¡æ¯éç¨UDP端å£162ã
TCPçç²å åæå
TCPæ¯é¢åæµï¼æ²¡æçéçä¸ä¸²æ°æ®ãTCPåºå±å¹¶ä¸äºè§£ä¸å±ä¸å¡æ°æ®çå ·ä½å«ä¹ï¼å®ä¼æ ¹æ®TCPç¼å²åºçå®é æ åµè¿è¡å çååï¼æä»¥å¨ä¸å¡ä¸è®¤ä¸ºï¼ä¸ä¸ªå®æ´çå å¯è½ä¼è¢«TCPæåæå¤ä¸ªå è¿è¡åéï¼ä¹æå¯è½æå¤ä¸ªå°çå å°è£ æä¸ä¸ªå¤§çæ°æ®å åéï¼è¿å°±æ¯æè°çTCPç²å åæå é®é¢ã
为ä»ä¹ä¼äº§çç²å åæå å¢?
- è¦åéçæ°æ®å°äºTCPåéç¼å²åºç大å°ï¼TCPå°å¤æ¬¡åå ¥ç¼å²åºçæ°æ®ä¸æ¬¡åéåºå»ï¼å°ä¼åçç²å ï¼
- æ¥æ¶æ°æ®ç«¯çåºç¨å±æ²¡æåæ¶è¯»åæ¥æ¶ç¼å²åºä¸çæ°æ®ï¼å°åçç²å ï¼
- è¦åéçæ°æ®å¤§äºTCPåéç¼å²åºå©ä½ç©ºé´å¤§å°ï¼å°ä¼åçæå ï¼
- å¾ åéæ°æ®å¤§äºMSSï¼æå¤§æ¥æé¿åº¦ï¼ï¼TCPå¨ä¼ è¾åå°è¿è¡æå ãå³TCPæ¥æé¿åº¦-TCP头é¨é¿åº¦>MSSã
è§£å³æ¹æ¡ï¼
- åéç«¯å°æ¯ä¸ªæ°æ®å å°è£ 为åºå®é¿åº¦
- 卿°æ®å°¾é¨å¢å ç¹æ®å符è¿è¡åå²
- å°æ°æ®å为两é¨åï¼ä¸é¨åæ¯å¤´é¨ï¼ä¸é¨åæ¯å 容ä½ï¼å ¶ä¸å¤´é¨ç»æå¤§å°åºå®ï¼ä¸æä¸ä¸ªå段声æå 容ä½ç大å°ã
说说TCPæ¯å¦ä½ç¡®ä¿å¯é æ§çå¢ï¼
- TCPçè¿æ¥æ¯åºäºä¸æ¬¡æ¡æï¼èæå¼åæ¯åºäºåæ¬¡æ¥æãç¡®ä¿è¿æ¥åæå¼çå¯é æ§ã
- TCPçå¯é æ§ï¼è¿ä½ç°å¨æç¶æãTCPä¼è®°å½åªäºæ°æ®åéäºï¼åªäºæ°æ®è¢«æ¥æ¶äºï¼åªäºæ²¡æè¢«æ¥åï¼å¹¶ä¸ä¿è¯æ°æ®å æåºå°è¾¾ï¼ä¿è¯æ°æ®ä¼ è¾ä¸åºå·®éã
- 确认åéä¼ æºå¶ï¼å»ºç«è¿æ¥æ¶ä¸æ¬¡æ¡æåæ¥åæ¹çâåºåå· + ç¡®è®¤å· + çªå£å¤§å°ä¿¡æ¯âï¼æ¯ç¡®è®¤éä¼ ãæµæ§çåºç¡ãä¼ è¾è¿ç¨ä¸ï¼å¦æChecksumæ ¡éªå¤±è´¥ãä¸¢å æå»¶æ¶ï¼åé端éä¼
- æµéæ§å¶ï¼çªå£å计æ¶å¨ç使ç¨ãTCPçªå£ä¸ä¼ææåæ¹è½å¤å鿥æ¶çæå¤§æ°æ®é
- æ¥å¡æ§å¶
TCPçéä¼ æºå¶æ¯ä»ä¹ï¼
ç±äºTCPçä¸å±ç½ç»ï¼ç½ç»å±ï¼å¯è½åºç°ä¸¢å¤±ãé夿失åºçæ åµï¼TCPåè®®æä¾å¯é æ°æ®ä¼ è¾æå¡ã为ä¿è¯æ°æ®ä¼ è¾çæ£ç¡®æ§ï¼TCPä¼éä¼ å ¶è®¤ä¸ºå·²ä¸¢å¤±ï¼å æ¬æ¥æä¸çæ¯ç¹é误ï¼çå ãTCP使ç¨ä¸¤å¥ç¬ç«çæºå¶æ¥å®æéä¼ ï¼ä¸æ¯åºäºæ¶é´ï¼äºæ¯åºäºç¡®è®¤ä¿¡æ¯ã
TCPå¨åéä¸ä¸ªæ°æ®ä¹åï¼å°±å¼å¯ä¸ä¸ªå®æ¶å¨ï¼è¥æ¯å¨è¿ä¸ªæ¶é´å æ²¡ææ¶å°åéæ°æ®çACKç¡®è®¤æ¥æï¼åå¯¹è¯¥æ¥æè¿è¡éä¼ ï¼å¨è¾¾å°ä¸å®æ¬¡æ°è¿æ²¡ææåæ¶æ¾å¼å¹¶åéä¸ä¸ªå¤ä½ä¿¡å·ã
说ä¸TCPçæ»å¨çªå£æºå¶
TCP å©ç¨æ»å¨çªå£å®ç°æµéæ§å¶ãæµéæ§å¶æ¯ä¸ºäºæ§å¶åéæ¹åééçï¼ä¿è¯æ¥æ¶æ¹æ¥å¾åæ¥æ¶ã TCPä¼è¯çåæ¹é½åèªç»´æ¤ä¸ä¸ªåéçªå£åä¸ä¸ªæ¥æ¶çªå£ãæ¥æ¶çªå£å¤§å°åå³äºåºç¨ãç³»ç»ã硬件çéå¶ãåéçªå£ååå³äºå¯¹ç«¯éåçæ¥æ¶çªå£ãæ¥æ¶æ¹åéçç¡®è®¤æ¥æä¸çwindowåæ®µå¯ä»¥ç¨æ¥æ§å¶åéæ¹çªå£å¤§å°ï¼ä»èå½±ååéæ¹çåééçãå°æ¥æ¶æ¹çç¡®è®¤æ¥æwindowåæ®µè®¾ç½®ä¸º 0ï¼ååéæ¹ä¸è½åéæ°æ®ã

TCP头å å«windowåæ®µï¼16bitä½ï¼å®ä»£è¡¨çæ¯çªå£çåè容éï¼æå¤§ä¸º65535ãè¿ä¸ªåæ®µæ¯æ¥æ¶ç«¯åè¯åé端èªå·±è¿æå¤å°ç¼å²åºå¯ä»¥æ¥æ¶æ°æ®ãäºæ¯åé端就å¯ä»¥æ ¹æ®è¿ä¸ªæ¥æ¶ç«¯çå¤çè½åæ¥åéæ°æ®ï¼èä¸ä¼å¯¼è´æ¥æ¶ç«¯å¤çä¸è¿æ¥ãæ¥æ¶çªå£ç大尿¯çº¦çäºåéçªå£ç大å°ã
详ç»è®²ä¸ä¸æ¥å¡æ§å¶ï¼
鲿¢è¿å¤çæ°æ®æ³¨å ¥å°ç½ç»ä¸ã å ç§æ¥å¡æ§å¶æ¹æ³ï¼æ ¢å¼å§( slow-start )ãæ¥å¡é¿å ( congestion avoidance )ãå¿«éä¼ ( fast retransmit )åå¿«æ¢å¤( fast recovery )ã

æ ¢å¼å§
ææ¥å¡çªå£ cwnd 设置为ä¸ä¸ªæå¤§æ¥ææ®µMSSçæ°å¼ãè卿¯æ¶å°ä¸ä¸ªå¯¹æ°çæ¥ææ®µç确认åï¼ææ¥å¡çªå£å¢å è³å¤ä¸ä¸ªMSSçæ°å¼ãæ¯ç»è¿ä¸ä¸ªä¼ è¾è½®æ¬¡ï¼æ¥å¡çªå£ cwnd å°±å åã 为äºé²æ¢æ¥å¡çªå£cwndå¢é¿è¿å¤§å¼èµ·ç½ç»æ¥å¡ï¼è¿éè¦è®¾ç½®ä¸ä¸ªæ ¢å¼å§é¨éssthreshç¶æåéã
å½ cwnd < ssthresh æ¶ï¼ä½¿ç¨æ ¢å¼å§ç®æ³ã
å½ cwnd > ssthresh æ¶ï¼åæ¢ä½¿ç¨æ ¢å¼å§ç®æ³èæ¹ç¨æ¥å¡é¿å ç®æ³ã
å½ cwnd = ssthresh æ¶ï¼æ¢å¯ä½¿ç¨æ ¢å¼å§ç®æ³ï¼ä¹å¯ä½¿ç¨æ¥å¡æ§å¶é¿å ç®æ³ã
æ¥å¡é¿å
让æ¥å¡çªå£cwndç¼æ ¢å°å¢å¤§ï¼æ¯ç»è¿ä¸ä¸ªå¾è¿æ¶é´RTTå°±æåéæ¹çæ¥å¡çªå£cwndå 1ï¼è䏿¯å åãè¿æ ·æ¥å¡çªå£cwndæçº¿æ§è§å¾ç¼æ ¢å¢é¿ã
æ è®ºå¨æ ¢å¼å§é¶æ®µè¿æ¯å¨æ¥å¡é¿å é¶æ®µï¼åªè¦å鿹夿ç½ç»åºç°æ¥å¡ï¼å ¶æ ¹æ®å°±æ¯æ²¡ææ¶å°ç¡®è®¤ï¼ï¼å°±è¦ææ ¢å¼å§é¨éssthresh设置为åºç°æ¥å¡æ¶çåé æ¹çªå£å¼çä¸åï¼ä½ä¸è½å°äº2ï¼ãç¶åææ¥å¡çªå£cwndéæ°è®¾ç½®ä¸º1ï¼æ§è¡æ ¢å¼å§ç®æ³ãè¿æ ·åçç®çå°±æ¯è¦è¿ éåå°ä¸»æºåéå°ç½ç»ä¸çåç»æ°ï¼ä½¿å¾åç æ¥å¡çè·¯ç±å¨æè¶³å¤æ¶é´æéåä¸ç§¯åçåç»å¤ç宿¯ã
å¿«éä¼
ææ¶ä¸ªå«æ¥ææ®µä¼å¨ç½ç»ä¸ä¸¢å¤±ï¼ä½å®é ä¸ç½ç»å¹¶æªåçæ¥å¡ã妿åéæ¹è¿è¿æ¶ä¸å°ç¡®è®¤ï¼å°±ä¼äº§çè¶ æ¶ï¼å°±ä¼è¯¯è®¤ä¸ºç½ç»åçäºæ¥å¡ãè¿å°±å¯¼è´åéæ¹é误å°å¯å¨æ ¢å¼å§ï¼ææ¥å¡çªå£cwndå设置为1ï¼å èéä½äºä¼ è¾æçã
å¿«éä¼ ç®æ³å¯ä»¥é¿å è¿ä¸ªé®é¢ãå¿«éä¼ ç®æ³é¦å è¦æ±æ¥æ¶æ¹æ¯æ¶å°ä¸ä¸ªå¤±åºçæ¥ææ®µåå°±ç«å³ååºéå¤ç¡®è®¤ï¼ä½¿å鿹忩ç¥éææ¥ææ®µæ²¡æå°è¾¾å¯¹æ¹ã
åéæ¹åªè¦ä¸è¿æ¶å°ä¸ä¸ªéå¤ç¡®è®¤å°±åºå½ç«å³éä¼ å¯¹æ¹å°æªæ¶å°çæ¥ææ®µï¼èä¸å¿ ç»§ç»çå¾ éä¼ è®¡æ¶å¨å°æãç±äºå鿹尽æ©éä¼ æªè¢«ç¡®è®¤çæ¥ææ®µï¼å æ¤éç¨å¿«éä¼ åå¯ä»¥ä½¿æ´ä¸ªç½ç»ååéæé«çº¦20%ã
å¿«æ¢å¤
å½åéæ¹è¿ç»æ¶å°ä¸ä¸ªéå¤ç¡®è®¤ï¼å°±ä¼ææ ¢å¼å§é¨éssthreshååï¼æ¥çæcwndå¼è®¾ç½®ä¸ºæ ¢å¼å§é¨éssthreshåååçæ°å¼ï¼ç¶åå¼å§æ§è¡æ¥å¡é¿å ç®æ³ï¼ä½¿æ¥å¡çªå£ç¼æ ¢å°çº¿æ§å¢å¤§ã
å¨éç¨å¿«æ¢å¤ç®æ³æ¶ï¼æ ¢å¼å§ç®æ³åªæ¯å¨TCPè¿æ¥å»ºç«æ¶åç½ç»åºç°è¶ æ¶æ¶æä½¿ç¨ã éç¨è¿æ ·çæ¥å¡æ§å¶æ¹æ³ä½¿å¾TCPçæ§è½æææ¾çæ¹è¿ã
ä»ä¹æ¯ SYN æ»å»?
æä»¬é½ç¥é TCP è¿æ¥å»ºç«æ¯éè¦ä¸æ¬¡æ¡æ,å设æ»å»è çæ¶é´ä¼ªé ä¸å IP å°åç SYN æ¥æ,æå¡ç«¯æ¯æ¥æ¶å° ä¸ä¸ª SYN æ¥æ,å°±è¿å ¥ SYN_RCVD ç¶æ,使å¡ç«¯åéåºå»ç ACK + SYN æ¥æ,æ æ³å¾å°æªç¥ IP 主æºçACK åºç,ä¹ èä¹ ä¹å°±ä¼å 满æå¡ç«¯ç SYN æ¥æ¶éå(æªè¿æ¥éå),ä½¿å¾æå¡å¨ä¸è½ä¸ºæ£å¸¸ç¨æ·æå¡ã
å¦ä½å¯ä¸ç¡®å®ä¸ä¸ªTCPè¿æ¥å¢ï¼
TCP åå ç»å¯ä»¥å¯ä¸çç¡®å®ä¸ä¸ªè¿æ¥,åå ç»å æ¬å¦ä¸: æºå°å æºç«¯å£ ç®çå°å ç®ç端å£ã
æºå°ååç®çå°åçåæ®µ(32ä½)æ¯å¨ IP 头é¨ä¸,ä½ç¨æ¯éè¿ IP åè®®å鿥æç»å¯¹æ¹ä¸»æºã
æºç«¯å£åç®ç端å£çåæ®µ(16ä½)æ¯å¨ TCP 头é¨ä¸,ä½ç¨æ¯åè¯ TCP åè®®åºè¯¥ææ¥æåç»åªä¸ªè¿ç¨ã
说说TCP KeepAlive çåºæ¬åçï¼
TCP çè¿æ¥ï¼å®é 䏿¯ä¸ç§çº¯è½¯ä»¶å±é¢çæ¦å¿µï¼å¨ç©çå±é¢å¹¶æ²¡æâè¿æ¥âè¿ç§æ¦å¿µãTCP éä¿¡åæ¹å»ºç«äº¤äºçè¿æ¥ï¼ä½æ¯å¹¶ä¸æ¯ä¸ç´å卿°æ®äº¤äºï¼æäºè¿æ¥ä¼å¨æ°æ®äº¤äºå®æ¯åï¼ä¸»å¨éæ¾è¿æ¥ï¼èæäºä¸ä¼ãå¨é¿æ¶é´æ æ°æ®äº¤äºçæ¶é´æ®µå ï¼äº¤äºåæ¹é½æå¯è½åºç°æçµãæ»æºãå¼å¸¸éå¯çåç§æå¤ï¼å½è¿äºæå¤åçä¹åï¼è¿äº TCP è¿æ¥å¹¶æªæ¥å¾åæ£å¸¸éæ¾ï¼å¨è½¯ä»¶å±é¢ä¸ï¼è¿æ¥çå¦ä¸æ¹å¹¶ä¸ç¥éå¯¹ç«¯çæ åµï¼å®ä¼ä¸ç´ç»´æ¤è¿ä¸ªè¿æ¥ï¼é¿æ¶é´ç积累ä¼å¯¼è´é常å¤çåæå¼è¿æ¥ï¼é æç«¯ç³»ç»èµæºçæ¶èåæµªè´¹ï¼ä¸ºäºè§£å³è¿ä¸ªé®é¢ï¼å¨ä¼ è¾å±å¯ä»¥å©ç¨ TCP ç KeepAlive æºå¶å®ç°æ¥å®ç°ã主æµçæä½ç³»ç»åºæ¬é½å¨å æ ¸éæ¯æäºè¿ä¸ªç¹æ§ã
TCP KeepAlive çåºæ¬åçæ¯ï¼é䏿®µæ¶é´ç»è¿æ¥å¯¹ç«¯åéä¸ä¸ªæ¢æµå ï¼å¦ææ¶å°å¯¹æ¹ååºç ACKï¼åè®¤ä¸ºè¿æ¥è¿æ¯åæ´»çï¼å¨è¶ è¿ä¸å®éè¯æ¬¡æ°ä¹åè¿æ¯æ²¡ææ¶å°å¯¹æ¹çååºï¼å丢å¼è¯¥ TCP è¿æ¥ã
åè龿¥ï¼https://hit-alibaba.github.io/interview/basic/network/TCP.html