计算机网络学习记录 运输层 Day5

embedded/2024/9/23 22:33:38/

你好,我是Qiuner. 为记录自己编程学习过程和帮助别人少走弯路而写博客

这是我的 github https://github.com/Qiuner ⭐️

​ gitee https://gitee.com/Qiuner 🌹

如果本篇文章帮到了你 不妨点个吧~ 我会很高兴的 😄 (^ ~ ^)

想看更多 那就点个关注吧 我会尽力带来有趣的内容 😎

计算机网络学习记录 运输层 Day5

  • 老师的动画、课件做的一如既往的好,很难找到写注释的地方。但在TCP三次握手四次挥手部分可能会有点懵,因此我做了详细的介绍,在讲这一章时,私以为应当先讲后面TCP报文段首部格式的,不然不知道FIN、seq、ack等,不知道为什么要这样安排课程
  • 相信您看了我的解释后,一定能快速理解,掌握这一重难点

运输层概述

image-20240603150818556

image-20240603152112899

  • 这里的端口是标志符

  • image-20240603152352819

  • 任务管理器----详细信息

image-20240603152203234

image-20240603152211443

运输层端口号 复用 分用概念

image-20240603152526554

image-20240603152649960

image-20240603153057516

  • 下面描述了一个信息从用户pc浏览器显示的过程,建议直接看视频,截图不好描述且视频说的很清楚
  • 5.2 运输层端口号、复用与分用的概念_哔哩哔哩_bilibili

image-20240603153151424

image-20240603153835683

image-20240603153908324

UDP与TCP

image-20240603160543109

image-20240603160632742

image-20240603160713848

image-20240603162552113

image-20240603163035094

image-20240603163805824

image-20240603163815608

TCP的流量控制

image-20240603163943582

流量控制 具体实现

image-20240603165026771

  • 这里还是建议看视频,视频讲的很好 5.4 TCP的流量控制_哔哩哔哩_bilibili
  • 这个窗口之前已经出现过且说过了,您可以看这篇 计算机网络学习记录 数据链路层 Day3 (上)-CSDN博客

中的回退N帧协议,这个窗口的设计理念和他是差不多的

习题

image-20240604204612063

答案

image-20240604204750307

image-20240604204757346

TCP拥塞控制

image-20240604205638877

image-20240604205723519

image-20240604205816899

  • 这一段建议直接看视频,动画做的非常好,这个老师着实有实力5.5 TCP的拥塞控制_哔哩哔哩_bilibili

  • 要注意的是,你刚开始学到这里可能会想关于这个发送是不是持续发送这样偏门问题,但我个人认为可以理解为第一次发、第二次发、第三次发之类

image-20240604211031590

  • 到达ssthresh使用拥塞避免算法
  • 重传器超时将ssthresh变为一半然后使用慢开始算法

慢开始、拥塞避免有什么用?为什么要使用?

  • 首要用处,当然是使用这两个算法能够
  • 网络不是一个永恒不变的东西,可能在某个时间段,网络能已 12 速度传输,而下个时间段,只能以 6 的速度传输了

image-20240604211300854

image-20240605093958728

  • 这里重复确认 M2 是想让发送方发来丢失的 M2,其实没有说明在传输三个连续重复确认帧时,如果再出现丢失会发生什么

image-20240605094225131

image-20240605094430531

联系

image-20240605094521481

答案

image-20240605094634916

TCP超时重传时间的选择

当超时重传时间小时

image-20240605100539747

  • 注意 这里超时重传,不要和上面三个重传确认帧混起来。
  • 可以这样理解:这个场景是基础的 发送方发送自己数据包后 就开始期待接受方给出确认收到

当超时重传时间大时

image-20240605100501631

重传时间解决方案

image-20240605101650461

  • 很经典的解决方案,只要意识到一点:网络传输是一个持续不断的过程,那这种时候将每次传输都当做一个人,为了设计出最多人都能通过的门,只能取平均

image-20240605102049399

image-20240605102231191

image-20240605102321700

image-20240605102437218

TCP可靠传输的实现

image-20240605104734597

image-20240605105020230

发送窗口

