TCP/IP学习笔记16--TCP--特点,数据重发,连接管理,段
TCP充分实现了数据传输时各种控制功能,可以进行丢包时的重发控制,还可以对次序乱掉的包进行顺序控制,这些在UDP中都是没有的。UDP是一种没有复杂控制,提供面向无连接通信服务的一种协议。TCP是面向有连接的通信协议,只有在取人对端存在的情况下才会发送数据,从而可以控制通信流量的浪费。
知识点1:TCP通过序列号和确认应答提高可靠性:
在 TCP中当发送端的数据到达接受主机时,接收主机会返回一个已经收到消息的通知,这个消息叫做确认应答(ACK)。ACK中携带着一个信息:告诉发送端下一个应该发的包的序号。

如果发送端在一定时间内没有等到对端已经收到消息的ACK,则会认为数据已经丢失了,会进行重发,保证数据的可靠性。
发送端未收到ACK并不一定意味着数据没有被接收端接受到,也可能是接收端已经接受到,只是返回的ACK在中途丢失了。在这种情况下,发送端同样认为没有发送成功,照样会重新发送数据。

在这种情况下,接收端主机可能会连续不断地接受到相同的数据包,因此需要引入一种机制来判断在接收端是否已经收到了数据,如果收到了且又来了相同的数据,那么就没有必要重复处理了。
知识点2:重发超时如何确定:
发送端发送一个数据包之后,等待接收端返回ACK,需要确定一个时间阈值,当超过这个时间接收端仍然没有收到ACK,发送端就重新发一次刚刚发送的数据。 这个重发超时如何确定呢?
最理想的情况是找到一个最小时间,它能保证ACK一定能在这个时间内返回。然而,这个时间随着数据包途径的网络环境的不同而有变化,例如在告诉的LAN中时间会较短。即使在同一个网络中,根据不同时段的网络的拥堵程度,时间的长短也会发生变化。
TCP在每次发包时都会计算往返时间(RTT, Round Trip Time),以及其偏差(类似方差的概念)。 将RTT与偏差相加得到 重发超时的时间。

上图中的虚线表示计算出来的重发超时的时间阈值。
在BSD的 UNix以及Windows系统中,超时都是以0.5秒为单位进行控制的,都是其整数倍。不过,由于最初的数据包还不知道往返时间,所以重发超时一般设置为6s左右。
另外,数据被重发之后,如果还是收不到确认应答,则进行再次发送,此时,等待确认的应答时间将会以2倍,4倍的指数函数增长。 当达到一定的重发次数后,如果仍然收不到ACK, 就会判断网络或接收端主机发生了异常,则强制关闭连接,并通知应用层程序: 通信异常强行终止。
知识点3:TCP连接的建立与断开:
在数据通信前,客户端会先向服务器发送一个SYN(请求建立连接包),如果对端发来确认应答,则认为可以进行数据通信。
客户端在通信结束时,会向服务器发送一个FIN(请求断开连接包)。 具体的流程如下所示:

