Nagle's algorithm 封包 网络游戏协议封包需注意点 封包挂
w41字节的数据包只有1字节的可用信息。以减少数据包发送量来提高TCP/IP网络性能。
https://en.wikipedia.org/wiki/Nagle's_algorithm
https://zh.wikipedia.org/wiki/纳格算法
http://www.ietf.org/rfc/rfc896.txt
Nagle's algorithm is a means of improving the efficiency of TCP/IP networks by reducing the number of packets that need to be sent over the network. It was defined by John Nagle while working for Ford Aerospace and Communications Corporation.
Nagle's document, Congestion Control in IP/TCP Internetworks (RFC 896) describes what he called the "small packet problem", where an application repeatedly emits data in small chunks, frequently only 1 byte in size. Since TCP packets have a 40 byte header (20 bytes for TCP, 20 bytes for IPv4), this results in a 41 byte packet for 1 byte of useful information, a huge overhead. This situation often occurs in Telnet sessions, where most keypresses generate a single byte of data that is transmitted immediately. Worse, over slow links, many such packets can be in transit at the same time, potentially leading to congestion collapse.
Nagle's algorithm works by combining a number of small outgoing messages, and sending them all at once. Specifically, as long as there is a sent packet for which the sender has received no acknowledgment, the sender should keep buffering its output until it has a full packet's worth of output, so that output can be sent all at once.
Algorithm
if there is new data to send
if the window size >= MSS and available data is >= MSS
send complete MSS segment now
else
if there is unconfirmed data still in the pipe
enqueue data in the buffer until an acknowledge is received
else
send data immediately
end if
end if
end if
纳格算法是以减少数据包发送量来增进TCP/IP网络的性能。它是由约翰.纳格任职于Ford Aerospace时命名。
纳格的文件[注 1]描述了他所谓的“小数据包问题”-某个应用程序不断地提交小单位的数据,且某些常只占1字节大小。因为TCP数据包具有40字节的标头信息(TCP与IPv4各占20字节),这导致了41字节大小的数据包只有1字节的可用信息,造成庞大的浪费。这种状况常常发生于Telnet工作阶段-大部分的键盘操作会产生1字节的数据并马上提交。更糟的是,在慢速的网络连接下,这类的数据包会大量地在同一时点传输,造成壅塞碰撞(Congestion Collapse)。
纳格算法的工作方式是合并(coalescing)一定数量的输出数据后一次提交。特别的是,只要有已提交的数据包尚未确认,发送者会持续缓冲数据包,直到累积一定数量的数据才提交。
算法
if有新資料要傳送
if訊窗大小>= MSS and可傳送的資料>= MSS
立刻傳送完整MSS大小的segment
else
if管線中有尚未確認的資料
在下一個確認(ACK)封包收到前,將資料排進緩衝區佇列
else
立即傳送資料
MSS = 最大segment大小
Introduction Congestion control is a recognized problem in complex networks.
We have discovered that the Department of Defense's Internet Pro-
tocol (IP) , a pure datagram protocol, and Transmission Control
Protocol (TCP), a transport layer protocol, when used together,
are subject to unusual congestion problems caused by interactions
between the transport and datagram layers. In particular, IP
gateways are vulnerable to a phenomenon we call "congestion col-
lapse", especially when such gateways connect networks of widely
different bandwidth. We have developed solutions that prevent
congestion collapse.
https://en.wikipedia.org/wiki/Maximum_segment_size
The default TCP Maximum Segment Size is 536.[6]
Where a host wishes to set the maximum segment size to a value other than the default,
the maximum segment size is specified as a TCP option,
initially in the TCP SYN packet during the TCP handshake.
The value cannot be changed after the connection is established.[7]
https://baike.baidu.com/item/封包/19498479
-
封包
(IP协议封装)
- 中文名
- 封包
- 外文名
- Packet
-
IP封包
分析
IP封包分析从一直以来讨论至今我们都不断地接触到“封包”这个词相信您也很有兴趣想知道这个“封包”究竟是个什么样的东东吧下面就让我们一起看看一个IP封包究竟包含了那些内容。 撷取IP封包 如果您的机器上面装有 netxray 等封包撷取软件或使用NT的“网路监视器”我们就可以撷取那些进出本机的封包了。 当我们打开撷取功能之后然后使用ping命令随便ping一个地址。我们可以撷取到如下这些封包DNS
正如我们所见到的我们撷取到DNS和ICMP的封包了因为网址t需要到DNS解释而ping是一个ICMP协定。您或许知道ICMP封包的type为“Echo Request”和“Echo Reply”分别代表什么意思吧 让我们再深入一点看看DNS封包里面有些什么东东如果您往上卷回有关“DNS”的文章看看我们用 nslookup 的 debug 模式查找 这个网址时候引一下那里的内容您就知道这个封包说些什么了。 下面让我们再看看ICMP封包里面的内容在第一行里面我们看到“00 80 c7 47 8c 9a 48 54 e8 27 75 77”这串数字所代表的分别是目的地和来源地的MAC地址然后“08 00”代表的是一个Ethernet II的IP协定类型。Ethernet II可以说是IEEE802.3的改进版本。(还记得“网路概论”里面关于“逻辑形态”的叙述么)。这里可以说是Datalink网路层所要追踪的资料。 然后接下来的是属于IP封包的内容请先记着上图的内容我打算在下一节里面在详细讨论每一行的意思。IP封包格式
首先让我们看看IP封包的格式是怎样的和其组成部份以及各部份的长度如何 Version (4) Internet Header Length (4) Type of Service (8) Total Length (16)Identification (16) Flags (3) Fragment Offset (13)Time To Live (8) Protocol (8) Header checksum (16)Source Address (32)Destination Address (32)Options (Variable) Padding (0-24) Data.... 在上图中括号之内的数字就是各部件的长度(bit)如果您够细心就会计算得出每一列的总长度都是32bit。下面我们分别对各部件名称解释一下版本(VER)
表示的是IP规格版本目前的IP规格多为版本4(version 4)所以这里的数值通常为 0x4 (注意封包使用的数字通常都是十六进位的)。标头长度(IHL)
我们从IP封包规格中看到前面的6列为header如果Options和Padding没有设定的话也就只有5列的长度所以这里的长度为“5”我们知道每列有32bit也就是4byte那么5列就是20byte了20这个数值换成16进位就成了0x14所以当封包标头长度为最短的时候这里数值最终会被换算为 0x14 。 让我们看看我们撷取的ICMP封包其中属于IP部份的开头 在这里我们看到的数值是“45”前面的“4”就是版本号数而后面的“5”则是标头长度。服务类型(TOS)
这里指的是IP封包在传送过程中要求的服务类型其中一共由8个bit组成其中每个bit的组合分别代表不同的意思 000..... Routine 设定IP顺序预设为0否则数值越高越优先...0.... Delay 延迟要求0是正常值1为低要求....0... Throughput 通讯量要求0为正常值1为高要求.....0.. Reliability 可靠性要求0为正常值1为高要求......00 Not Used 未使用在下例中我们可以看到TOS的值为0也就是全部设置为正常值封包总长(TL)
通常以byte做单位来表示该封包的总长度此数值包括标头和数据的总和。从上图我们看到的十六进位数值是“003C”换成十进位就是“60”了。识别码(ID)
每一个IP封包都有一个16bit的唯一识别码。我们从OSI的网路层级知识里面知道当程式产生的数据要通过网路传送时都会被拆散成封包形式发送当封包要进行重组的时候这个ID就是依据了。从上图我们可以看到此封包的ID为40973 (将 a00d 换成十进制就知道了)。Flag标记(FL)
这是当封包在传输过程中进行最佳组合时使用的3个bit的识别记号。请参考下表 000. 当此值为0的时候表示目前未被使用。.0.. 当此值为0的时候表示封包可以被分割如果为1则不能被分割。..0. 当上一个值为0时此值为0就示该封包是最后一个封包如果为1则表示其后还有被分割的封包。 在下例中我们看到这个封包的标记为“0”也就是目前并未使用。分割定位(FO)
当封包被切开之后由于网路情况或其它因素影响其抵达顺序并不会和当初切割顺序一至的。所以当封包进行切割的时候会为各片段做好定位记录所以在重组的时候就能够依号入座了。 因为我们刚才撷取到的封包并没有被切割所以暂时找不到例子参考在上例中我们看到的FO为“0”。延续时间(TTL)
这个TTL我们在许多网路设定上都会碰到当一个物件被赋予TTL值(以秒为单位)之后就会进行计时如果物件在到达TTL值的时候还没被处理的话就会被遗弃。 不过并不是所有的 TTL 都以时间为单位例如 ICMP 协定的 TTL则以封包路由过程中的跳站数目(Hop Count)做单位。TTL 值每经过一个跳站(或被一个 router 处理)之后就会被减低一个数值 。这样当封包在传递过程中由于某些原因而未能抵达目的地的时候就可以避免其一直充斥在网路上面。上图中我们看到的数值可不是 20 哦因为这是个十六进位数字要换成十进位才知道 TTL 原来是 32 个跳站。协定(PROT)
这里指的是该封包所使用的网路协定类型例如ICMPDNS等。要注意的是这里使用的协定是网路层的协定这和上层的程式协定(如FTPPOP等)是不同的。您可以从Linux的/etc/protocol这个档案中找到这些协定和其代号此档案也存放于NT的\winnt\system32\drivers\etc目录里面。其内容如下------------------------------------------------------ip 0 IP # internet protocol, pseudo protocol numbericmp 1 ICMP # internet control message protocoligmp 2 IGMP # Internet Group Managementggp3 GGP # gateway-gateway protocolipencap 4 IP-ENCAP # IP encapsulated in IP (officially ``IP')st 5 ST # ST datagram modetcp 6 TCP # transmission control protocolegp 8 EGP # exterior gateway protocolpup 12 PUP # PARC universal packet protocoludp 17 UDP # user datagram protocolhmp 20HMP# host monitoring protocolxns-idp 22 XNS-IDP # Xerox NS IDPrdp 27 RDP # “reliable datagram” protocoliso-tp4 29 ISO-TP4 # ISO Transport Protocol class 4xtp 36 XTP # Xpress Tranfer Protocolddp 37 DDP # Datagram Delivery Protocolidpr-cmtp 39 IDPR-CMTP # IDPR Control Message Transportrspf 73 RSPF #Radio Shortest Path First.vmtp 81 VMTP # Versatile Message Transportospf 89 OSPFIGP # Open Shortest Path First IGPipip 94 IPIP # Yet Another IP encapsulationencap 98 ENCAP # Yet Another IP encapsulation------------------------------------------------------ 在我们这个例子中可以看得出PROT的号码为“01”对照/etc/protocol档案我们可以知道这是一个ICMP协定。 Header Checksum标头检验值(HC)。这个数值主要用来检错用的用以确保封包被正确无误的接收到。当封包开始进行传送后接收端主机会利用这个检验值会来检验馀下的封包如果一切看来无误就会发出确认信息表示接收正常。上图中我们看到的封包之HC为“9049”。来源地址(SA)
相信这个不用多解释了就是发送端的IP地址是也。我们将“c0.a8.00.0f”换成十进位就可以得出“192.168.0.15”这个地址了。目的地址(DA)
也就是接收端的IP地址啦。看看你能不能将“a8.5f.01.54”换成“168.95.1.84” Options &; Paddinghttps://gameinstitute.qq.com/community/detail/109198网络游戏协议封包需注意点
https://blog.csdn.net/SR0ad/article/details/7983698
https://bbs.pediy.com/thread-99936.htm
某游戏封包加解密算法及其算法KEY的算法
http://blog.noark.xyz/article/2017/6/12/戏说网络游戏外挂之封包挂/
Nagle's algorithm 封包 网络游戏协议封包需注意点 封包挂的更多相关文章
- Nagle's algorithm
w41字节的数据包只有1字节的可用信息.以减少数据包发送量来提高TCP/IP网络性能. https://en.wikipedia.org/wiki/Nagle's_algorithm https:// ...
- Nagle's Algorithm and TCP_NODELAY
w非全尺寸分组的发送条件 HTTP The Definitive Guide TCP has a data stream interface that permits applications to ...
- IP封包协议头/TCP协议头/TCP3次握手/TCP4次挥手/UDP协议头/ICMP协议头/HTTP协议(请求报文和响应报文)/IP地址/子网掩码(划分子网)/路由概念/MAC封包格式
IP协议头IP包头格式: 1.版本号:4个bit,用来标识IP版本号.这个4位字段的值设置为二进制的0100表示IPv4,设置为0110表示IPv6.目前使用的IP协议版本号是4. 2.首部长度:4个 ...
- 三报文握手而不是三次握手 wireshark 封包详细信息 (Packet Details Pane) wireshark与对应的OSI七层模型 TCP包的具体内容 分析TCP三次握手过程
总结: 1.tcp报文非数据部分4*6字节 2.RFC 973 <计算机网络> 谢希仁 three way (three message) handshake 只是一次握手 同步位SYN. ...
- A 内存挂 B 封包挂 C 钩子挂 D CALL挂 外挂
https://www.zhihu.com/question/32291769 作者:猎狐链接:https://www.zhihu.com/question/32291769/answer/70929 ...
- USB封包格式
1.起始(SOP)封包 根集线器会在每1 ms时,送出SOF封包.这介于2个SOF封包之间的时间,即称为帧(frame).SOF封包虽是属于令牌封包的一种,但却具有独自的PID形态名称SOF.通常目标 ...
- 讲解wpe抓包,封包
相信大多数朋友都是会使用WPE的,因为这里也有不少好的教程,大家都辛苦了!先说说接触WPE的情况.当时好像是2011年,我本来不知道WPE对游戏竟有如此大的辅助作用的.起先找WPE软件的时候,只是因为 ...
- GB28181技术基础之2 - H264与PS封包
二. PS封包 PS 是 GB28181 规定的标准封包格式(也是存储格式),在讲 PS 之前,先介绍几种相关的 数据格式概念: 1)ES 基本流 (Elementary Streams)是直接从编码 ...
- hessian 协议
什么是Hessian协议呢? 目前,Web服务技术是解决异构平台系统的集成及互操作问题的主流技术. 它所基于的XML已经是Internet上交换数据的实际标准,基于通用的进程间通信协议和网络传输协议屏 ...
随机推荐
- 解决WebStorme点击谷歌浏览器图标无反应问题
解决思路: 在设置中重新设置谷歌浏览器路径,一定要选中到谷歌浏览器安装目录的Chrome.exe文件,选中后记得apply. 设置步骤: file->seeting->tools-> ...
- Servlet+JSP+JDBC综合案例
层级关系: 一.Util包 包里面写一个JDBCTools.java文件 功能:实现数据库连接返回一个Connection对象,并且可以实现数据库相应资源的关闭! 注意事项: 1.定义成员变量 1 p ...
- Maven安装配置和IDEA创建Maven项目
maven 一个项目架构管理工具(约定大于配置) 1.配置 M2_HOME:指向maven bin目录 以后bootstrop要用 MAVEN_HOME:指向maven目录 path:指向maven ...
- vue element 表单验证不通过,滚动到固对应位置
我们在使用elementIUI实现表单验证,内容比较多的时候,提示内容会被遮挡,这时候用户不清楚什么情况,还会连续点击提交按钮.这个时候需求来啦:我们需要在表单验证不通过的时候,页面滚动到对应的位置. ...
- JavaScript高级程序设计(第4版)知识点总结
介绍 JavaScript高级程序设计 第四版,在第三版的基础上添加了ES6相关的内容.如let.const关键字,Fetch API.工作者线程.模块.Promise 等.适合具有一定编程经验的 W ...
- 机器学习算法-logistic回归算法
Logistic回归算法调试 一.算法原理 Logistic回归算法是一种优化算法,主要用用于只有两种标签的分类问题.其原理为对一些数据点用一条直线去拟合,对数据集进行划分.从广义上来讲这也是一种多元 ...
- 【分布式锁的演化】终章!手撸ZK分布式锁!
前言 这应该是分布式锁演化的最后一个章节了,相信很多小伙伴们看完这个章节之后在应对高并发的情况下,如何保证线程安全心里肯定也会有谱了.在实际的项目中也可以参考一下老猫的github上的例子,当然代码没 ...
- docker 数据卷的挂载和使用
容器之间的数据共享技术, Docker容器产生的数据同步到本地 卷技术 --> 目录挂载, 将容器内的目录挂载到服务器上 使用命令来挂载 -v # 可以挂载多个目录 docker run -it ...
- 【Web】HTML入门小结
文章目录 HTML? HTML 初识元素/标签 HTML语义化标签 标题 段落 font HTMl链接 HTML图像 HTML列表 HTML div HTML 块级元素与行内元素 HTML常用带格式作 ...
- springBoot实现redis分布式锁
参考:https://blog.csdn.net/weixin_44634197/article/details/108308395 .. 使用redis的set命令带NX(not exist)参数实 ...