当前位置:网站首页>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 .
边栏推荐
- EasyCVR电子地图中设备播放器loading样式的居中对齐优化
- The easycvr platform reports an error "ID cannot be empty" through the interface editing channel. What is the reason?
- The solution that flutterweb browser cannot be rolled back after refreshing
- Example of batch update statement combining update and inner join in SQL Server
- Pytorch extract middle layer features?
- Distinguish between basic disk and dynamic disk RAID disk redundant array
- sql语句优化,order by desc速度优化
- Establishment of graphical monitoring grafana
- How to submit data through post
- Smart street lamp based on stm32+ Huawei cloud IOT design
猜你喜欢

kivy教程之在 Kivy 中支持中文以构建跨平台应用程序(教程含源码)

QT中Model-View-Delegate委托代理机制用法介绍

李书福为何要亲自挂帅造手机?

Video fusion cloud platform easycvr adds multi-level grouping, which can flexibly manage access devices

历史上的今天:Google 之母出生;同一天诞生的两位图灵奖先驱

Sqoop I have everything you want

JMeter interface test response data garbled

BearPi-HM_ Nano development board "flower protector" case

Chrome prompts the solution of "your company management" (the startup page is bound to the company's official website and cannot be modified)

基于STM32+华为云IOT设计的智能路灯
随机推荐
The easycvr authorization expiration page cannot be logged in. How to solve it?
QT中Model-View-Delegate委托代理机制用法介绍
Solution qui ne peut pas être retournée après la mise à jour du navigateur Web flutter
EasyCVR接入设备开启音频后,视频无法正常播放是什么原因?
Pytorch extract middle layer features?
Nodejs developer roadmap 2022 zero foundation Learning Guide
How to output special symbols in shell
Single responsibility principle
开源与安全的“冰与火之歌”
[ASM] introduction and use of bytecode operation classwriter class
2022年大厂Android面试题汇总(二)(含答案)
Pytest learning ----- detailed explanation of the request for interface automation test
[introduction to MySQL] third, common data types in MySQL
8位MCU跑RTOS有没有意义?
[elastic] elastic lacks xpack and cannot create template unknown setting index lifecycle. name index. lifecycle. rollover_ alias
Kali2021 installation and basic configuration
Grafana 9 正式发布,更易用,更酷炫了!
Spark accumulator and broadcast variables and beginners of sparksql
Spark calculation operator and some small details in liunx
【Android】Kotlin代码编写规范化文档