image-20240605104956800

  • 这一段也是建议看视频 5.7 TCP可靠传输的实现_哔哩哔哩_bilibili
  • 我感觉这老师稍微详细一点 那也不需要 别人做什么学习笔记了

image-20240605105403651

image-20240605105545892

习题

image-20240605105602582

image-20240605105856910

答案

image-20240605105639766

image-20240605110024016

image-20240605110033159

TCP的运输连接管理 ** 连接建立三次握手

  • 这个是比较重要的

image-20240605110230990

image-20240605110340238

  • 客户端和服务端分别有个传输控制模块,这是在进行数据传输前必做的

image-20240605110537631

image-20240605111141186

名词解释

SYN:同步序列编号(Synchronize Sequence Numbers)

  • SYN标志位用来标识连接请求。当一个主机希望与另一主机建立TCP连接时,它会发送一个设置了SYN标志位的数据包。
  • 上图可以看见,两者都在一开始发送了SYN=1,这证明他们愿意和彼此建立TCP连接

seq:序列号(Sequence Number)

  • seq字段包含发送方选择的初始序列号(Sequence Number)。这个序列号在连接建立时发送,并且后续的所有数据包都会基于这个序列号进行编号。
  • 我的理解是:一开始发了一个100大小的数据包,然后基于这个100大小的数据包继续发送其他,这时候的seq等于100,在发送100数据包时,seq就等于200了(这里没有考虑到ack确认号)

ACK:确认序列编号(Acknowledge Sequence Numbers)

  • ACK标志位表示确认。它用来确认接收到的数据包。每个TCP数据包都有一个ACK字段,它包含下一个期望接收的字节的序列号。

ack:确认号(Acknowledgment Number)

  • ack字段包含期望接收到的下一个字节的序列号。换句话说,它是发送方收到的最后一个字节的序列号加1。

具体三次握手过程如下:

  1. 第一次握手:
    • 客户端处于CLOSED(关闭)状态,向服务器发送一个SYN数据包,设置SYN=1,并选择一个初始序列号seq=x。
    • 服务器接收到该数据包后,从CLOSED状态进入LISTEN(倾听)状态,并继续等待连接。
  2. 第二次握手:
    • 服务器处于LISTEN状态,接收到客户端的SYN包后,回复一个SYN+ACK数据包,设置SYN=1,ACK=1,seq=y,并确认号ack=x+1。
    • 客户端接收到该数据包后,从SYN-SENT状态进入ESTABLISHED(已建立连接)状态。
  3. 第三次握手:
    • 客户端处于ESTABLISHED状态,接收到服务器的SYN+ACK包后,回复一个ACK数据包,设置ACK=1,seq=x+1,并确认号ack=y+1。
    • 服务器接收到该数据包后,从SYN-RCVD状态进入ESTABLISHED状态。

此时,TCP连接建立完成,客户端和服务器可以开始数据传输。

image-20240605130311701

  • 第一个TCP请求因为晚到,发到服务器端后,服务端就直接建立连接了,但此时,TCP客户端已经关闭,因此,服务器白白等待

image-20240605130331101

练习

image-20240605130651403

  • 多看看我的解释,就能理解了

答案

image-20240605131058128

  • 其中ACK是迷惑

image-20240605131113544

TCP的运输连接管理 ** 连接释放

FIN:终止连接(Finish)

  • FIN标志位表示发送方希望终止连接。当一方希望关闭连接时,会发送一个带有FIN标志的数据包。
  • 其他和上面握手是一样的

  • 通俗就是 客户端说我要走了 (一次挥手),然后服务端将自己最后要传输的数据传过去(二次挥手),然后说那我断开了(三次挥手),客户端收到后再发一条,确认断开(四次),这个时候客户端要等一会,因为怕这个确认断开传输丢失了

