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叫做 ...
随机推荐
- React-Redux常见API
React-Redux是在Redux的基础上,将其大量重复的代码进行了封装. 1. Provider 利用context对象给所有子组件提供store.不再需要在每个组件都引用store. impor ...
- MySQL 中间件 - DBLE 简单使用
DBLE 是企业级开源分布式中间件,江湖人送外号 “MyCat Plus”:以其简单稳定,持续维护,良好的社区环境和广大的群众基础得到了社区的大力支持: 环境准备 DBLE项目资料 DBLE官方网 ...
- linux命令之------快捷键说明
linux快捷键说明 (1)命令或目录补齐:Tab (2)遍历历史记录:history 上移:ctrl+p,下移:ctrl+n (3)光标移动 左移:ctrl+b:右移:ctrl+f:移到首部:ctr ...
- 洛谷P2331[SCOI2005]最大子矩阵
题目 DP 此题可以分为两个子问题. \(m\)等于\(1\): 原题目转化为求一行数列里的\(k\)块区间的和,区间可以为空的值. 直接定义状态\(dp[i][t]\)表示前i个数分为t块的最大值. ...
- Matlab下的文件执行路径
Matlab下有时命令出错,源于Command窗口的路径不正确.快捷键的执行会受此影响.
- 第12组 Alpha冲刺(4/6)
Header 队名:To Be Done 组长博客 作业博客 团队项目进行情况 燃尽图(组内共享) 由于这两天在修bug,燃尽图没有下降 展示Git当日代码/文档签入记录(组内共享) 注: 由于Git ...
- TypeScript规则整理
介绍我在初学 TS 开发项目中遇到的一些问题,希望对你有所帮助~ 因为我们的JavaScript是弱类型语言,如果项目过大,或者团队人数很多,不仅代码风格不统一,以后还会很难维护 Ty ...
- Dubbo+Zookeeper的简单入门案例
1.1 Dubbo简介 Apache Dubbo是一款高性能的Java RPC框架.其前身是阿里巴巴公司开源的一个高性能.轻量级的开源Java RPC框架,可以和Spring框架无缝集成. 什么是R ...
- 帝国cms7.5整合百度编辑器ueditor教程
1.根据自己使用的帝国cms版本编码下载对应的ueditor版本 下载地址 http://ueditor.baidu.com/website/download.html#ueditor 2.解压附件, ...
- Linux 权限规划ACL
什么是ACL ACL是Access Control List的缩写,主要目的是提供传统的owner.group.others的read.write.execute权限之外的具体权限设置 ACL可以针对 ...