概念

TIME_WAIT: socket 仍然有数据在内核中待发送直到发送成功或超时,此socket不能被内核删除,同时等待是否要重传Ack对端还已发过来的FIN

Linger Time:socket关闭后,如果send buffer里仍有数据,内核删除socket的超时时间,一般2min

SO_REUSEADDR:如果有socket在TIME_WAIT状态,别的socket可以绑定和它相同的“地址:端口”

SO_REUSEPORT:允许绑定相同的“地址:端口”,但要求前面的socket也设置了这个的属性

FIN-WAIT-1:发出FIN后,等待收到对方ack自己的FIN (等对方的FIN)

FIN-WAIT-2:收到对方的ACK后,等待收到对方的FIN,然后发出ACK (等对方的FIN,更近一步,自己的FIN已被ACK)

CLOSE-WAIT: 收到对方的FIN,发出了ACK (等用户Close)

TIME_WAIT: 重传ACK或数据(收到对方的FIN,自己也发了ACK,但不知道要不要重传)

ACK:TCP的ACK是下一个希望收到的sequence

Nagle算法: 延迟小包发送,直到收到Ack,优先是提高网络利用率,缺点是delay,不过也增加不多,因为ack收的越快,发送也越快,默认是开启的

1. Listening socket可读就表示有新的连接,通过accept获得新连接的fd

2. shutdown socket是关闭写入端,发送的FIN相当于给对端发送文件的EOF,对方收到EOF,读它的socket的时候会读到0. 这是TCP的半关闭特点,这样的目的是我自己不写了,但是仍然可以接受对方发来的数据。如果是close sockets,则这个socket既不能读也不能写了。如果对方恶意不关闭,有可能导致另一端的socket一直不关闭,那么就要手动关闭。

3. 三个小包问题导致网络资源消耗:

1)糊涂窗口 2)delayed Ack让Ack piggyback data,减少Ack的带宽消耗 3)Nagle算法让data delay发送,防止data发得太快,但会造成延时

4. TCP应用层分包是指通过一定的处理,让接收方能从字节流中识别并截取还原出一个个消息。短连接的TCP服务是指对方通过关闭连接来表示一个消息发送完毕。对于长连接,有几种方法分包:1. 固定长度 2. 特殊字符或字符串作为边界 3. 每个消息的头部加一个长度字段 4. 利用消息本身的格式,比如消息内有自己的头和尾<></>

5. TCP网络编程的主要例子:1. echo 2. 聊天服务

TCP 连接的要点的更多相关文章

  1. TCP连接的TIME_WAIT和CLOSE_WAIT 状态解说

    相信很多运维工程师遇到过这样一个情形: 用户反馈网站访问巨慢, 网络延迟等问题, 然后就迫切地登录服务器,终端输入命令"netstat -anp | grep TIME_WAIT | wc ...

  2. 数据通讯与网络 第五版第24章 传输层协议-TCP协议部分要点

    上一博客记录了UDP协议的关键要点,这部分记录TCP协议的关键要点. 24.3 传输控制协议(TRANSMISSION CONTROL PROTOCOL) TCP(Transmission Contr ...

  3. 阿里云服务出现TCP连接快速增加尤其是NON_ESTABLISHED大量增加导致内存和CPU暴增系统无法使用的问题

    TCP状态转移要点TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不 会被释放.网络服务器程序要同时管理大 ...

  4. TCP连接问题之CLOSE_WAIT和TIME_WAIT过多

    参考博文 https://dengqsintyt.iteye.com/blog/2086485 Timeout waiting for connection异常排查:https://blog.csdn ...

  5. 经典!服务端 TCP 连接的 TIME_WAIT 过多问题的分析与解决

    开源Linux 专注分享开源技术知识 本文给出一个 TIME_WAIT 状态的 TCP 连接过多的问题的解决思路,非常典型,大家可以好好看看,以后遇到这个问题就不会束手无策了. 问题描述 模拟高并发的 ...

  6. TCP连接的建立和终止

    TCP的简要要说明 标签(空格分隔): TCP 网络编程 Linux 面试 在此输入正文 一.TCP是什么 TCP全称传输控制协议(Transmission Control Protocol).TCP ...

  7. 简述TCP连接的建立与释放(三次握手、四次挥手)

    在介绍TCP连接的建立与释放之前,先回顾一下相关知识. TCP是面向连接的运输层协议,它提供可靠交付的.全双工的.面向字节流的点对点服务.HTTP协议便是基于TCP协议实现的.(虽然作为应用层协议,H ...

  8. HTTP的RST包与WinHttp延迟关闭TCP连接

    一.RST包也常见于断开TCP连接  几个月前用wireshark抓HTTP包发现有的网络通信在结束的时候没有使用四次握手,而是直接使用RST包.如: 在TCP协议中RST表示复位,用来异常的关闭连接 ...

  9. 一个完整的TCP连接

    当我们向服务器发送HTTP请求,获取数据.修改信息时,都需要建立TCP连接,包括三次握手,四次分手. 什么是TCP连接? 为实现数据的可靠传输,TCP要在应用进程间建立传输连接.它是在两个传输用户之间 ...

随机推荐

  1. TatukGIS-TGIS_Editor.CreateShape

    procedure CreateShape(const _layer: TObject; const _ptg: TGIS_Point3D; const _type: TGIS_ShapeType; ...

  2. 2014/09/30 Learning Note

    Vbird Linux: Vim Learning: http://linux.vbird.org/linux_basic/0310vi.php Bash Shell: http://linux.vb ...

  3. 使用c语言编写cgi程序

    http://blog.chinaunix.net/uid-22566367-id-3109877.html 简单的说,cgi是沟通HTML表单和服务器端程序的接口,是可以被其他语言所应用的一个规范集 ...

  4. 一篇旧文章,结合汇编探索this指针

    //VC6.0下成功编译 #include <iostream.h> class X{ public: void foo(int b,int c){ this->a=b*c; cou ...

  5. 转:windows下使用gvim搭建简单的IDE编译环境(支持C/C++/Python等)

    原文来自于:http://www.cnblogs.com/zhuyp1015/archive/2012/06/16/2552269.html 使用gvim在windows环境下搭建简单的IDE环境可以 ...

  6. A Statistical View of Deep Learning (V): Generalisation and Regularisation

    A Statistical View of Deep Learning (V): Generalisation and Regularisation We now routinely build co ...

  7. 我的VSTO之路(三):Word基本知识

    原文:我的VSTO之路(三):Word基本知识 在前一篇文章中,我初步介绍了如何如何开发一个VSTO程序,在本文中,我将进一步深入介绍Word的插件开发.Word是一个大家在日常工作中一直接触的文档工 ...

  8. thinkphp中的session()方法

    系统提供了Session管理和操作的完善支持,全部操作可以通过一个内置的session函数完成. 用法 session($name, $value='') 参数 name(必须):如果传入数组 则表示 ...

  9. 扩展KMP模板

    注意:需要用特殊符号隔开 1 struct ExKmp{ void Init(){ memset(f,,sizeof(f)); memset(r,,sizeof(r)); } void Get_Fai ...

  10. DP(斜率优化):HDU 3507 Print Article

    Print Article Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Others)To ...