网络原理(四):传输层协议 TCP/UDP

2023-11-11

目录

应用层

传输层

udp 协议 

端口号

报文长度(udp 长度)

校验和

TCP 协议

确认应答

超时重传

链接管理

滑动窗口

流量控制

拥塞控制

延时应答

捎带应答

总结


我们第一章让我们对网络有了一个初步认识,第二章和第三章我们通过代码感受了网络通信程序。

而本章的 通信原理  进一步了解网络是如何实现工作的,本章主要以理论为主,本章的理论非常多,面试常考,工作中也会常用,同时也非常抽象。

我们之前提到过的:由于复杂的网络环境催生出了复杂的网络协议,我们将这些复杂的协议拆分成 多种小协议;再将这些小协议进行分类可以分成不同的层级。

我们这一章将重点介绍应用层和传输层,其他层了解即可。

应用层

我们这里简单介绍,后面介绍 http 协议的时候我们会重点介绍。

应用层直接和代码相关;直接决定了数据需要传输什么,接收方需要拿到那些数据,拿到后如何使用。

应用层这一层中现存着一些现有的协议,比如HTTP协议,也可以是自己写的协议;

我们最开始就聊到过微信发送消息的那个栗子,

这就是简单的看一看,实际上远比这个复杂的多,具体的如何实现呢?

需要根据需求去写:

比如我们的微信小程序:美团外卖

需要传输哪些信息(根据需求)

 具体需求按照啥格式来组织(随意约定)

具体的我们留在http 协议来细说。

传输层

再传输层中我们已经认识了两个协议 udp 和 tcp 协议。

我们先挑个软柿子捏,捏完软的我们再捏硬的。

udp 协议 

我们先来看看udp 报文结构:

去网上copy 几张下来:

这个是大部分计算机网络教材上的图,事实上这个图其实并不准确,我们来画一张实际的图:

  1. 伪头部 : 只是为了提取 IP 数据报中的源IP,目的IP信息并加上协议等字段构造的数据。在实际传输中并不会发送,仅起到校验和计算使用,因此称之为伪首部。
  2. 源端口号 : 一般是客户端程序请求时,由系统自动指定,端口号范围是 0 ~ 65535,0~ 1023为知名端口号。
  3. 目的端口 : 一般是服务器的端口,一般是由编写程序的程序员自己指定,这样客户端才能根据ip地址和 port 成功访问服务器
  4. UDP 长度 : 是指整个UDP数据报的长度 , 包括 报头 + 载荷,
  5. UDP校验和 : 用于检查数据在传输中是否出错,是否出现bit反转的问题,当进行校验时,需要在UDP数据报之前增加临时的 伪首部。

 我们看到上述的报头都是两个字节:都是 0 ~ 65535;

端口号

源端口、源IP   表示数据来自哪里

目的端口、目的IP    表示数据要去哪里;

就像唐僧说的那样:贫僧自东土大唐而来,到西天拜佛取经。

我们的端口号一般小于 1024 的都别那些有名的大公司软件用了;像我们耳熟能详的MySQL 它也才是 3306 ;如果非要用其实也没事。

报文长度(udp 长度)

2个字节长度,也是 0 ~ 65535 也就是 64k 的大小,说大不大,说小也不算小。

为什么但是设计的时候,不设计大一些呢,这就是时代的局限了,换成当年,64k 已经非常大了,当时的电脑内存那才多少 M 啊;但是对于现在我们来说,64k 太小了,随便一个小插件都不知64k。

因为电子元件的发展,64k 对我们来说太小了,随便发一些数据都可能超过这个数字。

所以我在使用 udp 编程的时候,需要注意了,需要控制大小,不然超出这个大小就会出现一些不必要的问题。

校验和

 在我们的网络传输过程中,并非那么的稳定,随时都会出现问题,例如:受强磁产的作用,辐射,或者其他物理环境影响,都会造成网络传输的不稳定。

我们都知道,路由器、交换机之间传输的是高、低电平,转换为 01 的二进制,那么在这些特殊情况就可能造成: 0 - 1 变为 : 1 - 0 ;我们把这种现象称之为 比特翻转。

