LV.8 D10 TCP协议如何实现可靠传输 学习笔记

TCP 最主要的特点

        TCP 是面向连接的运输层协议,在无连接的、不可靠的 IP 网络服务基础之上提供可靠交付的服务。为此,在 IP 的数据报服务基础之上,增加了保证可靠性的一系列措施。

1. TCP 是面向连接的运输层协议。 每一条 TCP 连接只能有两个端点 (endpoint),每一条 TCP 连接只能是点对点的(一对一)。

2. TCP 提供可靠交付的服务。

3. TCP 提供全双工通信。

4. 面向字节流:

        TCP 中的“流”(stream) 指的是流入或流出进程的字节序列。

        面向字节流:虽然应用程序和 TCP 的交互是一次一个数据块,但 TCP 把应用程序交下来的数据看成仅仅是一连串无结构的字节流。

 

 

 Socket 有多种不同的意思

        应用编程接口  API  称为 socket API, 简称为 socket。

        socket API 中使用的一个函数名也叫作 socket。

        调用 socket 函数的端点称为 socket。

        调用 socket 函数时其返回值称为 socket 描述符,可简称为 socket。

TCP是如何实现可靠传输的?

每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。

全双工通信的双方既是发送方也是接收方。

假设仅考虑 A 发送数据,而 B 接收数据并发送确认。因此 A 叫做发送方,而 B 叫做接收方。

 A 如何知道 B 是否正确收到了 M1 呢?

        解决方法:超时重传(如下图)

        A 为每一个已发送的分组设置一个超时计时器。

        A 只要在超时计时器到期之前收到了相应的确认,就撤销该超时计时器,继续发送下一个分组 M2 。

        若 A 在超时计时器规定时间内没有收到 B 的确认,就认为分组错误或丢失,就重发该分组。

 确认丢失(如下图)

        若 B 所发送的对 M1 的确认丢失了,那么 A 在设定的超时重传时间内将不会收到确认,因此 A 在超时计时器到期后重传 M1。

        假定 B 正确收到了 A 重传的分组 M1。这时 B 应采取两个行动:

                (1) 丢弃这个重复的分组 M1,不向上层交付。

                (2) 向 A 发送确认。

确认迟到(如下图)

        B 对分组 M1 的确认迟到了,因此 A 在超时计时器到期后重传 M1。

        B 会收到重复的 M1,丢弃重复的 M1,并重传确认分组。

        A 会收到重复的确认。对重复的确认的处理:丢弃。

 

提高传输效率:流水线传输

 连续 ARQ 协议

        发送窗口:发送方维持一个发送窗口,位于发送窗口内的分组都可被连续发送出去,而不需要等待对方的确认。

        发送窗口滑动:发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。

        累积确认:接收方对按序到达的最后一个分组发送确认,表示:到这个分组为止的所有分组都已正确收到了。

TCP报文段的首部格式

源端口和⽬的端口
        源端口和⽬的端口各占 2 字节。端口是传输层与应⽤层的服务接口;
序号
        序号占 4 字节。
        TCP 连接中传送的数据流中的每⼀个字节都有⼀个序号
        序号字段的值则指的是本报⽂段所发送的数据的第⼀个字节的序号

 

确认号
        确认号:占 4 字节,是期望收到对⽅的下⼀个报⽂段的数据的第⼀个字节的序号
数据偏移
        数据偏移(即⾸部⻓度):占 4 位,指出 TCP 报⽂段的数据起始处距离 TCP 报⽂段的起始处有多远。 单位是 32 位字(以 4 字节为计算单位)
保留
        保留:占 6 位,保留为今后使⽤,但⽬前应置为 0
紧急 URG
        
        紧急 URG:控制位。
        当 URG = 1 时,表明紧急指针字段有效,告诉系统此报⽂段中有紧急数据,应尽快传送 (相当于⾼优先级的数据)
确认 ACK
        确认 ACK:控制位。
        只有当 ACK =1 时,确认号字段才有效。当 ACK =0 时,确认号⽆效
推送 PSH (PuSH)
        
        推送 PSH (PuSH) :控制位。
        接收 TCP 收到 PSH = 1 的报⽂段后,就尽快(即“推送”向前)交付接收应⽤进程,⽽不再等到整个缓 存都填满后再交付
复位 RST (ReSeT)
        复位 RST (ReSeT) :控制位。
        当 RST=1 时,表明 TCP 连接中出现严重差错(如主机崩溃或其他原因),必须释放连接,然后再重新 建⽴运输连接
同步 SYN (SYNchronization)
        同步 SYN (SYNchronization) :控制位。同步 SYN = 1 表示这是⼀个连接请求或连接接受报⽂
        ● 当 SYN = 1,ACK = 0 时,表明这是⼀个连接请求报⽂段
        ● 当 SYN = 1,ACK = 1 时,表明这是⼀个连接接受报⽂段
终⽌ FIN (FINish)
        终⽌ FIN (FINish) :控制位。⽤来释放⼀个连接。
        ● FIN=1 表明此报⽂段的发送端的数据已发送完毕,并要求释放运输连接
窗口
        窗口:占 2 字节。
        窗口值告诉对⽅:从本报⽂段⾸部中的确认号算起,接收⽅⽬前允许对⽅发送的数据量(以字节为单位)
检验和
        检验和:占 2 字节。检验和字段检验的范围包括⾸部和数据这两部分
紧急指针
        紧急指针:占 2 字节
        在 URG = 1时,指出本报⽂段中的紧急数据的字节数(紧急数据结束后就是普通数据),指出了紧急数 据的末尾在报⽂段中的位置
选项与填充
        选项:⻓度可变,最⻓可达 40 字节
        ● 最⼤报⽂段⻓度 MSS
        ● 窗⼝扩⼤
        ● 时间戳
        填充:使整个 TCP ⾸部⻓度是 4 字节的整数倍
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值