(6)TCP的基础知识1

UDP是一种没有复杂控制,提供面向无连接通信服务的一种协议
它将部分控制转移给应用程序去处理,自己却之提供作为传输层协议的基本功能
而TCP是对“传输、发送、通信”进行控制的协议
TCP与UDP的区别相当大
TCP充分实现了数据传输时的各种控制功能
可以进行丢包时的重发控制
也可以对次序打乱的分包进行顺序控制
TCP作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费
TCP的这些机制,在IP这种无连接的网络上也能实现可靠的通信
UDP没有连接控制的功能,即使对端从一开始就不存在或者中途退出网络,数据包依然能够发送出去
(当ICMP有错误返回时,有时候也控制不了再发送的机制)

1.连接

连接指的是各种设备、线路或者网络中通信的两个应用程序为了相互传递消息而专有的、虚拟的通信线路,也叫做虚拟电路
一旦建立了连接,进行通信的应用程序只需要使用这个虚拟的通信线路发送和接收数据,就可以保障信息的传输
应该程序可以不用考虑IP网络上可能出现的各种问题,依然可以转发数据
TCP负责控制连接的建立、端开、保持等管理工作

2.TCP的特点及其目的

TCP为了通过IP数据报实现可靠性传输,需要考虑很多的问题
比如:数据的破坏、丢包、重复以及分片顺序混乱等问题
TCP如果不能解决这些问题,那么可靠就无从谈起
TCP通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输

3.通过序列号与确认应答提高可靠性

在TCP当中,当发送端的数据到达接收主机以后,接收端主机会返回一个已经收到消息的通知,这个消息叫做确认应答(ACK)
ACK代表已经接收的意思,NACK代表没有接收的意思

  • (1)正常的数据传输
    在这里插入图片描述
    当数据从主机A发送到主机B时,主机B会返回给主机A一个确认应答
    TCP通过肯定的确认应答提供可靠的数据传输
    发送端将数据发送出去以后会等待对端的确认应答
    如果有确认应答,则说明数据已经成功到达对端
    如果没有确认应答,则数据丢失的可能性很大

  • (2)数据包丢失的情况
    如果在一定的时间内发送端没有等到接收端的确认应答,发送端就可以认为数据已经丢失,并且进行重发
    因此,即使产生了数据丢包,仍然能够保证数据到达对端,实现可靠传输
    在这里插入图片描述
    当数据由主机A发出后如果因为网络拥堵等等原因丢失的话,数据将无法到达主机B
    此时,如果主机A在一个特定的时间间隔内都没有收到主机B发来的确认应答,将会对数据进行重发
    未收到确认应答不一定是数据丢失,有可能时候对端已经收到数据,返回的确认应答在途中丢失了
    这种情况也会因为发送端没有收到接收端的确认应答,认为数据没有到达对端,对数据进行重新发送

  • (3)确认应答丢失的情况
    在这里插入图片描述
    当主机B返回的确认应答因为网络拥堵等原因在途中丢失,没有到达主机A
    主机A会等待一段时间,若在特定的时间内没有收到这个确认应答,主机A会对次数据进行重发
    主机B将第二次发送接收到这个数据的确认应答
    由于主机B已经由收到过1~1000这个数据,再有相同的数据到达的时候它会放弃,但还是会发送确认应答
    !!!还有一种情况是其他原因导致确认应答延迟到达,当源主机第二次发送数据以后才到达
    这种情况对于源主机来说,只要按照机制重新发送数据即可,但是对于目标主机来说无疑是一种灾难
    会反复收到同样的数据,为了对上层应用提供可靠的传输,需要放弃重复的数据包
    因此引入一种机制,能够识别是否已经接收数据,能判断是否需要接收
    以上这些确认应答处理、重发控制、重复控制等功能都可以提供序列号实现
    序列号是按照顺序给发送数据的每一个字节(8为字节)都标上好吗的编号
    序列号的初始值不一定是0,而是在建立连接以后由随机数生成,后面的计算是对每一个字节加1
    接收端查询接收数据TCP首部中的序列号和数据的长度,将自己下一步应该接收的序号作为确认应答反送回去
    这样,通过序列号和确认应答号,TCP可以实现可靠传输
    序列号也指字节与字节之间的间隔
    在这里插入图片描述

TCP的数据长度没有写入TCP首部,实际通信中计算TCP包的长度的公式:
IP首部中数据包长度-IP首部长度-TCP首部长度
MSS指的是报文最大长度

4.重发超时如何确定?

重发超时指的是在重发数据之前,等待确认应答信号到来的那个特定的时间间隔之内
这个重发超时的具体时间长度如何确定?
理想的是找到一个最小时间,能保证确认应答一定能在这个时间内返回
但是这个时间实际上随网络环境的变化是变化的
TCP要求的是不论处在何种网络环境下都要提供高性能的通信
不论网络拥堵情况发生什么变化,都必须保持这一特性
它在每次发包时都会计算往返时间及其偏差(抖动)
将往返时间和偏差相加,重发超时的时间比这个值稍微大一点
数据包的分段经过不同的线路到达,即使在这种环境下也要进行控制,尽量不要浪费网络流量
一般情况下的重发超时都是0.5s的整数倍
数据重发之后还是等不到应答,等待时间将会以2倍、4倍的速度增长
数据不会被无限制的重复发送,到达一定的次数之后,仍然没有确认应答,会认为对端主机发生异常或者网络异常,会强制关闭连接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值