TCP下回应延时

在建立TCP连接之后,如果一方发送一个报文给另一方,另一方接收到这个报文之后,并不急着将ACK回应报文,发送给对方,而是慢悠悠的等待一段时日,然后才将ACK发送过去,大多数系统支持,延时可能在200ms之间,可以通过tcpdump抓包分析。目的主要是为了可以捎带更多的东西返回,如果目前我只需要200OK,可能我想等待更多的数据,减少网络的带宽。从而引发一个问题供大家思考:

如果我发送一个报文给对方,如果对方没有在100ms之内,给我答复,我认为这个包丢了,重传,所以带来的风险也是客观的。所以在使用select进行超时的时候,如何避免这种极端的现象,我们必须将超时设置大于200ms,否则我们一直认为对方丢包了。但是我们重发第二包的之后,可能对方将两个回应整合到一起发过来了!!

TCP下回应延时

时间: 2024-10-29 13:18:12

TCP下回应延时的相关文章

TCP下的套接字编程

1.什么是套接字 应用层通过传输层进行数据通信时,TCP和UDP会遇到同时为多个应用程序进程提供并发服务的问题.多个TCP连接或多个应用程序进程可能需要通过同一个TCP协议端口传输数据.为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字(Socket)的接口.区分不同应用程序进程间的网络通信和连接,主要有3个参数:通信的目的IP地址.使用的传输层协议(TCP或UDP)和使用的端口号.Socket原意是"插座".通过将这3个参数结合起来,

TCP下IO模型优劣比较

多线程模型适用于处理短连接,且连接的打开关闭非常频繁的情形,但不适合处理长连接.多线程模型默认情况下,(在Linux)每个线程会开8M的栈空间,再TCP长连接的情况下,2000/分钟的请求,几乎可以假定有上万甚至十几万的并发连接,假定有10000个连接,开这么多个线程需要10000*8M=80G的内存空间!即使调整每个线程的栈空间,也很难满足更多的需求.甚至攻击者可以利用这一点发动DDoS,只要一个连接连上服务器什么也不做,就能吃掉服务器几M的内存,这不同于多进程模型,线程间内存无法共享,因为所

linux 下模拟延时与丢包 tc qdisc

TC qdisc linux下的流量控制 修改ping测试的延时 增加规则: # tc qdisc add dev eth0 root 删除规则: # tc qdisc add dev eth0 root 修改规则: # tc qdisc change dev eth0 root 查看规则: # tc qdisc list Or # tc qdisc show 使用从eth0接口ping的延时为1000ms  上下波动为10ms tc qdisc add dev eth0 root netem

基于tcp下的文件传输下载

1 //*****客户端****** 2 /*功能: (1) input>list 查看服务端目录内容 3 (2) input>get files 下载文件 4 (3) input>put file 上传文件*/ 5 6 #include <head.h> 7 8 #define UPLOAD_FILE 1 9 #define DOWNLOAD_FILE 2 10 #define FILE_YEXIST 3 11 #define FILE_NEXIST 4 12 #defin

关于TCP下SOCKET的一些测试

=============================测试代码=========================== 客户端: #include<winsock2.h> //包含头文件 #include<stdio.h> #include<windows.h> #pragma comment(lib,"WS2_32.lib") //显式连接套接字库 int main() //主函数开始 { WSADATA data; //定义WSADATA结构体

QT网络编程Tcp下C/S架构的即时通信

先写一个客户端,实现简单的,能加入聊天,以及加入服务器的界面. #ifndef TCPCLIENT_H #define TCPCLIENT_H #include <QDialog> #include <QListWidget> #include <QLineEdit> #include <QPushButton> #include <QLabel> #include <QGridLayout> #include <QtNetWo

Linux下关于TCP的keep alive的实现源码分析

TCP下的Keep Alive 我们常说的TCP的keep alive,就是为了保证连接的有效性,在间隔一定的时间发探测包,根据回复来确认该连接是否有效.通常上层应用会自己提供心跳检测机制,而Linux内核本身也提供了从内核层面的确保连接有效性的方式. 在sock 函数中可以设置是否需要打开keep alive开关,默认建立socket 是关闭keep alive的.代码如下 optval = 1; optlen = sizeof(optval); if(setsockopt(s, SOL_SO

Windows下基于TCP协议的大文件传输(流形式)

简单实现TCP下的大文件高效传输 在TCP下进行大文件传输,不像小文件那样直接打包个BUFFER发送出去,因为文件比较大可能是1G,2G或更大,第一效率问题,第二TCP粘包问题.针对服务端的设计来说就更需要严紧些.下面介绍简单地实现大文件在TCP的传输应用. 粘包出现原因:在流传输中出现,UDP不会出现粘包,因为它有消息边界(参考Windows 网络编程) 1 发送端需要等缓冲区满才发送出去,造成粘包 2 接收方不及时接收缓冲区的包,造成多个包接收 解决办法: 为了避免粘包现象,可采取以下几种措

windows下基于(QPC)实现的微秒级延时

1.为什么会写windows下微秒级延时 在上一篇 实现memcpy()函数及过程总结 中测试memcpy的效率中,测试时间的拷贝效率在微秒级别,需要使用微秒级时间间隔计数. windows下提供QueryPerformanceCounter(查询高性能计数器),QPC是基于硬件计数器,获取高分辨率时间戳. 参考:Acquiring high-resolution time stamps 应用形式: 1 LARGE_INTEGER start, end; 2 LARGE_INTEGER Freq