IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 计算机网络 - 传输层 -> 正文阅读

[网络协议]计算机网络 - 传输层

概述

只有主机在有的层次

在这里插入图片描述

为应用层提供通信服务
并且可以使用网络层提供的服务

传输层的功能

  • 传输层提供给进程与进程之间的逻辑通信
    1. 与网络层的区别是 网络层是为主机与主机之间的通信提供服务 所以一般到网络层的时候 数据传输是还没有完成的
    2. 从网络层来说 通信的双方是两台主机 IP数据报的头部给出了这两台主机的IP地址
    3. 但“两台主机之间的通信”实际上是两台主机中的应用进程之间的通信 应用进程之间的通信又称端到端的逻辑通信
    4. “逻辑通信”意思是传输层之间的通信好像是沿水平方向发送数据 实际上是自上而下的数据封装之后发送到目的主机然后再自下而上解封装
  • 复用和分用
    1. 复用是指发送方不同的应用进程都可以使用同一个传输层协议传送数据
    2. 分用是指接受方的传输层在剥去报文的头部之后能够正确把这些数据交付到目的应用进程
    3. 注意 传输层的复用分用和网络层的复用分用功能不同
    4. 网络层的复用是指发送方不同协议的数据都可以封装成IP数据报发送出去
    5. 网络层的分用是指接收方的网络层在剥去头部之后把数据交付给相应的协议
  • 传输层对收到的报文进行差错检测
    1. 传输层会检查报文的头部和数据部分
    2. 网络层只检查报文的头部 不会检查数据部分是否出错
  • 传输层的两种协议 : TCP UDP
    1.网络层无法同时实现这两种协议 要么只提供面向连接的服务 要么只提供无连接服务

传输层的两种协议

大概说一下
后面详细说

TCP

面向连接的传输控制协议

传送数据之前必须建立连接
数据传送结束后要释放连接
不提供广播或多播服务
由于TCP要提供可靠的面向连接的传输服务
因此不可避免增加了需要开销 : 确认、流量控制、计时器以及连接管理等

由于是面向连接的
所以比较可靠
但是时延比较大
适用于大文件

UDP

无连接的用户数据报协议UDP

传输数据之前不需要建立连接
收到UDP报文后也不需要给出任何确认

因为无连接
所以不太可靠
但是时延小
适用于小文件

比如一个小表情包之类的

传输层的寻址与端口

复用 : 应用层所有的应用进程都可以通过传输层再传输到网络层
分用 : 传输层从网络层收到数据后交付指明的应用进程

那么分用时如何指明呢 需要一个唯一的标识 叫做端口

端口

  • 端口是传输层的SAP 标识主机中的应用进程
  • 端口有一个唯一的标识叫做端口号
  • 端口号只有本地意义 在因特网中不同计算机的相同端口是没有联系的
  • 端口号长度为16bit 能表示65536个不同的端口号
  • 传输层使用的是软件端口
  • 硬件端口是不同硬件设备进行交互的接口 软件接口是应用层的各种协议进程与传输实体进行层间交互的一种地址
  • 数据链路层的SAP是MAC地址 网络层的SAP是IP地址 传输层的SAP是端口

按照端口号的范围有服务端使用的端口号和客户端使用的端口号

在这里插入图片描述

  • 客户端口号在一个进程结束的时候就可以分配给另一个进程 是可以复用的
  • 熟知端口号是固定的 见下图

在这里插入图片描述

套接字

  • 在网络中采用发送方和接收方的套接字组合来识别端点
  • 套接字唯一标识了网络中的一个主机和它的一个进程

在这里插入图片描述

UDP协议

主要特点

  1. UDP是无连接的 减少开销和发送数据之前的时延
  2. UDP使用最大努力交付 即不保证可靠交付
  3. UDP是面向报文的 适合一次性传输少量数据的网络应用
  4. UDP无拥塞控制 适合很多实时应用
  5. UDP头部开销小 8B 而TCP是20B

在这里插入图片描述
这里可以看到
应用层给UDP多长的报文 UDP就照样发送 即一次发一个完整报文
是不会对应用层的报文进行修改的

如果应用层的报文太大的话 就会导致网络层的IP数据报过大
会使IP数据报分片 影响网络层的效率

如果应用的报文太小的话 就会导致网络层的IP数据报数据部分比IP头部还小
也会影响网络层的效率

UDP首部格式

在这里插入图片描述

8个字节的首部字段
其余部分为数据字段 当然数据字段是可以为0的
所以UDP数据报最小就是8个字节

16位源端口号是可有可无的
比如当前数据报不需要回复的话
源端口号就可以全为0

16位目的端口号是必须有的
需要指明当前数据报要发给谁

16位UDP长度是整个数据报的长度

16位UDP检测和
检测整个UDP数据报是否有错 错就丢弃

分用时 找不到对应的目的端口号 就丢弃报文
并给发送方发送ICMP “端口不可达”的差错报告报文

UDP检验和的检验过程

在这里插入图片描述

UDP用户数据报首部那里加了一个伪首部 研究一下这个

伪首部里面包含了

  • 源IP地址
  • 目的IP地址
  • 0 : 固定全0
  • 17 : 首部的协议字段 UDP协议对应的字段值就是17
  • UDP长度

所以是模仿了IP数据报的首部

伪首部只有在计算检验和时才出现
不向下传送也不向上递交

这里学习一下如果使用伪首部进行校验的
在这里插入图片描述
这张图是发送端准备发送的UDP数据报 加上伪首部部分

把这个整体看作是好多个16进制字串组成的 那么每4个字节分一下

我们知道UDP首部后面有16位的检验和 这里先填0

如果数据部分不够16位的话 需要补0

这是第一步

接下来伪首部+首部+数据部分采用二进制反码求和

在这里插入图片描述
然后把去和的反码填入检验和字段

这时候就可以去掉伪首部了 然后发送端就可以发送报文了

这时候来到接收端 进行两个步骤

第一个步骤 再把伪首部填回去

然后伪首部+首部+数据部分采用二进制反码求和

这里注意首部最后2B我们已经填上了在发送端计算出来的检验和

在这里插入图片描述
加起来之后 如果结果16位都是1 那么说明无差错

否则丢弃数据报 或者交给应用层附上出差错的警告 剩下的事情就由应用层处理了

TCP协议

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-09-09 12:08:14  更:2021-09-09 12:09:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 23:31:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码