• 计算机网络笔记5 传输层


    计算机网络系列笔记目录👇

    文章前言 💗

    站在巨人的肩膀上,让知识的获得更加容易!本文为立足B站最火的湖科大教书匠计网课程和王道课程的笔记,以及前人计网博客笔记,综合自己理解,梳理的一系列完整的笔记!如果您觉得文章对您有帮助记得👍⭐️,有不足之处欢迎指出,评论和私信会在第一时间回复。或者直接私信我。

    课程相关资源(课件、PDF文档、仿真软件)稍后有时间整理后会分享链接到评论区自行下载😺

    一、运输层概述

    运输层为运行在不同主机上的应用进程提供直接的通信服务,向上层屏蔽下面的网络核心细节如(网络拓扑、路由器选择协议等),使应用进程仿佛是存在一条端到端的逻辑通信信道。

    计算机网络体系中物理层、数据链路层、网络层共同实现了主机到主机之间的通信,但是真正在网络中进行通信的实体是位于通信主机中的进程,运输层就是为运行在不同主机上的应用进程提供直接的通信服务,所以,运输层协议又称为端到端协议
    在这里插入图片描述
    根据应用需求的不同,运输层为应用层提供了两种不同的运输协议,即面向连接的TCP无连接的UDP,这是本章的主要内容

    二、运输层的端口与复用、分用的概念

    为了区分运行在计算机上的进程,使用进程标识符PID(Process ID)标志运行在计算机上的进程(不同操作系统使用不同格式的进程标识符)
    为了让不同操作系统的应用进程之间能够网络通信,TCP/IP体系的运输层用统一的方法–端口号(Port ID)区分应用层不同的应用进程
    端口号长度16bit,所以取值范围为0-65535,端口号划分如下:

    • 熟知端口号(或系统端口号或公认端口号):数值0~1023。FTP的20/21,HTTP的80,DNS的53等
    • 登记端口号(或注册端口号):数值1024-49151。为没有系统端口号的应用程序提供的。必须在IANA按照规定进行登记,以免重复。
    • 客户端使用的端口号:
      也叫做动态端口号,或者短暂端口号。数值为49152~65535,由于这类端口号仅在客户进程运行时才动态选择,程序结束则已使用过的端口号就被回收,以便以后供其它客户进程使用。

    Windows下查看PID与端口号:使用快捷键Ctrl+Shift+Esc呼出任务管理器后点击服务可查看 或者 使用快捷键win+r后再输入cmd回车,使用tasklist命令查看
    Linux下使用命令 netstat -tunlp查看或者ps

    注意: 端口号只是用来标记本计算机中应用层的各进程,在互联网中,不同计算机的相同端口是没有联系的,常用端口号如下了解即可
    在这里插入图片描述
    寻址中的复用与分用

    • 复用:应用层所有的应用进程都可以通过传输层再传输到网络层,通俗的说就是多个用户使用一个IO资源 发送消息 时,我们称之为“复用”。

    • 分用:传输层从网络层收到数据后交付给指明的应用进程,通俗的说就是多个用户使用一个IO资源 接收消息 时,我们称之为 “分用” 。
      在这里插入图片描述

    在网络层

    局域网内多个主机利用一个路由网关发送消息给互联网的其他主机。这也是复用技术。

    同理,利用网关接收路由数据报就叫 分用技术。

    在运输层

    操作系统的 多个进程(这里一个端口表示一个进程) 利用一个运输层协议(或者称为运输层接口)发送数据称为复用

    同理,接收时叫做 分用

    在应用层

    操作系统的 多个线程 利用一个端口(或者叫socket,socket = IP+端口号 )发送消息称为“”复用“”(有一个技术名词“”IO多路复用“”讲着的大概就是这个意思)

    同理,接收时叫分用

    在网络中使用套接字Scoket唯一的标识网络中的一个主机和它上面的一个进程;(Socket = IP + PID)

    三、UDP协议 和 TCP协议 对比

    用户数据报协议 UDP💦(User Datagram Protocol)

    • UDP 在传送数据之前不需要先建立连接,远程主机在收到 UDP 报文后,不需要给出任何确认。
    • UDP将可靠传输的实现放到了应用层,然后类似于TCP,实现确认机制,重传机制
    • UDP不属于连接型协议,因而具有消耗资源小,处理速度快等优点,所以通常音频、视频通话在传送时使用UDP比较多,因为它们即使丢失一两个数据包也不会对结果产生太大影响
    • UDP传输层无法保证数据的可靠传输,只能通过应用层来实现了;实现的方式可以参考TCP可靠传输的方式,只是实现不在传输层,转移到了应用层,目前有如下开源程序利用UDP实现了可靠的数据传输;分别有RUDP, RTP, UDT

    传输控制协议 TCP💦(Transmission Control Protocol)

    • TCP 提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。
    • TCP 不提供广播或多播服务。由于 TCP 要提供可靠的,面向连接的传输服务(TCP的可靠体现在TCP在传递数据之前,有三次握手来建立连接,而且在数据传递时,有流量控制、拥塞控制等机制,在数据传完后,四次挥手断开连接用来节约系统资源),这不仅使协议数据单元的首部增大很多,还要占用许多处理机资源。
    • TCP 一般用于文件传输、发送和接收邮件、远程登录等场景

    在这里插入图片描述

    四、TCP协议

    1、TCP的三次握手和四次挥手

    这点最长最复杂最重要单独开一篇文章TCP的三次握手和四次挥手
    也可看小牛肉的文章TCP的三次握手和挥手

    2、TCP的流量控制(flow control)💦

    如果发送方数据发送太快,接收方来不及接收,就会造成数据丢失,所以使用滑动窗口机制来实现流量控制,让发送方的发送速率不要太快,接收方来得及接收。
    一个案例搞懂流量控制:
    假设A和B已建立TCP连接后,设一个报文段100B,报文段序列号初始值为1,接收窗口rwnd=400,B对A流量控制,A向B发送数据窗口变化过程如下:
    ps:使用了一次累计确认机制ack和三次流量控制机制rwnd(发送窗口取接收窗口rwnd和拥塞窗口cwnd的最小值)
    在这里插入图片描述
    如果最后B不允许A再发送数据了后,B在处理完数据之后想要恢复窗口大小时,发送的有rwnd大小的数据报丢了怎么办?此时A有B的指令在前,发送窗口为0无法发送数据,B也在等待A回复,造成了类似死锁的现象
    在这里插入图片描述
    解决方法:使用计时器
    TCP为每一个连接设有一个持续计时器,只要TCP连接的一方收到对方的零窗口通知,就启动持续计时器。
    若持续计时器设置的时间到期,就发送一个零窗口探测报文段。接收方收到探测报文段时给出现在的窗口值。
    若窗口仍然是0,那么发送方就重新设置持续计时器。
    在这里插入图片描述

    3、TCP的拥塞控制💦

    在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏这种情况就叫做拥塞(congestion)。

    • 在计算机网络中的链路容量(即带宽)、交换结点中的缓存和处理机等,都是网络的资源。若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降。
      在这里插入图片描述
      拥塞控制通过如下图所示4种算法实现,通常两两结合使用
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      例题:
      在这里插入图片描述

    4、TCP的超时重传

    超时重传时间RTO设计短了容易有不必要的重传让网络负荷增大,长了容易造成数据丢失,而TCP协议采用自适应算法,动态的改变重传时间RTTs(加权平均往返时间),具体计算方法如下:
    在这里插入图片描述
    Tips:这里的算法推导有个非常精彩的过程,建议自行观看视频体会,这里只放最终算式便于总结和复习!

    5、TCP的可靠传输

    TCP基于字节为单位的滑动窗口来实现可靠传输
    在这里插入图片描述
    可靠传输这部分其实包含了很多的内容,也有和前面重合的,这部分看了不少文章还是博客园大佬靠谱儿TCP协议如何保证可靠传输?

    本章思维导图

    思维导图来源:https://blog.csdn.net/weixin_45067603/article/details/107053479,虽然B站王道的计网相比王道的其他课程略微拉跨,但是这个博主总结的很不错,所以一并用了,差不多的,之后自己会自己总结啦,学的时候感觉好多好难,谢希仁的书听老师讲了一遍还是感觉好难的样子,自己理一遍才行!
    在这里插入图片描述

  • 相关阅读:
    java Object 重写toString方法
    心累了,看一点职场思维
    使用 FFmpeg 将视频转换为 GIF 动画的技巧
    [论文必备]最强科研绘图分析工具Origin(1)——安装教程
    Linux虚拟服务器LVS了解使用
    C++之if-else基本应用
    大数据之数据质量检查
    引用类型详解
    KubeVela跨地域的多集群管理方案
    使用DevEco Studio开发一个hallo world并安装到你的遥遥领先里面
  • 原文地址:https://blog.csdn.net/BinBinCome/article/details/128050849