首页 > 其他分享 >tcp介绍.2

tcp介绍.2

时间:2024-08-14 23:52:29浏览次数:12  
标签:字节 报文 2msl 发送 介绍 tcp 连接

2msl等待状态

time_wait状态也称为2msl等待状态,每个具体tcp实现必须选择一个报文段最大生存的时间msl(maximum segment lifetime).它是任何报文段被丢弃前在网络内的最长时间。

msl为2分钟,然而,实现中的常用值是30秒,1分钟,或2分钟。

对一个具体实现所给定的msl值,处理的原则是:当tcp执行一个主动关闭,并发回最后一个ack,该链接必须在time_wait状态停留的时间为2倍的msl,这样可让tcp再次发送最后的ack以防这个ack丢失(另一端超时并重发最后的fin).这种2msl等待的另一个结果是这个tcp链接在2msl等待期间,定义这个链接的插口(客户的ip地址和端口号,服务器的ip地址和端口号)不能再被使用。这个连接只能在2msl结束后才能再被使用。

遗憾的是,大多数tcp实现(如伯克利版)强加了更为严格的限制,在2msl等待期间,插口中使用的本地端口在默认情况下不能再被使用。

在连接处于2ml等待时,任何迟到的报文段被丢弃,因为处于2msl等待的、由该插口对(socket pair)定义的连接在这段时间内不能被再用,因此当要建立一个有效的连接时,来自该链接的一个较早替身(incarnation)的迟到报文作为新连接的一部分不可能不被曲解。

平静时间的概念

对于来自某个连接的较早替身的迟到报文段,2msl等待可防止将它解释成使用相同插口对的新连接的一部分,但这只有在处于2msl等待连接中的主机处于正常工作状态时才有效。

如果使用处于2msl等待端口的主机出现故障,它会在msl秒内重新启动,并建立使用故障前仍处于2msl的插口对来建立一个新的连接吗,如果是这样,在故障前从这个连接发出而迟到的报文段会被错误地当做属于重启后新连接的报文段无论无核选择重启后新连接的初始序号,都会发生这种情况。

为了防止这种情况,rfc793指出tcp在重启动后的msl秒内不能建立任何连接,这就称为平静时间(quietime).

只有极少的实现版遵守这一原则,因为大多数主机重启动的时间都逼msl秒要长。

复位报文

rst比特是用来复位的。

