(两百七十八)《TCP/IP详解》读书笔记(一)

2023-12-19 07:18

本文主要是介绍(两百七十八)《TCP/IP详解》读书笔记(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第12章 TCP:传输控制协议(初步)

ARQ和重传

问题:

1)发送方对一个ACK需要等待多久?

TODO

2)如果ACK丢失了怎么办?

重传

另外涉及一个序列号的设计,这里重传分两种情况,一种是超时重传,一种是丢失重传,接收方可能能解收到两个包,序列号可以用来标记判断是否是重复包。

3)如果分组被接收到了,但是里面有错怎么办?

编码可检查差错,但简单的不能纠正差错,TCP使用了校验和来检查差错,如果错了就不回ack了丢弃该包,发送方会重传。

 

分组窗口和滑动窗口

窗口的含义:如果你把在一个通信对话中发送的所有分组排成长长的一行,但只能通过一个小孔来观察他们,你就只能看到他们的一个子集——像通过也给窗口观看一样。

分组窗口:已被发送方注入但还没得到确认的分组的集合

滑动窗口协议:分组分为已被接收、已发送待接收和未被发送三个部分,当一个已发送待接收的包收到ack后,分组窗口可以往未被发送方向移一下,发送下一个报文,这就像滑动了下窗口。

 

流量控制分为基于速率的流量控制和基于窗口的流量控制(使用滑动窗口最流行的方法)。ack包会带回来窗口通告和窗口更新,发送方往往会在它窗口滑动到右边的时候同时调整它的大小。

 

拥塞控制:当包发送过程中有有限内存的路由器,他们比较低速,发送方速率可能超过路由器的能力,从而导致丢包,这由一种叫做拥塞控制的流量控制形式来处理。(基于窗口的流量控制是由接收方的能力来制约的,拥塞控制是传输过程中的设备制约)

 

序列号:每个分组第一个字节在整个数据流中的字节偏移,而不是分组号

确认号:指示字节号N的ACK暗示着直到N字节(不包括N)已经被成功接收了(这另外还带来了鲁棒性,如果一个ACK丢失了,后续的ACK就足以确认前面的报文段了)

 

TCP不带选项是20字节,带了选项可达60字节,TCP的头部长度以32位字为单位,即4个字节,本身是4位,所以最长可达4*15,60字节。

 

TCP头部示意

----------------------------------------------------------------------

源端口(16)|目的端口(16)

序列号(32)

确认号(32)

头部长度(4)|保留(4)|TAG(8)|窗口大小(16)

TCP校验和(16) |紧急指针(16)

选项

----------------------------------------------------------------------

 

 

 

重传计时器:这里没说的很明白,有提及RTT(往返时间)来估算重传的计时器,当计时器计时完后进行重传。

 

 

这篇关于(两百七十八)《TCP/IP详解》读书笔记(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/511334

相关文章

Redis 的 SUBSCRIBE命令详解

《Redis的SUBSCRIBE命令详解》Redis的SUBSCRIBE命令用于订阅一个或多个频道,以便接收发送到这些频道的消息,本文给大家介绍Redis的SUBSCRIBE命令,感兴趣的朋友跟随... 目录基本语法工作原理示例消息格式相关命令python 示例Redis 的 SUBSCRIBE 命令用于订

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Python中 try / except / else / finally 异常处理方法详解

《Python中try/except/else/finally异常处理方法详解》:本文主要介绍Python中try/except/else/finally异常处理方法的相关资料,涵... 目录1. 基本结构2. 各部分的作用tryexceptelsefinally3. 执行流程总结4. 常见用法(1)多个e

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

MySQL8 密码强度评估与配置详解

《MySQL8密码强度评估与配置详解》MySQL8默认启用密码强度插件,实施MEDIUM策略(长度8、含数字/字母/特殊字符),支持动态调整与配置文件设置,推荐使用STRONG策略并定期更新密码以提... 目录一、mysql 8 密码强度评估机制1.核心插件:validate_password2.密码策略级

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

详解python pycharm与cmd中制表符不一样

《详解pythonpycharm与cmd中制表符不一样》本文主要介绍了pythonpycharm与cmd中制表符不一样,这个问题通常是因为PyCharm和命令行(CMD)使用的制表符(tab)的宽... 这个问题通常是因为PyCharm和命令行(CMD)使用的制表符(tab)的宽度不同导致的。在PyChar

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

SpringBoot请求参数传递与接收示例详解

《SpringBoot请求参数传递与接收示例详解》本文给大家介绍SpringBoot请求参数传递与接收示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋... 目录I. 基础参数传递i.查询参数(Query Parameters)ii.路径参数(Path Va