专栏首页大前端计算机网络原理梳理丨传输层

计算机网络原理梳理丨传输层

目录

  1. 传输层的基本服务
  2. 传输层的复用与分解
  3. 停—等协议与滑动窗口协议
  4. 用户数据报协议(UDP)
  5. 传输控制协议(TCP)

传输层的基本服务

传输层的核心任务是为应用进程之间提供端到端的逻辑通信服务

主要功能都有:

  • 传输层寻址
  • 应用层报文的分段和重组
  • 报文的差错检测
  • 进程间的端到端可靠数据的传输控制
  • 面向应用层实现复用与分解
  • 端到端的流量控制
  • 拥塞控制
传输层功能

传输层协议提供逻辑通信服务 传输层协议只需在端系统中实现 通信的真正断电并不是主机,而是主机中运行的应用进程

注意:传输层负责的是应用服务间的通信,网络层负责的是主机间的通信。

传输层寻址与端口
  1. 用统一的寻址方法对应用进程进行标识——端口号。如常见的 HTTP 服务,端口号为 80
  2. 在全网范围内利用“IP地址+端口号”唯一标识一个通信端点
  3. 传输层端口为16位整数,包含三类: 3.1 数值为0-1023:熟知端口号,如 HTTP 协议的80端口 3.2 数值为1024-49151:登记端口号,需要向IANA申请注册,防止重复 3.2 数值为49152-65335:短暂端口号 或 客户端口号,留给客户进行选择暂时使用

TCP协议:POP3 端口号 110 、SMTP 端口号 25 、HTTP 端口号 80 UDP协议:DNS 端口号 53

无连接服务与面向连接服务
  1. 无连接服务:数据传输之前无需与对端进行任何信息交换(即“握手”),直接构造传输层报文段并向接收端发送。——UDP
  2. 面向连接服务:在数据传输之前,需要双方交换一些控制信息,简历逻辑连接,然后再传输数据,数据传输结束后还需要再拆除连接。——TCP

传输层的复用与分解

多路复用与多路分解

多路复用与多路分解是传输层的一项基本功能,支持众多应用进程共同使用同一个传输层协议,并能够将接受到的数据准确交付给不同的应用进程。

无连接的多路复用与多路分解

UDP 套接字:<目的IP地址,目的端口号> UDP 套接字的端口号是 UDP 实现多路复用与多路分解的重要依据

面向连接的多路复用与多路分解

TCP 套接字:<源IP地址,源端口号,目的IP地址,目的端口号> 当一个 TCP 报文段从网络层到达主机时,该主机会根据这四个值来将报文段分解到相应的套接字。


停—等协议与滑动窗口协议

可靠数据传输的基本原理
  1. 差错检测:利用差错编码实现数据包传输过程中的比特差错检测
  2. 确认:接收方想发送方反馈接收状态
  3. 重传:发送方重新发送接收方没有正确收到的数据
  4. 序号:确保数据按序提交
  5. 计时器:解决数据丢失问题
停-等协议

停-等协议协议的主要特点是发送发没发送一个报文段后就停下等待接收方的确认

工作过程为:

  1. 发送方发送经过差错编码和编号的报文段,等待接收方的确认;(发送并等待确认)
  2. 接收方如果正确接受报文段,即差错检测无误且序号正确,则接受报文段,并向发送方发送ACK,否则丢弃报文段,并向发送方发送NAK;(接受并确认/否认)
  3. 发送方如果收到ACK,则继续发送后续报文段,否则重新发送刚发的报文段。(继续发送/重发)
滑动窗口协议

由于停-等协议降低了信道利用率,限制了传输性能,所以出现了改进解决方案——流水线协议(管道协议),采用这种协议将允许发送方在没有收到确认前连续发送多个分组,流水线协议增加了分组序号的范围,发送方和(或)接收方必须缓存多个分组

滑动窗口协议就是典型的流水线协议

其实停-等协议也算是滑动窗口协议的一种

代表性的滑动窗口协议:

  1. 回退N步:(Go-Back-N,GBN)协议 发送端窗口大小较大,可以在未得到确认前连续发送多个分组,但接收端窗口大小仅为1,只能接受1个暗许到达的分组,未按序到达的分组或者某个分组差错,就会引起发送方抽发改分组及其之后的所有分组。
  2. 选择重传:(Selective Repeat,SR)协议

增加接收方方缓存能力(接收窗口>1),缓存正确到达但失序的分组,仅要求发送方重传违背接收方确认的分组,等确实的分组到达后,一并想上层按序提交


用户数据报协议(UDP)

用户数据报协议 UDP 是 Internet 传输层协议,提供无连接、不可靠 、数据报尽力传输服务

UDP 数据报结构
  1. 源端口号和目标端口号:用于实现复用与分解
  2. 长度字段:在 UDP 报文段中的字节数(首部和数据的总和)
  3. 校验和:接收方用来检测该报文段是否出现差错
UDP 校验和的计算
  1. 对所有参与运算的内容(包括UDP报文段)按16位(16位对齐)求和
  2. 球和过程中遇到任何溢出(即进位)都被回卷(即进位与和的最低位再加)
  3. 最后得到的和取反码

