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要在应用进程间建立传输连接.它是在两个传输用户之间 ...
随机推荐
- utf8汉字编码16进制对照
utf8汉字编码16进制对照 GB Unicode UTF-8 Chinese Character Code code# Code (coded in UT ...
- 在Thinkphp3.2 中使用PHPMailer 发送邮件
phpmailer发送邮件是php开发者首选的一个邮件发送插件了,下面我来介绍怎么集成phpmailer到thinkphp框架了,有需要了解的朋友可参考. phpmailer发送邮件功能很强大,今天真 ...
- truncate 命令删除恢复
truncate命令可以一次性删除当前表中所有记录并且不留任何日志,同时这个表的ID就自动初化从1开始,今天我就来给大家尝试一个利用truncate清除记录之后恢复过程. 实际线上的场景比较复杂,当时 ...
- Js随机数--网页版的体育彩票选号器
<script> function Quickpick() { var ball for( ball = 0; ball < 5; ball++) { this[ball] = pa ...
- laravel框架——线上环境错误总结
除了根目录,其他目录访问全是Not Found
- 物联网操作系统 - Contiki
What is Contiki? Contiki is an open source operating system for the Internet of Things. Contiki conn ...
- NET笔试题集
题目来源于传智播客和各大互联网,复习.重新整理贴出来. 1.简述 private. protected. public. internal.protected internal 访问修饰符和访问权限 ...
- input placeholder文字垂直居中(Mobile & PC)
Html5输入框支持placeholder,但是在定义文本框中定义placeholder存在兼容问题 <input type="text" placeholder=" ...
- Android Wear开发 - 数据通讯 - 第一节 : 连接数据层
http://developer.android.com/training/wearables/data-layer/accessing.html Accessing the Wearable Dat ...
- AJAX 中Sys.WebForms.PageRequestManager的事件激发顺序 《转》
AJAX 中Sys.WebForms.PageRequestManager的事件激发顺序 测试代码: 测试代码如下: <%@ Page Language="C#" AutoE ...