当前位置:网站首页>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 .
边栏推荐
- MarkDown语法——更好地写博客
- [introduction to MySQL] the first sentence · first time in the "database" Mainland
- Pytest learning ----- detailed explanation of the request for interface automation test
- Summary of study notes for 2022 soft exam information security engineer preparation
- 历史上的今天:Google 之母出生;同一天诞生的两位图灵奖先驱
- Grafana 9 is officially released, which is easier to use and more cool!
- Reppoints: advanced order of deformable convolution
- 遠程代碼執行滲透測試——B模塊測試
- 微信小程序中给event对象传递数据
- adb常用命令
猜你喜欢

The easycvr platform reports an error "ID cannot be empty" through the interface editing channel. What is the reason?

node の SQLite

Wordcloud colormap color set and custom colors

Awk command exercise

F200——搭载基于模型设计的国产开源飞控系统无人机

Distributed (consistency protocol) leader election (dotnext.net.cluster implements raft election)

Why should Li Shufu personally take charge of building mobile phones?

8位MCU跑RTOS有没有意义?

The integrated real-time HTAP database stonedb, how to replace MySQL and achieve nearly a hundredfold performance improvement

【Android】Kotlin代码编写规范化文档
随机推荐
Is it meaningful for 8-bit MCU to run RTOS?
Xin'an Second Edition: Chapter 26 big data security demand analysis and security protection engineering learning notes
Nodejs 开发者路线图 2022 零基础学习指南
微信小程序获取手机号
QT中Model-View-Delegate委托代理机制用法介绍
[getting started with MySQL] fourth, explore operators in MySQL with Kiko
78 岁华科教授逐梦 40 载,国产数据库达梦冲刺 IPO
Xin'an Second Edition: Chapter 24 industrial control safety demand analysis and safety protection engineering learning notes
FlutterWeb瀏覽器刷新後無法回退的解决方案
Spark accumulator and broadcast variables and beginners of sparksql
[introduction to MySQL] the first sentence · first time in the "database" Mainland
Remote code execution penetration test - B module test
kivy教程之在 Kivy 中支持中文以构建跨平台应用程序(教程含源码)
MySQL error reporting solution
偷窃他人漏洞报告变卖成副业,漏洞赏金平台出“内鬼”
Video fusion cloud platform easycvr adds multi-level grouping, which can flexibly manage access devices
VR全景婚礼,帮助新人记录浪漫且美好的场景
OliveTin能在网页上安全运行shell命令(上)
Summary of Android interview questions of Dachang in 2022 (II) (including answers)
Single responsibility principle