TCP¼à¿ØÃæÁÙµÄÌôÕ½
´óÁ¿Êµ¼ÊÒµÎñÊôÓÚÇëÇó-ÏìÓ¦µÄͨÐÅģʽ£¬±ÈÈçÊý¾Ý¿â¡¢WebÓ¦Óõȡ£¶ÔÕâЩӦÓöøÑÔ£¬¶Ëµ½¶ËµÄÁ¬½ÓÊý¾ÝÊÇÖØÒªµÄ¼à¿ØÖ¸±ê¡£ÓÈÆä¶ÔÔÆÉÏÓû§¶øÑÔ£¬Æä¸ÐÖªµ½µÄÔÆÓ¦ÓõÄÑÓ³ÙÊÇÖն˵ÄÑÓ³Ù£¬Ò²¾ÍÊÇÕû¸öÍøÂç·¾¶ÉϵÄÑÓ³Ù¡£ÀíÏëÇé¿öÏ£¬ÒªÇóͳ¼Æµ½Â·¾¶ÉÏÿ¸ö½Úµã´¦ÀíÑÓ³ÙÒÔ¼°ÍøÂçÉÏËùÓÐÑÓ³ÙµÄ×ܺͣ¬ÒÔ׼ȷʶ±ðÍøÂçÒì³££¬¶¨Î»ÍøÂçÎÊÌâ¡£
È»¶ø£¬´«Í³µÄTCP¼à¿Ø·½·¨´æÔÚÒ»¶¨¾ÖÏÞÐÔ£¬ÄÑÒÔÓ¦¶ÔÔÆ³¡¾°´ó¹æÄ£ÍøÂçÏ£¬¶Ëµ½¶ËTCP³£Ì¬»¯¼à¿ØµÄÐèÒª¡£
²É¼¯µ½µÄÐÅÏ¢ÓÐÏÞ£º´«Í³TCP¼à¿Ø¹¤¾ßÍùÍù½öÌṩÁ¬½ÓÁ£¶ÈµÄÐÅÏ¢£¬¹ÊÖ»ÄܸÐÖªµ½Á¬½ÓÕûÌå״̬£¬±ÈÈçÊÕ·¢Êý¾ÝÁ¿¡¢RTT¡¢ÓµÈû´°¿ÚµÈ£¬ÄÑÒÔ»ñÈ¡ÇëÇóÁ£¶ÈµÄ¼à¿ØÐÅÏ¢£»
ÒýÈë½Ï¸ßµÄ¶îÍâÐÔÄܸºÔØ£º×¥°üÊÇÁíÒ»ÖÖ³£ÓõÄÍøÂç¼à¿Ø·½Ê½£¬ËäÈ»¸Ã·½Ê½Äܹ»»ñÈ¡µ½Ï൱¶àµÄÐÅÏ¢£¬µ«ÊÇÔËÐÐʱÒýÈë½Ï´ó¿ªÏú£¬Ó¦ÓÃÖиü¶à×÷Ϊµ÷ÊÔÊֶΣ¬¶ø²»ÄÜÂú×㳣̬»¯¼à¿ØµÄÒªÇó£»
¶ÔÓû§ÒµÎñÂß¼ÓÐÇÖÈ룺ÓÐÒ»Àà¸ú×Ù·½Ê½£¬ÈëÇÖʽµØÔÚÒµÎñ´úÂëÖÐÌí¼ÓÂñµã£¬¼Ç¼¸÷¸ö½Úµã״̬ÐÅÏ¢£¬Í¨¹ý»ã×Ü·ÖÎö£¬»ñÈ¡¸÷½×¶ÎºÄʱµÈÐÅÏ¢¡£µ«ÊÇÕâÖÖ·½Ê½ÒÀÀµÒµÎñÂß¼ÊÊÅ䣬ʵÓÃÐÔ²»×ã¡£
ÏÖÓеÄTCP¼à¿Ø¹¤¾ßÖ÷ÒªÓУº
netstat£º¿ÉÏÔʾ¸÷ÖÖÍøÂçÐÅÏ¢£¬°üÀ¨ÍøÂçÁ¬½Ó¡¢Â·ÓÉ±í¡¢½Ó¿Úͳ¼ÆÐÅÏ¢¡¢Á¬½ÓÐÅÏ¢µÈ¡£¶ÔTCP²ã£¬Äܹ»ÏÔʾÁ¬½Ó״̬¡¢ÊÕ·¢¶ÓÁÐÊý¾Ý£¬Í³¼Æ¶ª°üÊýÁ¿ÓëÔÒòµÈ¡£½ö²É¼¯µ½Á¬½ÓÁ£¶ÈµÄÐÅÏ¢¡£
ss£ºÊÇÒ»¸öÓÃÓÚ²é¿´ÍøÂçÌ×½Ó×Ö״̬µÄ¹¤¾ß£¬¿ÉÒÔ»ñÈ¡µ½¶àÖÖTCPÁ¬½ÓµÄÐÅÏ¢¡£°üÀ¨ËÄÔª×é¡¢Á¬½Ó״̬¡¢´°¿Ú´óС¡¢ÖØ´«ÐÅÏ¢µÈ¡£ÓënetstatÀàËÆ£¬Ò²½öÕë¶ÔÁ¬½ÓÁ£¶È¡£
tcpdump£ºÊÇÒ»ÖÖÊý¾Ý°ü·ÖÎö¹¤¾ß£¬Äܹ»×¥È¡ÍøÂçÊý¾Ý°ü£¬²É¼¯Êý¾Ý°üµÄÊÕ·¢Ê±¼ä´ÁÐÅÏ¢ÓëÊý¾Ý°üÄÚÈÝ¡£¸Ã·½Ê½»áÒýÈë½Ï´óµÄÐÔÄÜ¿ªÏú¡£
socket timestamp£ºÄܹ»ÔÚ¼à¿ØTCP socketµÄÊÕ·¢°üʱ¼ä´Á£¬ÅäºÏÓ¦Óòà²É¼¯Ê±¼ä£¬Äܹ»»ñÈ¡µ½Õû¸öͨÐÅ·¾¶ÉϵÄÑÓ³Ù¡£¸Ã·½Ê½ÐèÒªÓû§ÐÞ¸ÄÒµÎñÂß¼ÊÊÅä¡£
»ùÓÚeBPFµÄTCPÈ«Á´Â·¼à¿Ø¼¼Êõ
ΪÁ˿˷þÁË´«Í³TCP¼à¿Ø·½Ê½µÄȱÏÝ£¬ÁúòáÉçÇø»ùÓÚeBPF¿ª·¢ÊµÏÖÁËÒ»ÖֵͿªÏú¡¢¿É³£Ì¬»¯µÄÇëÇó-ÏìӦģʽµÄ TCP ʱÑÓ¼à¿Ø¹¤¾ßtcprt£¬tcprtÄܹ»ÔÚTCP²ã£¬ÃæÏòÁ´Â·¡¢TCPÁ¬½Ó¡¢Ó¦ÓýøÐÐʵʱ¼à¿Ø£¬Îª¹ÊÕÏÕï¶Ï¡¢ÐÔÄÜÓÅ»¯Ìṩ·ÖÎöÒÀ¾Ý¡£ÔÚWeb·þÎñ¡¢MySQLÊý¾Ý¿â·þÎñµÈ³¡¾°ÖоßÓÐÓ¦ÓüÛÖµ¡£
tcprt»ùÓÚeBPFµÄtracepointºÍsockops»úÖÆÊµÏÖ£¬Í¨¹ý¶ÔTCPÁ¬½ÓÊÕ·¢°ü״̬µÄ¸ú×Ù£¬¼à¿ØÓ¦Óõġ°ÇëÇó¡±Óë¡°ÏìÓ¦¡±´¦Àí״̬£¬²¢²É¼¯Ïà¹ØµÄÍøÂç²ÎÊý£¬°üÀ¨ÇëÇóÔÚÐÒéÕ»ÖнÓÊÕµÄʱ¼ä£¬¼°·þÎñ½ø³Ì´¦Àí¹ý³ÌÖеĺÄʱµÈÊý¾ÝÐÅÏ¢¡£×îÖÕÒÔÈÕÖ¾ÐÎʽ´«µÝµ½Óû§¿Õ¼ä¡£