所以,我们在此基础上提出了:校验和,就是用来判断一下目前传输的数据时候发送了错误;但是这个校验和不是 100% 正确的

例如:

我们要去买菜:番茄、土豆、黄瓜、青菜; 一共是四种菜,我们买回来四种不一定正确,但是买回来不是 四种一定不正确。

  • 校验和正确,数据不一定是正确的,
  • 但是检验和如果不正确,数据一定是不正确的

校验和更多的用处不是“证实”,而是为了证伪,判断数据是不是错的

ok;说到这我们算是吧 udp 这个软柿子捏完了,接下来到了难啃的硬骨头:TCP / IP。

TCP 协议

我们之前讲到过:

TCP 协议的特点:

  1. 有链接
  2. 可靠传输
  3. 全双工
  4. 面向字节流

我们本章的重点在于 "可靠传输"

可靠不是说百分之百可靠,我们的可靠是尽可能传输过去,哪怕没有传输过去,起码需要让对方知道自己没有传输过去。

这个核心机制就来了:确认应答、超时重传 这个是确保可靠的核心!!!

确认应答

这个机制是实现可靠传输的核心;

举个栗子

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

网络原理(四):传输层协议 TCP/UDP 的相关文章

  • 第七章、并发编程实战项目

    一 并发任务执行框架 架构师是什么 在一个软件项目开发过程中 将客户的需求转换为规范的开发计划及文本 并制定这个项目的总体架构 指导整个开发团队完成这个计划的那个人 就是 架构师 一般是一个项目里的最资深的专业技术人员 可以说架构师首先一定
  • 【SDOI2016】数字配对【建立二分图+费用流求方案数】

    题目链接 首先 我们可以看一下这个推导过程 如果 那么 对于 就一定不是质数 一定是它的一个因子 于是可以看出 这一定是一幅二分图 于是 可以根据二分图的性质来确定了每个点的属于S边还是T边了 include