具体的四次挥手过程如下:


  1. 第一次挥手(FIN from client):
    • 客户端处于ESTABLISHED状态,发送一个带有FIN标志的数据包给服务器,设置FIN=1,seq=u,ack=v。
    • 服务器接收到该数据包后,进入CLOSE-WAIT状态。
  2. 第二次挥手(ACK from server):
    • 服务器处于CLOSE-WAIT状态,确认收到客户端的FIN包,发送一个ACK数据包,设置ACK=1,seq=v,ack=u+1。
    • 客户端接收到该数据包后,进入FIN-WAIT-1状态。
  3. 第三次挥手(FIN from server):
    • 服务器处于CLOSE-WAIT状态,准备关闭连接,发送一个带有FIN标志的数据包,设置FIN=1,seq=w,ack=u+1。
    • 客户端接收到该数据包后,进入FIN-WAIT-2状态。
  4. 第四次挥手(ACK from client):
    • 客户端处于FIN-WAIT-2状态,确认收到服务器的FIN包,发送一个ACK数据包,设置ACK=1,seq=u+1,ack=w+1。
    • 服务器接收到该数据包后,进入CLOSED状态。
    • 客户端在发送完ACK后,进入TIME-WAIT状态,等待2MSL(Maximum Segment Lifetime,最大报文段生存时间),以确保服务器已经收到确认包,然后进入CLOSED状态。
  • 通过这四次挥手,TCP连接的双方能够安全地关闭连接,确保所有在传输中的数据都能够被成功接收。

image-20240605131814062

image-20240605132209331

TCP报文段的首部格式

image-20240605132255903

image-20240605132317353

image-20240605132438636

image-20240605133122446

image-20240605133149518

image-20240605133242291

  • 这里还是建议直接看视频 5.9 TCP报文段的首部格式_哔哩哔哩_bilibili

  • 都是一些新概念,得要多看几遍

image-20240605133428472

image-20240605133451654


http://www.ppmy.cn/embedded/46494.html

相关文章

如何重塑思维,轻松学会React

大家好,今天我们来聊聊如何通过重塑思维模式,轻松掌握React开发技能。React作为现代前端开发的热门框架之一,其核心功能和概念对很多初学者来说可能会有些难以理解。本文将带你深入解析React的精髓,帮助你快速上手。如果你不喜欢看…

常用的接口测试工具

大家好,当谈到软件开发中的质量保证时,接口测试无疑是至关重要的一环。在当今快节奏的开发环境中,确保应用程序的各个组件之间的交互正常运作是至关重要的。而接口测试工具则成为了开发人员和测试人员的得力助手,帮助他们有效地测…

6.6高算力开发套件深度解读 | 2024高通边缘智能创新应用大赛公开课

2024高通边缘智能创新应用大赛系列公开课即将迎来激动人心的收官之作! 美格智能新技术研究院李书杰将在本次直播中带来一场关于边缘智能模组与开发技术的专业分享盛宴,深入剖析高算力开发套件的独特魅力和核心亮点。 锁定6月6日晚上8点,直播…

yolov5的口罩识别系统+GUI界面 (附代码)

基于YOLOv5模型的口罩识别系统,结合了GUI界面,旨在帮助用户快速、准确地识别图像或视频中佩戴口罩的情况。YOLOv5是一种流行的目标检测模型,具有高效的实时检测能力,而GUI界面则提供了友好的用户交互界面,使得整个系统…

DiskCatalogMaker for Mac:您的磁盘目录管理专家

对于需要管理大量磁盘文件的用户来说,DiskCatalogMaker for Mac无疑是一款不可或缺的工具。这款专为Mac用户设计的磁盘目录制作软件,以其简洁的操作界面和强大的功能,帮助您轻松创建和管理磁盘目录。 DiskCatalogMaker支持多种磁盘格式&…

Kotlin 枚举类

文章目录 定义构造函数普通成员抽象成员when 分支判定 定义 枚举类可枚举出一系列对象,使用enum修饰,在其内部只需要写出枚举对象的名称,用逗号,分割即可(这里的Red、Green和Blue都是PrimaryColor类型的枚举对象)。 …

【nginx】nginx日志输出耗时request_time和upstream_response_time介绍

日志格式 对于一个常见的日志输出内容。 log_format main ‘$remote_addr|$time_local]|$request|$request_time|$upstream_response_time|’ ‘$status|$body_bytes_sent|$http_referer’ 了解这个内容主要原因是 最近在看服务耗时告警,发现后台和nginx接入层俩个…

香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试(三)

整期笔记索引 香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试(一) 香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试(二) 香橙派OrangePi AIpro上手笔记——之USB摄像头目标检测方案测试(…