ͼ£ºtcprtÐÅÏ¢²É¼¯Ê¾Òâͼ
ÉÏͼչʾÁËtcprt»®·ÖÒµÎñÁ÷Á¿µÄ¸÷¸ö½×¶Î¡£¿Í»§¶Ë£¨Client£©Ïò·þÎñ¶Ë£¨Server£©·¢Ë͵ĵÚN¸öÇëÇó£¨request£©±íʾΪReqN¡£¸ÃÇëÇóÓÉReqN-1ºÍReqN-2Á½¸öÊý¾Ý°ü×é³É¡£·þÎñ¶ËÊÕµ½µÚÒ»¸ö°üµÄʱ¼ä±»¼Ç¼ΪT0£¬µÚ¶þ¸ö°üµÄʱ¼ä±»¼Ç¼ΪT1¡£·þÎñ¶ËÊÕµ½ÇëÇóºó½øÐд¦Àí£¬Íê³É´¦Àíºó»áÏò¿Í»§¶Ë·¢ËÍÁ½¸öÏìÓ¦µÄÊý¾Ý°üRspN-1ºÍRspN-2£¬·þÎñ¶Ë·¢Ë͵ÚÒ»¸ö°üµÄʱ¼ä±»¼Ç¼ΪT2¡£¿Í»§¶ËÊÕµ½ÏìÓ¦°üºó»á·¢ËÍÈ·ÈÏÐÅÏ¢ACK¸ø·þÎñPGµç¾º¹ÙÍø£¬·þÎñ¶ËÊÕµ½×îºóÒ»¸öACKµÄʱ¼ä±»¼Ç¼ΪT3¡£
tcprt»ùÓÚÒÔÉϵÄʱ¼äµãµÄ¼Ç¼£¬¿ÉÒԲɼ¯µ½ÒÔÏÂÐÅÏ¢£º
£¨1£©upload_time£ºÓû§ÇëÇóÉÏ´«ËùʹÓõÄʱ¼ä£»
£¨2£©process_time£º·þÎñ¶ËµÄ´¦Àíʱ¼ä¡£·þÎñ¶Ë´ÓÊÕµ½×îºóÒ»¸öÇëÇóµÄÊý¾Ý°ü¿ªÊ¼£¬µ½·þÎñ¶ËÏò¿Í»§¶Ë¿ªÊ¼·¢ËÍÏìÓ¦µÄÊý¾Ý°üΪֹ£¬Õâ¶Îʱ¼äΪ·þÎñ¶ËµÄ´¦Àíʱ¼ä£»
£¨3£©download_time£ºÊý¾ÝÏÂÔØÊ±¼ä¡£´Ó·þÎñ¶Ë¿ªÊ¼Ïò¿Í»§¶Ë·¢ËÍÏìÓ¦µÄÊý¾Ý°ü¿ªÊ¼£¬µ½·þÎñ¶ËÊÕµ½¿Í»§¶Ë×îºóÒ»¸öACKΪֹ£¬Õâ¶Îʱ¼äΪÊý¾ÝÏÂÔØÊ±¼ä¡£¶ÔÓÚÏÂÔØ±È½Ï´óµÄÊý¾ÝÏìÓ¦£¬¸ÃÐÅÏ¢µÄ»ñÈ¡½ÏÎªÖØÒª¡£´ËÍ⣬tcprt»¹ÊÕ¼¯ÇëÇó´¦Àí¹ý³ÌÖеÄTCPÁ¬½ÓRTT¡¢ÂÒÐò¡¢Êý¾ÝÁ¿µÈÐÅÏ¢¡£
tcprtͨ¹ýÃüÁîÐУ¬Ìṩ¿ª¹Ø¹¦ÄÜ£¬²¢ÌṩÅäÖÃÎļþÒÔ±ãÓû§ÅäÖùýÂËÌõ¼þ¡£ÅäÖÃÎļþλÓÚ/etc/tcprt-bpf/tcprt.yaml£¬ÔÊÐíÅäÖùýÂ˶˿ڻò¶Ë¿Ú·¶Î§¡£tcprtÆô¶¯ºó£¬»á½«¼à¿Ø½á¹ûÒÔdebugfsµÄ·½Ê½Êä³öµ½/sys/kernel/debug/tcp-rt·¾¶ÏµÄrt-network-log*ΪÃû³ÆµÄÎļþÖС£ÎļþÃû³ÆµÄºó׺ΪCPUÄں˵ÄÐòºÅ¡£
tcprt½«Ò»¶ÔÇëÇó-ÏìÓ¦ÊÓ×÷Ò»¸öTASK£¬ÆäÌṩµÄ¼à¿ØÐÅÏ¢Ö÷Òª°üÀ¨£º
TASK¿ªÊ¼Ê±¼ä£¬¿ªÊ¼Ê±¼äµÄÃ벿·Ö£»
TASK¿ªÊ¼Ê±¼ä£¬¿ªÊ¼Ê±¼äµÄ΢Ã벿·Ö£»
TCPÁ¬½ÓµÄ¶Ô¶ËIPµØÖ·£»
TCPÁ¬½ÓµÄ¶Ô¶Ë¶Ë¿Ú£»
TCPÁ¬½ÓµÄ±¾µØIPµØÖ·£»
TCPÁ¬½ÓµÄ±¾µØ¶Ë¿Ú£»
TASK·¢Ë͵ÄÊý¾ÝÁ¿£¬µ¥Î»£ºByte£»
TASK×ܺÄʱ¡£¼´µÚÒ»¸öÇëÇósegmentµ½´ïÓë×îºóÒ»¸öÏìÓ¦µÄsegment±»ackÖ®¼äµÄʱ¼ä¼ä¸ô£¬µ¥Î»£º¦Ìs£»
TASK×îСµÄTCP RTT£¨Round Trip Time£©£¬µ¥Î»£º¦Ìs£»
TASKÖØ´«·¢Ë͵ÄTCP±¨ÎĶΣ¨TCP segment£©ÊýÁ¿£»
TASKÐòºÅ£¬TCP½¨Á¢ºóµÄµÚÒ»¸öTASKÐòºÅΪ1£»
TASK·þÎñÑÓʱ£¬¼´×îºóÒ»¸öÇëÇóµÄsegmentµ½´ïÓëµÚÒ»¸öÏìÓ¦µÄsegment·¢ËÍÖ®¼äµÄʱ¼ä¼ä¸ô£¬µ¥Î»£º¦Ìs£»
TASKÉÏËÍÑÓʱ¡£¼´µÚÒ»¸öÇëÇósegmentµ½´ïÓë×îºóÒ»¸öÇëÇósegmentµ½´ïÖ®¼äµÄʱ¼ä¼ä¸ô£¬µ¥Î»£º¦Ìs£»
TASK½ÓÊÕµÄÊý¾ÝÁ¿£¬µ¥Î»£ºByte£»
TASK¹ý³ÌÊÇ·ñ·¢Éú½ÓÊÕÂÒÐò£¬²ÎÊýֵ˵Ã÷£º1±íʾ·¢Éú£»0±íʾûÓз¢Éú£»
TASK¹ý³ÌÖÐTCPʹÓõÄ×î´ó±¨Îij¤¶È£¨MSS£©£¬µ¥Î»£ºByte¡£
tcprt ¹¤¾ßÒÑ¿ªÔ´µ½AnolisÉçÇø£¬Ö§³ÖÔÚ Anolis OSÄں˰汾5.10-17¼°ÒÔÉϰ汾µÄϵͳÖа²×°Ê¹Óã¬ÊµÏÖ¶ÔTCPÁ¬½Ó״̬µÄ¾«Ï¸»¯¼à¿Ø¡£
´úÂë²Ö¿âµØÖ·£ºhttps://gitee.com/anolis/tcprt
°×ƤÊ飺https://openanolis.cn/assets/static/eBPF_technical_practice_v2.pdf
²úÆ·ÏÂÔØ
²úÆ·¼¤»î
ÊÛǰ×Éѯ
ÊÛºó·þÎñ
»Øµ½¶¥²¿
ÊÛǰ×Éѯ
ÊÛºó·þÎñ