一般来说,无论何时一个报文段发往基准的连接(referenced connection)出现错误。tcp都会发出一个复位报文段(这里提到的基准的连接,是指由目的ip地址和目的端口号以及源ip地址和源端口号指明的连接。这就是为什么rfc 793称之为插口。

异常终止一个链接

终止一个链接的正常方式是一方发送fin.有时这也称为有序释放(orderly release).

有可能发送一个复位报文段而不是fin来中途释放一个链接。有时称这为异常释放(abortive release).

异常终止一个链接对应用程序来说有两个优点:1.丢弃任何待发数据并立即发送复位报文段;2rst的接收方会区分另一端执行的是异常关闭还是正常关闭,应用程序使用的api必须提供产生异常关闭而不是正常关闭的手段。

同时打开

同时关闭

tcp选项

每个选项的开始是1字节kind字段,说明选项的类型,kind字段为0和1的选项仅占1个字节。其他的选项在kid字节后还有len字节。它说明长度是指总长度,包括kind字节和len字节<mss 512,nopwscale 0,nop,nop,timestamp 1466470>

mss选项设置为512,后面是nop,接着是窗口扩大选项,第一个nop用来将窗口扩大选项填充为4字节的边界。同样,10字节的时间戳选项放在两个nop后,占12字节,同时使两个4字节的时间戳满足4字节边界。

3.tcp的交互数据流

如果按照分组数据计算,约有一半的tcp报文段包含成块数据(如ftp、电子邮件和usenset新闻),另一半则包含交互数据(如telnet何rlogin).

如果按字节计算,则成块数据与交互数据的比例约为90%和10%

tcp需要同时处理这两类数据,但使用的处理算法则有所不同。

交互式输入

通常每一个交互按键都会产生一个数据分组

这样就会产生4个报文段:

1来自客户的交互按键

2.来自服务器的按键确认

3来自服务器的按键回显

4来自客户的按键回显确认。

经受时延的确认

通常tcp在接收到数据时并不立即发送ack,相反,它推迟发送,以便将ack与需要沿该方向发送的数据一起发送(优势称这种现象为数据捎带ack).绝大多数实现采用时延为200ms,也就是说,tcp将以最大200ms的时延等待是否数据一起发送。

nagle算法

该算法要求一个tcp链接上最多只能有一个未被确认的未完成的小分组,在该分组的确认到达之前不能发送其他的小分组。相反,tcp收集这些少量的分组,并在确认到来时以一个分组的方法发出去,该算法的优越之处在于它是自适应的。确认到达得越快,数据也就发送的越快,而在希望减少微小分组数目的低速广域网上,则会发送更少的分组

注意到从左到右待发数据的长度是不通的,分别为:1、1、2、1、2、2、3、1和3字节。这是因为客户只有收到前一个数据的确认后才发送已经收集的数据,通过使用nagle算法,为发送16个字节的数据客户只需要使用9个报文段,而不再是16个。

关闭nagle算法

有时我们也需要关闭nagle算法。一个典型的例子是x窗口系统服务器,小窗口(鼠标移动)必须无时延地发送,以便为进行某种操作的交互用户提供实时的反馈。

这里将举另外一个更容易说明的例子--在一个交互注册过程中键入终端的一个特殊功能键。这个功能键通常可以产生多个字符序列,经常从sacii码的转义(escape)字符开始。如果tcp每次得到一个字符,它很可能会发送序列中的第一个字符(ascii码的esc),然后缓存其他字符并等待对该字符的确认。但当服务器接收到该字符后,它并不发送确认,而是继续等待接收序列中的其他字符。这就会经常触发服务器的经受时延的确认算法,标示剩下的字符没有在200ms内发送,对交互用户而言,这将产生明显的时延。

标签:字节,报文,2msl,发送,介绍,tcp,连接
From: https://www.cnblogs.com/smoke520/p/18359994

相关文章

  • tcp介绍.1
    1.tcp介绍tcp的服务tcp提供一种面向连接的、可靠的字节流服务。面向连接意味着两个使用tcp的应用(通常一个客户和一个服务器)在彼此交换数据之前必须先建立一个tcp链接。在一个tcp链接中,仅有两方进行彼此通信。tcp的服务tcp提供一种面向连接的、可靠的字节流服务。面向连接......
  • tcp介绍.4
    快速重传和快速恢复算法快速重传算法:如果一连串收到3个或3个以上的重复ack,就非常可能是一个报文段丢失了,于是我们就重传丢失的数据报文段,而无需等待超时定时器溢出。快速恢复算法:快速重传后执行的不是慢启动算法而是拥塞避免算法icmp的差错tcp能够遇到的最常见的icmp差错就是......
  • 推荐系统三十六式学习笔记:工程篇.效果保证31|推荐系统的测试方法及常用指标介绍
    目录为什么要关注指标推荐系统的测试方法1.业务规则扫描2.离线模拟测试3.在线对比测试4.用户访谈常用指标1.系统有多好?假设你已经有了自己的推荐系统,这个系统已经上线。为什么要关注指标面对推荐系统这样一个有诸多复杂因素联动起作用的系统,要时时刻刻知道它好不......
  • 【网编】——tcp编程
    tcp流程服务器 头文件:#include<sys/types.h>     /*SeeNOTES*/#include<sys/socket.h>#include<errno.h>#include<stdio.h>#include<netinet/in.h>#include<netinet/ip.h>/*supersetofprevious*/#include<arp......
  • 一篇文章带你弄懂Python基础之列表介绍和循环遍历
    大家好,我是Go进阶者,今天给大家分享一些Python基础(列表基础和循环遍历介绍),一起来看看吧~一、列表介绍想一想:字符串可以用来存储一串信息,那么想一想,怎样存储所有同学的名字呢?定义100个变量,每个变量存放一个学生的姓名可行吗?有更好的办法吗?答:列表。1.列表的格式namesList=[......
  • 7.接口文档,JWT介绍
    【一】接口文档1)公司使用使用world编写MD共享文档第三方平台:如:https://www.showdoc.com.cn/公司自研2)主要内容如下说明变更记录全局错误相关接口简要描述请求URL请求方式参数返回示例返回参数说明备注3)字段生成(coreapi使用)安装pipinstal......
  • OpenGL 之EGL API 介绍
    EGL介绍EGL是OpenGLES和底层Native平台视窗系统之间的接口。OpenGLES本质上是一个图形渲染管线的状态机,而EGL则是用于监控这些状态以及维护Framebuffer和其他渲染Surface的外部层。EGL提供如下机制:与设备的原生窗口系统通信查询绘图表面的可用类型和配置创......
  • 使用TcpDump 和 Wireshark 分析数据库异常
    MySQL:5.7.19OS:rhel6.3jdbc:mysql-connector-java-5.1.45.jarjava:17.0.7问题:MySQL数据库在修改character_set_server和表的对应字段为utf8mb4后,任然无法插入emoji表情1.抓包1、登陆MySQL服务器,确定实际使用的网卡;2、执行tcpdump-s65535-x-nn-......
  • TCP三次握手和四次挥手
    TCP三次握手和四次挥手详解在网络通信中,TCP(传输控制协议)是一个非常重要的协议,用于确保数据在不可靠的网络环境中能够可靠传输。TCP通过三次握手(Three-wayHandshake)建立连接,通过四次挥手(Four-wayTermination)终止连接。一、TCP三次握手TCP的三次握手用于确保客户端和服务器之......
  • python之numpy(1 安装及基本介绍)
    numpy介绍numpy是Python中的一个非常流行的库,它提供了大量的数学函数工具,特别是针对数组和矩阵的操作。numpy的全称是NumericalPython,它极大地简化了数组和矩阵的运算,使得Python成为进行科学计算的一个强大工具。安装numpy要安装numpy,需在终端(win+r---->cmd)提示符下执......