拥塞控制

TCP如何保证可靠传输(转)

梦想的初衷 提交于 2019-11-28 12:15:58
TCP协议传输的特点主要就是面向字节流、传输可靠、面向连接。这篇博客,我们就重点讨论一下TCP协议如何确保传输的可靠性的。 确保传输可靠性的方式 TCP协议保证数据传输可靠性的方式主要有 : 校验和 序列号 确认应答 超时重传 连接管理 流量控制 拥塞控制 校验和 计算方式:在数据传输的过程中,将发送的数据段都当做一个16位的整数。将这些整数加起来。并且前面的进位不能丢弃,补在后面,最后取反,得到校验和。 发送方:在发送数据之前计算检验和,并进行校验和的填充。 接收方:收到数据后,对数据以同样的方式进行计算,求出校验和,与发送方的进行比对。 注意:如果接收方比对校验和与发送方不一致,那么数据一定传输有误。但是如果接收方比对校验和与发送方一致,数据不一定传输成功。 确认应答与序列号 序列号:TCP传输时将每个字节的数据都进行了编号,这就是序列号。 确认应答:TCP传输的过程中,每次接收方收到数据后,都会对传输方进行确认应答。也就是发送ACK报文。这个ACK报文当中带有对应的确认序列号,告诉发送方,接收到了哪些数据,下一次的数据从哪里发。   序列号的作用不仅仅是应答的作用,有了序列号能够将接收到的数据根据序列号排序,并且去掉重复序列号的数据。这也是TCP传输可靠性的保证之一。 超时重传   在进行TCP传输时,由于确认应答与序列号机制,也就是说发送方发送一部分数据后

计算机网络面试题3

倖福魔咒の 提交于 2019-11-28 08:30:32
面试中网络方面的知识被问到的概率很大,尤其是互联网公司,要熟悉osi七层模型,其中TCP/IP方面的知识尤其重要。如果自己平时有Socket编程的经验对面试也是很有帮助的。网络方面有空可以看看TCP/IP详解卷一和UNIX网络编程。以下总结了一些面试中常问的问题: 1、TCP为什么需要3次握手,4次断开? “三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误”。 client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接。”

计算机网络之传输层

为君一笑 提交于 2019-11-28 06:05:25
计算机网络之传输层 网络层只把分组发送到目的主机,但是真正通信的并不是主机而是主机中的进程。传输层提供了进程间的逻辑通信,传输层向高层用户屏蔽了下面网络层的核心细节,使应用程序看起来像是在两个传输层实体之间有一条端到端的逻辑通信信道。 (向两个主机中进程间的通信提供通用数据传输服务) 主要协议: TCP 、 UDP 。 典型设备:适配器,转发器,网桥,以太网交换机 UDP 和 TCP 的特点 UDP 首部格式 TCP 首部格式 TCP 的三次握手 TCP 的四次挥手 TCP 可靠传输 TCP 滑动窗口 TCP 流量控制 TCP 拥塞控制 1. 慢开始与拥塞避免 2. 快重传与快恢复 UDP 和 TCP 的特点 用户数据报协议 UDP(User Datagram Protocol)是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多的交互通信。 传输控制协议 TCP(Transmission Control Protocol)是面向连接的,提供可靠交付,有流量控制,拥塞控制,提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块),每一条 TCP 连接只能是点对点的(一对一)。 区别: TCP是面向连接的,UDP是面向无连接的 TCP是可靠的

TCP

送分小仙女□ 提交于 2019-11-28 05:38:37
面向连接的可靠数据传输协议 首部20字节,主要包括序号(32bit),确认号,源端口,目的端口号(16bit) 序号+累积确认+重传 流量控制:发送方维护接受窗口(接收方缓存空间大小) 四次挥手:全双工,一方请求断开连接,不代表另一方发送数据完毕。fin_wait1---(接收ack)--->fin_wait2---(接收fin,发送ack)--->timewait---()--->closed,time_wait为了给对方重发fin包的时间,且确保该次连接产生的报文段全部消失。 拥塞控制: 1. 慢启动:cwnd初始值为1,每rtt时间翻倍,直到>=ssthresh,进入拥塞避免。或发生一个由超时指示的丢包事件时,ssthresh被置为cwnm/2,cwnd被置为1,并重新开始慢启动。 2. 拥塞避免:每rtt时间cwnd增加1。 3. 快速重传+快速恢复:收到3个冗余的ack将重发未确认的报文段,然后进入快速恢复阶段。 快速恢复: step1: if(dupacks>=3){ ssthresh=max(2,cwnd/2); cwnd=ssthresh+3; } step2: 重新发送丢失的分组 step3: 此后每收到一次重复的ack,cwnd++。 step4: 收到非重复ack,置cwnd为ssthresh,进入拥塞避免阶段。    来源: https://www

