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

你好,我是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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/681195.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Transformer系列:图文详解KV-Cache,解码器推理加速优化

前言 KV-Cache是一种加速Transformer推理的策略,几乎所有自回归模型都内置了KV-Cache,理解KV-Cache有助于更深刻地认识Transformer中注意力机制的工作方式。 自回归推理过程知识准备 自回归模型采用shift-right的训练方式,用前文预测下一个…

uniapp内置的button组件的问题

问题描述 由于想要使用uniapp内置button组件的开放能力,所以就直接使用了button,但是他本身带着边框,而且使用 border:none;是没有效果的。 问题图片 解决方案 button::after {border: none;} 正确样式 此时的分享…

大话C语言:第22篇 字符数组

1 字符数组概述 C语言中没有字符串这种数据类型&#xff0c;可以通过char的数组来替代。数字0(和字符 \0 等价)结尾的char数组就是一个字符串&#xff0c;字符串是一种特殊的char的数组。 #include <stdio.h>int main() {char c1[] {c, , p, r, o, g}; // 普通字符数…

算法学习笔记——时间复杂度和空间复杂度

时间复杂度和空间复杂度 常数操作&#xff1a; 固定时间的操作&#xff0c;执行时间和数据量无关 位运算 > 算数运算 > 寻址 > 哈希运算&#xff0c;都是常数操作&#xff0c;哈希运算操作时间最慢 链表的get(i)方法不是常数操作&#xff0c;因为链表不是连续的存储…

idea如何根据路径快速在项目中快速打卡该页面

在idea项目中使用快捷键shift根据路径快速找到该文件并打卡 双击shift(连续按两下shift) -粘贴文件路径-鼠标左键点击选中跳转的路径 自动进入该路径页面 例如&#xff1a;我的实例路径为src/views/user/govType.vue 输入src/views/user/govType或加vue后缀src/views/user/go…

实验八、地址解析协议《计算机网络》

水逆退散&#xff0c;学业进步&#xff0c;祝我们都好&#xff0c;不止在夏天。 目录 一、实验目的 二、实验内容 &#xff08;1&#xff09;预备知识 &#xff08;2&#xff09;实验步骤 三、实验小结 一、实验目的 完成本练习之后&#xff0c;您应该能够确定给定 IP 地…

机器学习多场景实战

机器学习已不再局限于理论探讨&#xff0c;而是广泛渗透到我们生活的方方面面&#xff0c;成为解决复杂问题、优化决策过程的强有力工具。从智能推荐系统个性化推送你可能喜爱的电影和商品&#xff0c;到金融风控领域精准识别欺诈交易&#xff1b;每一个应用场景都是机器学习技…

15 - 有趣的电影(高频 SQL 50 题基础版)

15 - 有趣的电影 select* from cinema wheredescription!boring and id%2!0 order by rating desc;

医用腕带朔源用的条形码与二维码如何选择

在医疗环境中的医用腕带作为患者身份识别和管理的重要工具&#xff0c;做为条形码和二维码腕带上的溯源技术&#xff0c;更是为患者信息快速获取、准确传递的保障&#xff0c;实现更加高效和准确的患者身份识别和管理&#xff0c;这种技术可以大大提高医疗服务的效率和质量&…

v1.2.70-FastJson的AutoType机制研究

v1.2.70-FastJson的AutoType机制研究 最近在对接Alexa亚马逊语音技能&#xff0c;Smart Home Skill Apis时&#xff0c;有一个配置的JSON字符串是这样的&#xff1a; { "capabilityResources": {"friendlyNames": [{"type": "asset",…

如何组织基于Sqlalchemy的项目

在使用 SQLAlchemy 构建项目时&#xff0c;可以遵循一些常用的组织结构和最佳实践&#xff0c;以确保项目清晰、易于维护。下面就是我在构建项目时遇到的一些问题&#xff0c;并做了详细的记录&#xff0c;为了方便大家学习少走一些弯路。 1、问题背景 在基于Sqlalchemy的项目…