随机推荐

  • 《深入理解mybatis原理》 MyBatis事务管理机制

    版权声明 本文为博主原创文章 未经博主允许不得转载 https blog csdn net u010349169 article details 37992171 MyBatis作为Java语言的数据库框架 对数据库的事务管理是其非常重要的
  • 在手机端点击input框不弹出输入法的方法

    1 使用CSS样式 input pointer events none 2 使用事件阻止 input onmousedown function e e preventDefault 这样不仅会阻止键盘 同时 input 会失去光标跟随 如果
  • 通俗易懂的LSTM

    目录 一 LSTM的基础知识 1 长依赖的问题 2 LSTM的核心 3 LSTM的门结构 4 LSTM门结构的作用 5 LSTM的变体 GRU 二 LSTM的补充知识 1 LSTM缓解梯度消失的原因 一 LSTM的基础知识 1 长依赖的问题
  • Python OpenCV 解决人脸识别报错cascade.detectMultiScale error

    Authored by Monana Contact me via serena9636 163 com 环境 Python2 7 OpenCV3 1 0 Win 64bit 我想在OpenCV中实现一段如下的很简单的人脸识别代码 这也是在
  • vsCode返回上一步

    vsCode返回上一步 windows Alt 上下左右的左箭头 Linux Ctrl Alt 减号
  • 图像信噪比的理解

    图像的信噪比和图像的清晰度一样 都是衡量图像质量高低的重要指标 图像的信噪比是指视频信号的大小与噪波信号大小的比值 其公式为 S N 信噪比 20 log 信号 噪声 dB 信噪比大 图像画面就干净 看不到什么噪波干扰 表现为 颗粒 和 雪
  • 使用VMware完成KVM虚拟化实验并运行Centos

    本次实验在VMware中的Ubuntu18内安装KVM并运行centos 首先 在VMware下开启虚拟化 更新软件索引 apt get update 安装依赖 apt get install qemu kvm qemu virt mana
  • js验证姓名,包括少数民族名字中的·,后你哦·就两节课了

    姓名验证 u4E00 u9FA5 uf900 ufa2d s 2 20 亲测
  • Outlook VBA自动处理邮件

    需求描述 公司里面每天都会有很多邮件 三分之一都是不需要看的 Outlook的过滤功能不错 都可以处理掉 还有些邮件 根据正文或者附件做一下处理自动转发出去就行了 于是上网搜集了一些资料 写个了小程序 共享一下 以后可以参考 也希望对大家有
  • Linux系列一 VMware 中 Fedora系统的安装与网络配置

    之前一篇文章 简单地总结了自己的Linux假期培训课程 因为自己也打算开始学习Linux 所以就在这里写点东西 记录自己的学习历程 如果也能给大家带去一点帮助的话 甚是欣慰 能力时间有限 难免有疏漏的地方 还希望大家多多批评指正 本篇文章的
  • C++——set 和 multiset

    文章目录 结构 构造 非更易型操作 查找操作 赋值操作 迭代器相关操作 插入和移除操作 自定义排序准则 Set 和 multiset 会根据特定的排序准则 自动将元素排序 两者不同之处在于 multiset 允许元素重复而 set 不允许
  • [bzoj1359][Baltic2009]Candy

    给定N个数对 T i S i 表示时刻 S i 时在位置 T i 处出现一粒糖果 有一些机器人可供使用 每个机器人可花费一单位时间向相邻位置移动 要求用最少的机器人接到全部糖果 时刻0时机器人位置可自行安排 1 leq N leq10000
  • centos断电重启卡在登录前界面的问题解决

    出现这个情况的原因猜测是断电 启动后就卡在登录前界面 只有网络是通的 其他服务貌似都没正常启动 ssh远程终端也连不上 ctrl alt 1 切换到详细信息模式下看到这样的错误 就是文件系统xfs有损坏 查资料都说是需要通过xfs repa
  • c语言编程3*3矩阵的转置

    include
  • 【FreeRTOS】任务通知的使用

    作者主页 凉开水白菜 作者简介 共同学习 互相监督 热于分享 多加讨论 一起进步 专栏资料 https pan baidu com s 1nc1rfyLiMyw6ZhxiZ1Cumg pwd free 点赞 收藏 再看 养成习惯 订阅的粉丝
  • Java比较两个对象是否相同并获取值不同的属性

    最近项目中要加操作日志 同时要把用户修改了那些字段记录下来 在更新的时候就需要比较之前的数据和现在的数据有哪些不同 这么多类一个一个的比较就太麻烦了 所以打算写一个工具类 主要思想还是通过反射获取类的属性的getter方法 调用getter
  • 【Mo 人工智能技术博客】基于耦合网络的推荐系统

    基于耦合网络的推荐系统 作者 陈东瑞 1 复杂网络基础知识 当我们拿起手机给家人 朋友或者同事拨打电话时 就不知不觉中参与到了社交网络形成的过程中 当我们登上高铁或者飞机时 就可以享受交通网络给我们带来的方便 即使当我们躺在床上什么也不干时
  • 【Java小实验】【Java并发】使用线程池按行并发取二维数组最大值

    使用线程池按行并发取二维数组最大值 生成二维数组 使用Callable实现线程 使用Runnable获取线程 快手后端二面问题 由于网上直接搜竟然没有搜出来 自己写了一下 生成二维数组 生成二维数组的公共类 class RandomArra
  • Mybatis中@MapKey注解简介说明

    转自 Mybatis中 MapKey注解简介说明 下文笔者讲述Mybatis中 MapKey注解的简介说明 Mybatis中 MapKey注解的功能 MapKey注解 1 用于返回map的key值 通常情况下使用唯一键作为key 2 此注解
  • 网络原理(四):传输层协议 TCP/UDP

    目录 应用层 传输层 udp 协议 端口号 报文长度 udp 长度 校验和 TCP 协议 确认应答 超时重传 链接管理 滑动窗口 流量控制 拥塞控制 延时应答 捎带应答 总结 我们第一章让我们对网络有了一个初步认识 第二章和第三章我们通过代