计算机网络基础知识点四

╄→尐↘猪︶ㄣ 提交于 2019-11-28 01:24:59
运输层 网络层为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信,运输层向高层用户屏蔽了下面网络核心的细节,它使应用进程看见的就好像在两个运输实体之间有一条端到端的逻辑通信信道。 UDP和TCP的特点 用户数据报协议UDP的主要特点是: 1)无连接 2)尽最大努力交付 3)面向报文 4)无拥塞控制 5)支持一对一、一对多、多对一和多对多的交互通信 6)首部开销小(只有四个字段:源端口、目的端口、长度、检验和) 传输控制协议TCP的主要特点: 1)面向连接 2)每一条TCP连接只能是点对点的(一对一) 3)提供可靠交付的服务 4)提供全双工通信 5)面向字节流 TCP用主机的IP地址加上主机上的端口号作为TCP连接的端点。这样的端点就叫做套接字或插口。套接字socket=(IP地址:端口号);每一条TCP连接唯一的被通信两端的两个端点(即两个套接字)所确定,即TCP连接::={socket1,socket2}={(IP1:port1),(IP2:port2)} UDP的首部格式 首部字段只有8个字节,包括源端口、目的端口、长度、检验和。12字节的伪首部是为了计算检验和临时添加的。 TCP的首部格式 TCP报文段首部的前20个字节是固定的 1)源端口和目的端口:分别写入源端口号和目的端口号 2)序号:用于对字节流进行编号 3)确定号:期望收到的下一个报文段的序号

【TCP协议】---TCP三次握手和四次挥手

冷暖自知 提交于 2019-11-27 23:28:24
TCP协议 本文内容如下: 1)TCP协议概念 2)TCP头部结构和字段介绍 3)TCP流量控制 滑动窗口 4)TCP拥塞控制 慢启动、拥塞避免、快重传、快恢复 有关TCP的三次握手四次挥手单独写了一篇博客: 【TCP协议】---TCP三次握手和四次挥手 有关TCP粘包和黏包,也单独写一篇博客,下一篇博客就写有关粘包黏包问题。 一、TCP概念 TCP(Transmission Control Protocol 传输控制协议)是一种 面向连接(连接导向) 的、 可靠的 、 基于IP的传输层 协议。 首先来看看OSI的七层模型 我们需要知道 TCP 工作在网络OSI的七层模型中的第四层—— 传输层 , IP在第三层——网络层 , ARP 在第二层——数据链路层 ;同时,我们需要简单的知道,数据从 应用层发下来,会在每一层都会加上头部信息,进行 封装,然后再发送到数据接收端。这个基本的流程你需要知道,就是每个数据都会经过数据的封装和解封 装的过程。 在OSI七层模型中,每一层的作用和对应的协议如下: 二、TCP头部结构和字段介绍 从上面图片可以看出,TCP协议是封装在IP数据包中。 下图是TCP报文数据格式。TCP首部如果不计选项和填充字段,它通常是20个字节。 下面分别对其中的字段进行介绍: 源端口和目的端口 各占2个字节

tcp/udp

人盡茶涼 提交于 2019-11-27 20:19:16
DP、TCP、可靠传输的工作原理、TCP首部格式、TCP可靠传输的实现、TCP流量控制、TCP的拥塞控制、TCP的连接管理这几个方面进行解析。 一、运输层协议概述 1.进程之间的通信 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最低层。 当两台主机使用网络的核心部分的功能进行点对点通信的时候,只有位于边缘部分的主机的协议栈才有运输层,而网络核心的路由器在转发的时候只有用到下三层的功能。 image 应用进程之间的通信: 两个主机进行通信实际上就是两个主机中的应用进程互相通信。 应用进程之间的通信又称为端到端的通信。 输层的一个很重要的功能就是复用和分用。应用层不同进程的报文通过不同的端口向下交到运输层,再往下就共用网络层提供的服务。 “运输层提供应用进程间的逻辑通信”。“逻辑通信”的意思是:运输层之间的通信好像是沿水平方向传送数据。但事实上这两个运输层之间并没有一条水平方向的物理连接。 image 运输层的主要功能: 运输层为应用进程之间提供端到端的逻辑通信(但网络层是为主机之间提供逻辑通信)。 运输层还要对收到的报文进行差错检测。 运输层需要有两种不同的运输协议,即面向连接的 TCP 和无连接的 UDP。 两种不同的运输协议: 运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等)