python 内置map()函数(高效处理序列数据方法,将函数应用于一个序列的每个元素)(懒加载)

文章目录 深入解析 Python 内置函数 map()函数定义与用法基本示例 map() 与列表推导式比较&#xff08;列表推导式在语法上更加简洁&#xff0c; map() 在某些情况下执行效率更高&#xff09;示例&#xff1a;将数字转化为字符串 map() 结合 lambda 函数使用多个序列结论 深入解…

边缘计算网关助力自动洗车机实现远程状态监测与即时报警

随着城市化进程的加快和人们生活水平的提高&#xff0c;自动洗车机作为一种高效、便捷的洗车设备&#xff0c;在市场上的需求日益增长。然而&#xff0c;自动洗车机作为一种高价值的自动化设备&#xff0c;其运行状态和安全性直接关系到洗车质量和顾客体验&#xff0c;因此对自…

SL4010 40V耐压 300W大功率升压IC 12V5A大功率UPS电源专用

在当今这个信息高速发展的时代&#xff0c;电力稳定已成为企业运营和个人生活的核心需求。UPS&#xff08;不间断电源&#xff09;作为电力的守护者&#xff0c;其性能和质量直接关系到我们的工作和生活能否顺畅进行。今天&#xff0c;我们为您推荐一款高性能的UPS应急电源芯片…

RPC框架原理(一)

RPC框架原理 网络和IO的关系&#xff0c;IO&#xff08;input和output&#xff09;面向的是谁&#xff1f;OSI 7层参考模型&#xff0c;TCP/IP协议为什么会出现一个会话层三次握手socket心跳keep alive四次挥手 网络IO&#xff08;IO模型&#xff09; IO框架底层 学习顺序&…

k8s学习--sessionAffinity会话保持(又称会话粘滞)详细解释与应用

文章目录 sessionAffinity简介什么是sessionAffinity模式介绍应用场景工作原理优势 应用环境步骤2. 给服务打补丁&#xff0c;增加会话粘滞 设置回sessionAffinity为None sessionAffinity简介 什么是sessionAffinity 简单理解 确保把来自同一客户的一个完整会话的请求转发至后…

喜讯丨泰迪智能科技实力中标“健康大数据与人工智能实验室建设”项目

泰迪智能科技以健康数据分析与应用为主题的实验中心&#xff0c;为学校大健康产业大数据与人工智能应用人才培养提供载体&#xff0c;并基于培养中心根据学生专业的不同&#xff0c;提供不同的健康大数据学习资源&#xff0c;实现健康大数据技术和数据分析应用能力培养普遍提升…

深入理解计算机系统 家庭作业5.13

A:关键路径在xmm0那条路,书中几条关键路径全部是xmm0,有xmm1时,xmm1也是 B:3 C:1 D:按书中的定义: 关键路径才是下界!按书上的方法根据 图5-12 算出关键路径的CPE即可. 非关键路径把它视为黑盒子.因为是乱序和超标量的,没办法搞清楚处理器具体怎么处理这些指令.

c# 开发的wpf程序闪退,无法用try catch捕获异常

之前开发的一个程序是c#wpf开发&#xff0c;基于.net framework 4.6.1的&#xff0c;一切都是正常的&#xff0c;但是在我重新装了win11后在程序logo出现后直接闪退&#xff0c;报错 返回值为 -1073740791 (0xc0000409)&#xff0c;而且定位到代码时发现是&#xff0c; publi…

LabVIEW2017破解安装教程

LabVIEW2017破解安装教程&#xff1a; 1、新版LabVIEW2017分为32位和64位两个平台&#xff0c;多种语言版本(需要LabVIEW2017中文版的朋友请选择WinChn版本)&#xff0c;大家选择自行选择符合系统的版本下载并解压 2、本次安装以Win 7 64位系统为例&#xff0c;运行“2017LV-64…