TCP 连接的要点
概念
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 连接的要点的更多相关文章
- TCP连接的TIME_WAIT和CLOSE_WAIT 状态解说
相信很多运维工程师遇到过这样一个情形: 用户反馈网站访问巨慢, 网络延迟等问题, 然后就迫切地登录服务器,终端输入命令"netstat -anp | grep TIME_WAIT | wc ...
- 数据通讯与网络 第五版第24章 传输层协议-TCP协议部分要点
上一博客记录了UDP协议的关键要点,这部分记录TCP协议的关键要点. 24.3 传输控制协议(TRANSMISSION CONTROL PROTOCOL) TCP(Transmission Contr ...
- 阿里云服务出现TCP连接快速增加尤其是NON_ESTABLISHED大量增加导致内存和CPU暴增系统无法使用的问题
TCP状态转移要点TCP协议规定,对于已经建立的连接,网络双方要进行四次握手才能成功断开连接,如果缺少了其中某个步骤,将会使连接处于假死状态,连接本身占用的资源不 会被释放.网络服务器程序要同时管理大 ...
- TCP连接问题之CLOSE_WAIT和TIME_WAIT过多
参考博文 https://dengqsintyt.iteye.com/blog/2086485 Timeout waiting for connection异常排查:https://blog.csdn ...
- 经典!服务端 TCP 连接的 TIME_WAIT 过多问题的分析与解决
开源Linux 专注分享开源技术知识 本文给出一个 TIME_WAIT 状态的 TCP 连接过多的问题的解决思路,非常典型,大家可以好好看看,以后遇到这个问题就不会束手无策了. 问题描述 模拟高并发的 ...
- TCP连接的建立和终止
TCP的简要要说明 标签(空格分隔): TCP 网络编程 Linux 面试 在此输入正文 一.TCP是什么 TCP全称传输控制协议(Transmission Control Protocol).TCP ...
- 简述TCP连接的建立与释放(三次握手、四次挥手)
在介绍TCP连接的建立与释放之前,先回顾一下相关知识. TCP是面向连接的运输层协议,它提供可靠交付的.全双工的.面向字节流的点对点服务.HTTP协议便是基于TCP协议实现的.(虽然作为应用层协议,H ...
- HTTP的RST包与WinHttp延迟关闭TCP连接
一.RST包也常见于断开TCP连接 几个月前用wireshark抓HTTP包发现有的网络通信在结束的时候没有使用四次握手,而是直接使用RST包.如: 在TCP协议中RST表示复位,用来异常的关闭连接 ...
- 一个完整的TCP连接
当我们向服务器发送HTTP请求,获取数据.修改信息时,都需要建立TCP连接,包括三次握手,四次分手. 什么是TCP连接? 为实现数据的可靠传输,TCP要在应用进程间建立传输连接.它是在两个传输用户之间 ...
随机推荐
- WIN10 搜索功能无法搜索本地应用
原因是使用360卫士此类软件把windows search 服务给禁掉了. 解决方案很简单,就是把windows search 服务重新设置成自启动,并立刻启动,就ok了. 至于如何打开服务组件,可以 ...
- cocod2d-x 之 CCDirector、CCScene、CCSprite
CCDirector是控制游戏流程的主要组件. typedef enum { /// sets a 2D projection (orthogonal projection)2D投机模式 kCCDir ...
- 使用Raphael 画图(二) 扩展的图形 (javascript)
看这文章前,建议先看第一编文章<使用Raphael 画图(一) 基本图形 (javascript)>. 在Raphael基础上扩展的图形: 要运行该例子要引入附件的2个js包.(g.rap ...
- WinPcap编程(一)
0. 按着文档顺序写的. 开发环境:win10+VS2013. 配置WinPcap环境就不多说.直接给网址:http://blog.sina.com.cn/s/blog_57432f380101qh3 ...
- Linux服务器集群技术的概述
目前,越来越多的网站采用Linux操作系统,提供邮件.Web.文件存储.数据库等服务.也有非常多的公司在企业内部网中利用Linux服务器提供这些服务.随着人们对Linux服务器依赖的加深,对其可靠性. ...
- 10条PHP高级技巧
1.使用一个SQL注射备忘单 一个基本的原则就是,永远不要相信用户提交的数据. 另一个规则就是,在你发送或者存储数据时对它进行转义(escape). 可以总结为:filter input, escap ...
- Vessels
Codeforces Round #218 (Div. 2) D:http://codeforces.com/problemset/problem/371/D 题意:就是有一些盘子,盘子里可以装水,这 ...
- [C#] - 注入DLL
原文:http://xyzlht.blog.163.com/blog/static/69301417200882834211787/ ) { MessageBox.Show("创建远程线程失 ...
- 动态规划:NOI2013 快餐店
Description 小 T打算在城市C开设一家外送快餐店.送餐到某一个地点的时间与外卖店到该地点之间最短路径长度是成正比的,小T希望快餐店的地址选在离最远的顾客距离最近 的地方. 快餐店的顾客分布 ...
- 图论(网络流):[SCOI2015]小凸玩矩阵
Description 小凸和小方是好朋友,小方给小凸一个N*M(N<=M)的矩阵A,要求小秃从其中选出N个数,其中任意两个数字不能在同一行或同一列,现小凸想知道选出来的N个数中第K大的数字的最 ...