当前位置:网站首页>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 .
边栏推荐
- Getting started with pytest ----- allow generate report
- Binary search strategy
- ASEMI整流桥DB207的导通时间与参数选择
- Interview assault 63: how to remove duplication in MySQL?
- Smart street lamp based on stm32+ Huawei cloud IOT design
- Appium automated test scroll and drag_ and_ Drop slides according to element position
- Pyspark operator processing spatial data full parsing (5): how to use spatial operation interface in pyspark
- 8位MCU跑RTOS有没有意义?
- Pytest learning ----- pytest operation mode and pre post packaging of interface automation testing
- SAP UI5 框架的 manifest.json
猜你喜欢

在一台服务器上部署多个EasyCVR出现报错“Press any to exit”,如何解决?

OliveTin能在网页上安全运行shell命令(上)

2022年大厂Android面试题汇总(一)(含答案)

Pytorch extract middle layer features?

PySpark算子处理空间数据全解析(5): 如何在PySpark里面使用空间运算接口

Pourquoi Li shufu a - t - il construit son téléphone portable?

The NTFS format converter (convert.exe) is missing from the current system

FlutterWeb瀏覽器刷新後無法回退的解决方案

Is it meaningful for 8-bit MCU to run RTOS?

OpenCV中如何使用滚动条动态调整参数
随机推荐
微信小程序获取手机号
[getting started with MySQL] fourth, explore operators in MySQL with Kiko
Reppoints: advanced order of deformable convolution
What is the reason why the video cannot be played normally after the easycvr access device turns on the audio?
历史上的今天:Google 之母出生;同一天诞生的两位图灵奖先驱
中移动、蚂蚁、顺丰、兴盛优选技术专家,带你了解架构稳定性保障
OliveTin能在网页上安全运行shell命令(上)
Wordcloud colormap color set and custom colors
MySQL 8 sub database and table backup database shell script
Is it meaningful for 8-bit MCU to run RTOS?
Why should Li Shufu personally take charge of building mobile phones?
JMeter interface test response data garbled
Xin'an Second Edition: Chapter 26 big data security demand analysis and security protection engineering learning notes
Pourquoi Li shufu a - t - il construit son téléphone portable?
Getting started with pytest ----- allow generate report
基于STM32+华为云IOT设计的智能路灯
Nodejs developer roadmap 2022 zero foundation Learning Guide
EasyCVR授权到期页面无法登录,该如何解决?
node の SQLite
带你穿越古罗马,元宇宙巴士来啦 #Invisible Cities