TCP协议之网络延时

拟墨画扇 提交于 2019-11-27 14:15:48
影响TCP 网络时延的因素 硬件速度 网络和服务器的负载 请求和响应报文的尺寸 客户端和服务器之间的距离 TCP 协议的技术复杂性 TCP协议产生的时延 TCP 连接建立握手; TCP 慢启动拥塞控制; 数据聚集的 Nagle 算法; 用于捎带确认的 TCP 延迟确认算法; TIME_WAIT 时延和端口耗尽。 TCP连接建立 TCP连接的建立,需要经历3个报文的交互过程,沟通相关连接参数,这个过程称为三次握手(three-way handshake)。 因此,如果在每次发送数据之前,都重新建立一次TCP连接,那么建立连接的耗时将对性能产生较大的影响(特别是在发送少量数据的情况下)。 三次握手四次挥手(参考自coolshell) 优化方法 建立长连接,多次数据的发送复用同一条连接。 TCP慢启动 如果在发送方和接收方之间存在多个路由器和速率较慢的链路,此时多个发送方一开始便向网络发送多个报文段,由于受网络传输和服务端处理能力的影响,一些中间路由器必须缓存分组,并有可能最终耗尽存储器的空间,因而更多的报文发送将使网络出现拥塞。 TCP慢启动(slow start),就是用于防止因特网的突然过载和拥塞的一种流量控制机制。 慢启动为发送方的TCP增加了一个窗口:拥塞窗口(congestion window),简称cwnd。 刚建立连接时,拥塞窗口被初始化为1个报文段。每收到一个ACK

TCP拥塞控制

…衆ロ難τιáo~ 提交于 2019-11-27 10:59:19
TCP必须使用端到端拥塞控制而不是使网络辅助的拥塞控制,因为IP层不向端系统提供显式的网络拥塞反馈。TCP采用的方法是让每一个发送方根据所感知到的网络拥塞程度来限制其能向连接发送流量的速率。 几个相关概念: 1. MSL    MSL 是Maximum Segment Lifetime英文的缩写,中文可以译为“报文最大生存时间”,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。 2. TTL   IP头中有一个TTL域,TTL 是 time to live的缩写,中文可以译为“生存时间”,这个生存时间是由源主机设置初始值但不是存的具体时间,而是存储了一个ip数据报可以经过的最大路由数,每经 过一个处理他的路由器此值就减1,当此值为0则数据报将被丢弃,同时发送ICMP报文通知源主机。RFC 793中规定MSL为2分钟,实际应用中常用的是30秒,1分钟和2分钟等。 TTL与MSL是有关系的但不是简单的相等的关系,MSL要大于等于TTL。 3. RTT   RTT是客户到服务器往返所花时间(round-trip time,简称RTT),TCP含有动态估算RTT的算法。TCP还持续估算一个给定连接的RTT,这是因为RTT受网络传输拥塞程序的变化而变化 4. MSS: Maximum Segment Size 最大报文段长度   为了达到最佳的传输效能

TCP拥塞控制

时光总嘲笑我的痴心妄想 提交于 2019-11-27 10:59:03
慢启动? 最初的TCP在连接建立成功后会向网络中发送大量的数据包,这样很容易导致网络中路由器缓存空间耗尽,从而发生拥塞。因此新建立的连接不能够一开始就大量发送数据包,而只能根据网络情况逐步增加每次发送的数据量,以避免上述现象的发生。具体来说,当新建连接时,cwnd初始化为1个最大报文段(MSS)大小,发送端开始按照拥塞窗口大小发送数据,每当有一个报文段被确认,cwnd就增加1个MSS大小。这样cwnd的值就随着网络往返时间 (Round Trip Time,RTT)呈指数级增长,事实上,慢启动的速度一点也不慢,只是它的起点比较低一点而已。我们可以简单计算下: 开始 ---> cwnd = 1 经过1个RTT后 ---> cwnd = 2*1 = 2 经过2个RTT后 ---> cwnd = 2*2= 4 经过3个RTT后 ---> cwnd = 4*2 = 8 如果带宽为W,那么经过RTT*log2W时间就可以占满带宽 拥塞避免 ? 从慢启动可以看到,cwnd可以很快的增长上来,从而最大程度利用网络带宽资源,但是cwnd不能一直这样无限增长下去,一定需要某个限制。TCP使用了一个叫慢启动门限(ssthresh)的变量,当cwnd超过该值后,慢启动过程结束,进入拥塞避免阶段。对于大多数TCP实现来说,ssthresh的值是 65536(同样以字节计算)。拥塞避免的主要思想是加法增大