计算机网络学习记录 运输层 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

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

中的回退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

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

image-20240605133428472

image-20240605133451654

  • 59
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值