TCP以段为单位发送数据:
TCP发送数据时,是将数据拆分成一个个的包发送的,每个包的长度称为“最大消息长度”(MSS: Maximum Segment Size)。最理想的情况是MSS的大小等于 IP层中不会被分片处理的最大数据长度,因为TCP发出的数据包,到达下一层IP层后,如果其大小大于IP层的单个数据包的最大长度,则IP层会拆它!
MSS是在建立连接时,三次握手的时候被计算出来的!(怪不得需要 三次握爪)
两端的主机在发出建立连接的请求时,会在TCP首部中写入MSS值,告诉对端自己的接口能够适应的MSS的大小,然后会在两者之间选择一个较小的值使用:
Ref:
《图解TCP/IP》--竹下隆史 6.4章节
TCP/IP学习笔记16--TCP--特点,数据重发,连接管理,段的更多相关文章
- TCP/IP学习笔记:TCP传输控制协议(一)
1 TCP的服务 尽管TCP和UDP都使用相同的网络层(IP),TCP却向用户提供一种面向连接的,可靠地字节流服务.两个使用TCP的应用,在彼此交换数据之前必须先建立一个TCP连接,在一个TCP连接中 ...
- tcp/ip学习笔记-TCP
tcp/ip学习笔记-TCP 彭会锋 报文发送采用的是tcp_output函数,
- tcp/ip学习笔记(1)-基本概念
为什么会有tcp/ip 在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别.就好像圣经中上帝打乱了各地人的口音,让他们无法合作一样.计 ...
- TCP/IP学习笔记(3)-IP、ARP、RARP协议
这三个协议放到一起学习是因为这三个协议处于同一层,ARP协议用来找到目标主机的Ethernet网卡Mac地址,IP则承载要发送的消息.数据链路层可以从ARP得到数据的传送信息,而从IP得到要传输的数据 ...
- TCP/IP学习笔记(5)------IP选路
静态IP选路 一个简单的路由表 选路是IP层最重要的一个功能之一.前面的部分已经简单的讲过路由器是通过何种规则来根据IP数据包的IP地址来选择路由.这里就不重复了.首先来看看一个简单的系统路由表. D ...
- TCP/IP学习笔记(3)----IP,ARP,RARP协议
把这三个协议放到一起学习是因为这三个协议处于同一层(网络层协议),ARP协议用来找到目标主机的Ethernet网卡Mac地址,IP则承载要发送的消息.数据链路层可以从ARP得到数据的传送信息,而从IP ...
- TCP/IP学习笔记17--TCP-- 窗口控制 重发控制 流控制
事业无穷年 -- 韩愈 利用窗口控制提高速度: TCP传输数据是,以一个段为单位(每次发送一个数据包),每发一个段需要一次确认应答,这样就难免存在这样的缺点:包的往返时间越长,通信性能就越低. 为解决 ...
- TCP/IP学习笔记13--IP地址的构成,广播地址,IP多播,子网掩码
现在,我是蔚蓝的 :在此岸或彼岸,我都是蔚蓝的. ---李瑾 IP对应的是OSI模型中的网络层,TCP对应的是传输层.每一个参与通信的主机都会有一个IP地址. IP地址(IPv4地址)含4个字节,每 ...
- TCP/IP学习笔记(2)-数据链路层
数据链路层有三个目的: 为IP模块发送和接收IP数据报. 为ARP模块发送ARP请求和接收ARP应答. 为RARP发送RARP请求和接收RARP应答 ip大家都听说过.至于ARP和RARP,ARP叫做 ...
随机推荐
- Vue.js not detected
安装vue devtools工具,在chrome中一直是灰色,title是Vue.js not detected ① F12关闭开发者模式 ② 刷新 ③ 然后再按F12就好了 网上看到的,居然真的有用 ...
- forword动作
forword动作 服务器内部跳转指令 语法为: <jsp:forword page = "目标页面"> 等同于:request.getRequestDispatc ...
- 修改Tomcat启动窗口的名称(Title)
内容简介 有时在运行项目时,在同一服务器会启动多个Tomcat,很难区分某个tomcat运行的是哪个项目,或者想查看tomcat的端口号,只能去server.xml中查看. 如果能把Tomcat窗口的 ...
- [CSS3] Use media query to split css files and Dark mode (prefers-color-scheme: dark)
Dark Mode: :root { --text-color: #000; --background-color: #fff; } body { color: var(--text-color); ...
- pgloader 方便的数据迁移工具
pgloader 是一个支持多种数据源迁移到pg 数据库的工具,高性能,使用灵活同时作者 也提供了docker 版本的镜像,今年3月份使用此工具的时候,发现好久都没更新了,但是 最近作者有了新版本的发 ...
- ssh:no matching host key type found. Their offer: ssh-dss
最近突然ssh 服务连接出现 no matching host key type found. Their offer: ssh-dss 以前一直没有问题 可能的原因 openssh 服务升级,加密算 ...
- 计蒜之道 百度AI小课堂-上升子序列
计蒜之道 百度AI小课堂-上升子序列 题目描述 给一个长度为 \(n\) 的数组 \(a\) .试将其划分为两个严格上升子序列,并使其长度差最小. 输入格式 输入包含多组数据. 数据的第一行为一个正整 ...
- P1071 潜伏者
//Pro:NOIP2009 T1 P1071 潜伏者 #include<iostream> #include<cstdio> #include<cstring> ...
- VSCode 本地如何查看历史页面
1.首先要在VSCode的扩展中安装一个 Local history插件,蓝色框部分不用管,直接安装即可 2.安装并操作:安装后,修改 productManage/supplierList/addSu ...
- C++2.0新特性(八)——<Smart Pointer(智能指针)之unique_ptr>
一.概念介绍 unique_ptr它是一种在异常发生时可帮助避免资源泄露的smart pointer,实现了独占式拥有的概念,意味着它可确保一个对象和其他相应资源在同一时间只被一个pointer拥有, ...