TCP的选项
2021-08-20
滑动窗口中ACK的问题:
由于采用的是累计ACK确认,TCP不能正确的确认之前已经接受的数据,由于接受的数据是无序的,所以接受到数据的序列号也是不连续的。在这种情况下,TCP接收方需要防止引用程序使用超出空洞的数据
由此引出了SACK(选择确认选项)---可以使得TCP发送发能够了解到接收方当前的空洞(以及在序列空间中超出空洞的乱序数据块),这样就能在报文段丢失或被接受方遗漏时更好的进行重传工作
TCP状态转换图:
RET字段(重置报文段)
当发现一个到达的报文段对于相关连接而言是不正确的时,TCP就会发送一个重置报文段
针对不存在端口的请求:
当一个连接请求到达本地却没有相关进程在目的端口侦听时就会产生一个重置报文段(TCP),UDP协议规定当一个数据报到达一个不能使用的目的端口时会生成一个ICMP目的地不可达消息;
终止一条连接
FIN是有序释放,因为FIN实在之前所有排队数据都已发送后才被发送出去,通常不会出现数据丢失的情况;
然而在任何时刻,我们都可以通过发送一个重置报文段替代FIN来终止一条连接。
终止一条连接可以提供两大特性:
- 任何排队的数据都将被抛弃,一个重置报文段会被立即发送出去
- 重置报文段的接收方会说明通信另一端采用了终止的方式,而不是一次正常关闭
SOCKET选项(SO_LINGER)可以实现该选项
半开连接
如果在未通知另一端的情况下,通信的一端关闭或终止连接,就称为半开状态。此种情况一般发生在通信方主机崩溃的情况下(反正不是正常关机)
一进入连接队列
一个并行的服务器会为每一个客户端分配一个一个新的进程或线程,这样负责侦听的服务器能够始终准备着处理下一个到来的连接请求。
新的连接可能会处于两种状态:
- 一种是连接尚未完成但是已经接受到SYN(也就是处于SYN_RCVD状态)
- 另一种是连接已经完成了三次握手并且处于ESTABLISHED状态,但还未被应用程序接受
linux中规定:
当一个连接请求到达(即SYN报文段),将会检查系统范围的参数(默认为1000),如果处于SYN_RCVD状态的连接数目超过了这一阈值,进入的连接将会被拒绝
如果队列中已经没有足够的空间分配给新的连接,TCP将会延迟对SYN做出响应,从而给应用程序一个跟上节奏的机会。
原文地址:https://www.cnblogs.com/221lin/p/15168249.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 数据库连接池引起的FullGC问题,看我如何一步步排查、分析、解决
- Swift 数组dropFirst方法
- Swift 类方法和实例方法
- 我从未见过的牛逼解说方式!Redis五种数据结构,看一遍就懂了
- Swift 动态创建ViewController
- Office 文档解析 文档格式和协议
- 查看centos 7里敏感信息的常用命令(未完)
- C# dotnet 使用 FileStream 随机文件读写
- datables之加载数据时显示进度条
- 这几种常见的“分布式锁”写法,搞懂再也不怕面试官,安排
- C# 8.0 文件长度 Bytes 字节转 KB 等单位字符串
- LeetCode---两数之和
- 通过 cmd 批处理文件将 16 进制转 10 进制数字
- HTML5-JS操作页面滚动条(禁止、隐藏、显示、不显示)
- 追根溯源MySQL,“你的表情”插入对了吗?