(两百七十八)《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

相关文章

一文详解Java异常处理你都了解哪些知识

《一文详解Java异常处理你都了解哪些知识》:本文主要介绍Java异常处理的相关资料,包括异常的分类、捕获和处理异常的语法、常见的异常类型以及自定义异常的实现,文中通过代码介绍的非常详细,需要的朋... 目录前言一、什么是异常二、异常的分类2.1 受检异常2.2 非受检异常三、异常处理的语法3.1 try-

Java中的@SneakyThrows注解用法详解

《Java中的@SneakyThrows注解用法详解》:本文主要介绍Java中的@SneakyThrows注解用法的相关资料,Lombok的@SneakyThrows注解简化了Java方法中的异常... 目录前言一、@SneakyThrows 简介1.1 什么是 Lombok?二、@SneakyThrows

Java中字符串转时间与时间转字符串的操作详解

《Java中字符串转时间与时间转字符串的操作详解》Java的java.time包提供了强大的日期和时间处理功能,通过DateTimeFormatter可以轻松地在日期时间对象和字符串之间进行转换,下面... 目录一、字符串转时间(一)使用预定义格式(二)自定义格式二、时间转字符串(一)使用预定义格式(二)自

Redis Pipeline(管道) 详解

《RedisPipeline(管道)详解》Pipeline管道是Redis提供的一种批量执行命令的机制,通过将多个命令一次性发送到服务器并统一接收响应,减少网络往返次数(RTT),显著提升执行效率... 目录Redis Pipeline 详解1. Pipeline 的核心概念2. 工作原理与性能提升3. 核

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

Nginx location匹配模式与规则详解

《Nginxlocation匹配模式与规则详解》:本文主要介绍Nginxlocation匹配模式与规则,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、环境二、匹配模式1. 精准模式2. 前缀模式(不继续匹配正则)3. 前缀模式(继续匹配正则)4. 正则模式(大

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

Java实现优雅日期处理的方案详解

《Java实现优雅日期处理的方案详解》在我们的日常工作中,需要经常处理各种格式,各种类似的的日期或者时间,下面我们就来看看如何使用java处理这样的日期问题吧,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言一、日期的坑1.1 日期格式化陷阱1.2 时区转换二、优雅方案的进阶之路2.1 线程安全重构2

Java中的JSONObject详解

《Java中的JSONObject详解》:本文主要介绍Java中的JSONObject详解,需要的朋友可以参考下... Java中的jsONObject详解一、引言在Java开发中,处理JSON数据是一种常见的需求。JSONObject是处理JSON对象的一个非常有用的类,它提供了一系列的API来操作J

HTML5中的Microdata与历史记录管理详解

《HTML5中的Microdata与历史记录管理详解》Microdata作为HTML5新增的一个特性,它允许开发者在HTML文档中添加更多的语义信息,以便于搜索引擎和浏览器更好地理解页面内容,本文将探... 目录html5中的Mijscrodata与历史记录管理背景简介html5中的Microdata使用M