传输控制协议(TCP)

传输控制协议 TCP是 Internet 传输层协议,提供面向连接可靠传输服务。TCP 报文首部的大小一定是4字节的倍数,其中固定首部大小为20字节且不变。

TCP 报文段结构

源端口号:报文发送方地址 目的端口:报文接收方地址 序号:报文的顺序编号 确认号:接收方返回接下来希望接收的数据的序号 数据偏移:报文可能会分为若干段,此字段表示拆分后的序号 ACK:确认位,当它的值为1时,确认号才是有效的 SYN:同步请求,TCP连接中连接双方协商初始的序号 RST:复位,TCP连接中数据传输发生异常需要重新发送 FIN:通信结束后,当它的值为1时拆除连接 窗口:告诉对方接受窗口有多大,大小可变,流量控制时使用 校验和:TCP对数据进项校验时使用

TCP 建立连接

建立连接需要 3次握手

  1. SYN连接请求
  2. SYNACK确认
  3. ACK确认
TCP 断开连接

断开连接需要 4次挥手

TCP 可靠数据传输
  1. TCP 的可靠数据传输实现机制包括差错检验、确认、序号、重传、计时器等。
  2. TCP 的可靠数据传输基于滑动窗口协议,但是发送窗口的大小动态变化。
  • 封装TCP报文
  • 发出一个报文段后启动一个计时器
  • 通过校验和发现数据差错
  • 通过需要重新排序,丢弃重复的报文段
  • 流量控制
TCP流量控制
  1. TCP 协议通过滑动窗口协议实现流量控制,但不是简单的滑动窗口协议,它的窗口是可以动态变化的。
  2. TCP 建立时,双方都为之分配了固定大小的缓冲空间,TCP的接收端只允许另一端发送其缓冲区所能接纳的数据。 2.1 接收端在给发送端发送确认段时,通告接受窗口的大小 2.2 发送端在接下来发送数据段时,确保未确认段的应用层数据总量不超过接收端的接受窗口大小,从而确保接收端不会发生缓存溢出。
TCP拥塞控制
  1. 窗口机制 通过调节窗口的大小实现对发送数据速率的调整
  2. 窗口调整的基本策略 加性增加,乘性减小(Additive Increase,Multiolicative Decrease,AIMD) 网络未发生拥塞时,逐渐“加性”增大窗口大小,当网路拥塞时“乘性”快速减小窗口大小
  3. TCP的拥塞控制算法 包括慢启动、拥塞避免、快速重传、快速恢复4个部分

本篇到此完结,更多 计算机网络知识 全面 and 系统的梳理中,持续更新~

期待您点击关注或点击头像浏览更多 大前端工程师 技术干货!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • HTTP 请求全解

    HTTP(Hyper Text Transfer Protocol)是一套计算机通过网络进行通信的规则。计算机专家设计出HTTP,使HTTP客户(如Web浏览器...

    码脑
  • Android Studio 3.0 实现 WIFI 真机调试 / AS 3.0 实现无线真机调试

        目前可选插件有多款,但问题是升级 AS 到 3.0 后,好几款都不能连接到手机,以下推荐这款是笔者新配置的,完全可用么得问题,运行速度给力!

    码脑
  • 计算机网络原理梳理丨网络安全

    明文:未被加密的消息 密文:被加密的消息 加密:伪装消息以隐藏消息的过程 解密:密文转变为明文的过程

    码脑
  • TCP报文发送的那些事

     今天我们来总结学习一下TCP发送报文的相关知识,主要包括发送报文的步骤,MSS,滑动窗口和Nagle算法。

    remcarpediem
  • TCP报文发送的那些事

     今天我们来总结学习一下TCP发送报文的相关知识,主要包括发送报文的步骤,MSS,滑动窗口和Nagle算法。

    remcarpediem
  • FineCMS 漏洞不仅皮囊好看,灵魂更有趣

    0x00 背景 最近在挖掘FineCMS源码的漏洞,发现了一些有趣的洞,斗哥计划先从配置文件写入开始分析,然后再结合存储XSS进行GetShell,本篇先分析配...

    漏斗社区
  • VS Code 新版本重磅发布,迎来 2020 年首个重大更新!

    北京时间 2020 年 2 月 7 日,微软发布了 Visual Studio Code 1.42 版本,这也是 2020 年 VS Code 首次大更新。让我...

    GitHubDaily
  • Vuejs开发过程中一些常见问题的解决方法

    在看demo的时候看到在vue-router写着keep-alive,keep-alive的含义: 如果把切换出去的组件保留在内存中,可以保留它的状态或避免重新...

    javascript.shop
  • 快速学习-RestFul接口设计

    随着互联网的发展, 尤其是移动互联为代表的Web3.0时代. 客户端层出不穷, 以APP、微信、PC浏览器为代表, 服务端业务逻辑是基本一致的。那么有没有一种方...

    cwl_java
  • Flex事件机制(二)

    上一篇简单的介绍了Flex的事件机制以及处理事件的四种方式,本篇的主要内容是利用自定义事件在父子组件之间传递数据。        在Flex开发中,很多时候需...

    高爽

扫码关注云+社区

领取腾讯云代金券