当前位置:网站首页>TCP packet sticking problem
TCP packet sticking problem
2022-07-06 17:53:00 【TABE_】
Here's the catalog title
TCP Stick package problem
TCP Sticky packet means that the data of several packets sent by the sender arrive at the receiver and become a packet , From the receive buffer , The head of the next packet of data is next to the tail of the previous one , There are many reasons for sticking , It could be from the sender , It could be from the receiver .
cause TCP The reason for sticking the bag
Sender reason
The sending end sends multiple packets to the receiving end , More efficient sending to the receiver , So the optimization algorithm is used (Nagle Algorithm ), Will be multiple with smaller intervals 、 Data with a small amount of data , Merge into a large block of data , Then the packet is sealed .
TCP By default Nagle Algorithm ( The main role : Reduce the number of newspaper segments in the network ), and Nagle Algorithms do two things :
- Only the last group is confirmed , Will send the next packet
- Collect multiple subgroups , Send together when a confirmation arrives
Nagle The algorithm may cause packet sticking problem on the sender .
The receiver's reason
TCP When a packet is received , It will not be handed over to the application layer immediately for processing , In other words, the application layer does not immediately process . actually ,TCP Save the received packet in the receiving cache , The application then actively reads the received packets from the cache . thus , If TCP The speed of receiving packets to the cache is faster than that of applications reading packets from the cache , Multiple packages will be cached , It is possible for an application to read multiple packages that are glued together .
How to deal with it TCP Sticky package
If multiple groups of data sent by the sender are originally different parts of the same piece of data , For example, a file is divided into multiple parts and sent , At this time, of course, there is no need to deal with the sticking phenomenon . If multiple packets are irrelevant , Even juxtaposition , Then we must deal with the sticking phenomenon at this time
The sender
For the packet sticking problem caused by the sender , Can be closed by Nagle Algorithm to solve , Use TCP_NODELAY Option to turn off the algorithm .
The receiving party
The receiver has no way to deal with packet sticking , Only the application layer can handle the problem .
application layer
The solution of application layer is simple and feasible , It can not only solve the sticking problem of the receiver , It can also solve the packet sticking problem of the sender .
terms of settlement : Loop processing , When an application reads a packet from the receive cache , After reading a piece of data , You should cycle through the next piece of data , Until all the data is processed , But how to judge the length of each data ?
- Format data : Each data has a fixed format ( Start Rune , Terminator ), This method is simple and easy , However, when selecting the start and end characters, make sure that the beginning and ending characters are not included inside each data .
- Sending length : When sending each piece of data , Send the length of the data together , For example, before prescribing data 4 Bits are the length of the data , The application layer can judge the start and end position of each group according to its length .
Why? UDP No sticking problem
TCP In order to ensure reliable transmission and reduce additional overhead ( Every time the contract is awarded, it has to be verified ), Stream based transmission is adopted , Stream based transport does not consider messages to be one by one , Is unprotected message boundary ( Protect message boundaries : Transmission protocol refers to the transmission of data on the Internet as an independent message , The receiver can only accept one independent message at a time ).
UDP Is message transmission oriented , There are protected message boundaries , The receiving party accepts only one piece of information at a time , So there is no sticking problem .
for instance : There are three packets , The sizes are 2k、4k、6k, If the UDP Send it , No matter how big the receiver's receive cache is , We must send at least three times before we can send the data packet , But use TCP If the agreement is sent , We only need the receiver's receive cache to have 12k Size , You can put this... At one time 3 All packets have been sent .
边栏推荐
- Scratch epidemic isolation and nucleic acid detection Analog Electronics Society graphical programming scratch grade examination level 3 true questions and answers analysis June 2022
- 趣-关于undefined的问题
- 偷窃他人漏洞报告变卖成副业,漏洞赏金平台出“内鬼”
- Flet教程之 13 ListView最常用的滚动控件 基础入门(教程含源码)
- 李書福為何要親自掛帥造手機?
- Kernel link script parsing
- Optimization of middle alignment of loading style of device player in easycvr electronic map
- 10 advanced concepts that must be understood in learning SQL
- 酷雷曼多种AI数字人形象,打造科技感VR虚拟展厅
- Single responsibility principle
猜你喜欢
Smart street lamp based on stm32+ Huawei cloud IOT design
Awk command exercise
[rapid environment construction] openharmony 10 minute tutorial (cub pie)
OpenCV中如何使用滚动条动态调整参数
C语言通过指针交换两个数
FMT开源自驾仪 | FMT中间件:一种高实时的分布式日志模块Mlog
【ASM】字节码操作 ClassWriter 类介绍与使用
Alibaba brand data bank: introduction to the most complete data bank
Spark calculation operator and some small details in liunx
重磅!蚂蚁开源可信隐私计算框架“隐语”,主流技术灵活组装、开发者友好分层设计...
随机推荐
How to solve the error "press any to exit" when deploying multiple easycvr on one server?
Compile and build, from the bottom to the top
In terms of byte measurement with an annual salary of 30W, automated testing can be learned in this way
Run xv6 system
8位MCU跑RTOS有没有意义?
Xin'an Second Edition: Chapter 25 mobile application security requirements analysis and security protection engineering learning notes
BearPi-HM_ Nano development environment
Pourquoi Li shufu a - t - il construit son téléphone portable?
VR全景婚礼,帮助新人记录浪漫且美好的场景
What is the reason why the video cannot be played normally after the easycvr access device turns on the audio?
EasyCVR电子地图中设备播放器loading样式的居中对齐优化
node の SQLite
adb常用命令
[rapid environment construction] openharmony 10 minute tutorial (cub pie)
Sqoop I have everything you want
基于STM32+华为云IOT设计的智能路灯
Summary of Android interview questions of Dachang in 2022 (I) (including answers)
Growth of operation and maintenance Xiaobai - week 7
Getting started with pytest ----- test case rules
OpenCV中如何使用滚动条动态调整参数