【网络原理】UDP和TCP协议重点知识汇总

news2024/11/30 14:41:36

目录

1.UDP协议:

2.TCP协议:


1.UDP协议:

  1. UDP协议的特点:无连接、不可靠传输、面向数据报和全双工
  2. UDP报文最大长度是2个字节,2个字节表示的范围就是0~65535,也就是64kb。所以如果需要使用UDP传输一个比较大的数据,就需要考虑进行拆包,把一个大的数据报拆成多个小的。
  3. 校验和的作用是检查数据是否出错了,因为传输过程中受到一些干扰是很容易导致传输的数据出错。举个例子:去超市买菜,买完后核对下是不是这么些菜,这个就相当于校验和。
  4. UDP的校验和使用一个比较常见的CRC算法(循环冗余校验),把UDP报文中每个字节都进行累加,加和放到一个俩个字节的数字中,加的过程如果溢出了那就溢出吧,最终得到的结果就是校验和。
  5. 发送方发送的时候就先计算一个校验和;接收方按照同样的规则再算一遍校验和,来和发送方的校验和比对,如果相同说明数据没问题,如果不同说明数据出错了。
  6. 应用层自定义类型,1.确定传输哪些信息(需求)2.确定数据的格式(http、xml、json、protobuffer)。

2.TCP协议:

  1. TCP的基本特性:有连接、可靠传输、面向字节流、全双工可靠传输是TCP中最核心的特性。
  2. 确认应答机制(1),是TCP保证可靠性的最核心机制。A给B发送信息后,B回复“收到”,这个收到就是应答报文,也成为ack报文。普通报文,ACK这一位为0;应答报文,ACK这一位为1。
  3. 为了避免发送的信息出现“后发先至”的情况,这种情况是网络基本结构导致的,在确认应答这个机制中,引入序号来保证不出现歧义。32位序列号针对请求数据进行的编号;32位确认序号只是针对ACK报文有效。TCP是一个字节流的协议,编号的时候也是以字节为单位进行编号的。
  4. 每个ACK都带有对应的确认序列号,意思是告诉发送者,我已经收到了哪些数据,下一次你从哪里开始发。
  5. 确认应答描述的是,数据报顺利到达对方,对方也给了个响应。但是传输的过程中有可能会丢包,如果丢包此时就需要考虑超时重传!
  6. 超时重传机制(2),(针对确认应答做出的补充,确认应答指的是一切正常的情况下,如果传输中间丢包了就涉及到了超时重传)。站在发送方的角度来看没有收到ACK,发送方不知道是发的数据丢了还是ack丢了。如果是发送方的信息丢了超时重传没有问题;可如果是ACK丢了,接收方就会重复收到信息,TCP就会针对相同的信息进行去重(保证了应用层代码通过socket读取数据的时候,读到的不是重复的数据)。
  7. 超时重传的时间如何确定。系统里面都会有配置项来描述超时的时间阙值,如果第一次发生丢包,发送方就会在到达时间阙值之后进行重传。如果重传的数据仍然无响应,还是继续超时重传,第二次的超时时间比第一次更长。超时重传的时间不是均等的,而是逐渐变大的。
  8. 这样的重传,重试几次之后,仍然无法传输,就会尝试重置TCP连接(断开重连)。如果还是连不上,则直接释放连接。
  9. ACK(应答)只是告诉发送方收到数据了;响应是携带业务上的数据。ACK是系统内核负责的会在收到请求后立刻返回;业务上的响应这个取决于你的代码。
  10. 连接管理机制(3),描述的是TCP建立连接和断开连接的过程。TCP的连接只是一个逻辑上的“虚拟连接”。
  11. 什么是建立连接,主机A和主机B建立了连接:主机A的系统内核中记录了一个数据结构包含了和他连接的对象B的(IP、端口和使用的协议等)。主机B的系统内核中记录了一个数据结构包含了和他连接的对象A的(IP、端口和使用的协议等)。
  12. 建立连接是双方建立一个相互认同的关系,“三次握手”。通信的双方各自向对方申请,尝试和对方建立连接,然后在各自给对方回应,建立连接的过程其实是四次的数据交互,但是中间俩次可以合并到一起,因为ack和syn是操作系统内核触发的,是立即发送的;因为时机完全相同操作系统就会把俩个包合并成一个。也可以是四次握手,但是没有必要!
  13. SYN(同步报文段)这一位如果为1,说明这是一个同步报文段(尝试和对方建立连接的)
  14. 为什么要建立连接!?a:检查一下当前的网络是否是畅通的,三次握手建立连接并不传输任何业务数据。b:三次握手也是在检查通信双方的发送能力和接受能力都是正常的。c:三次握手过程中也在协商一些重要的参数
  15. 俩个重点的tcp状态:LISTEN,服务器启动后绑定端口号之后(new ServerSocket完成)表示手机开机,信号良好(就可以让别人给他打电话!)。ESTABLISHED连接建立好后的稳定状态(表示电话接通,可以说话了)
  16. 断开连接,双发取消相互认同的关系,通信双方各自向对方申请断开连接,再给对方回应,“四次挥手”。
  17. 四次挥手中俩个重要的tcp状态。CLOSE_WAIT等待代码中调用close操作TIME_WAIT主动发起关闭的一方会进入TIME_WAIT,处理完最后一个ack之后不会立即释放而是保持一定时间(万一最后的ACK丢了,还有机会进行重传!);如果最后一个ack丢包了,此时B就会重新发一次FIN,如果等了一会发现FIN还没有重传过来说明ack顺利到达了,TIME_WAIT只需要等待2MSL(网络上的俩个位置之间传输数据消耗的最大时间)即可。
  18. 三次握手必须是接收端先握,四次挥手谁先挥手都可以,接收方发送的ACK和FIN不在同一时刻所以画图的时候需要分开,也不是100%不在一起。ACK是内核触发的,FIN是调用close方法。
  19. 滑动窗口(4),上述的确认应答、超时重传和连接管理都是为了提高可靠性;这里的滑动窗口为的是提高tcp的传输效率。tcp的效率再怎么提高也比不上udp的传输效率。
  20. 关于滑动窗口的含义来举个例子:我想到了个好玩的事情要和女神分享,我发送一条信息,她也回我一条信息,这样一来一回时间浪费的很多。引入了滑动窗口之后变成了这样,我直接连5条信息,女神回我一条我再发一条,回我一条再发一条,在这个过程中我等待女神回复的信息数量都是5。把这直接连发5条的信息的量称为窗口大小,窗口的大小是字节为单位把不需要等待,直接发送的数据量称为窗口的大小。
  21. 在滑动窗口的机制下,出现丢包(响应的ack丢了和传的数据丢了)。a.响应ack丢了,这种情况不要紧,因为可以通过后续的ack来确认(大学毕业证都有了,那初中高中毕业证肯定也有了!)。b.传的数据包丢了,ack就会提醒发送方缺少哪里的数据,需要重传!这里重传的是缺少的包,没缺的不用重传,这种效率比较高的重传称为“快速重传”(搭配滑动窗口机制的超时重传)。如果传输的数据很多批量传输,遵守快速重传;如果传输的数据很少,仍然按照超时重传来进行,只要丢包重传都是超时重传,快速重传是超时重传的特殊情况!
  22. 滑动窗口效率高不高取决于窗口的大小,窗口越大效率越高;但是窗口为无穷大时虽然效率最大,但是不可靠了。发送的速度是快了但是接收方吃不消,如果发的很快,接收方处理速度跟不上就会导致接收方丢弃一部分数据,tcp为了保证可靠性还要重传这些数据,让不富裕的家庭雪上加霜.....这时候就需要有其他机制来对发送方的发送速度作出限制(流量控制)。
  23. 流量控制(5),在滑动窗口的基础之上对速度做出限制,就是限制发送方的窗口大小不要太大了,根据接收端的处理能力来衡量发送方的速度。因为接收端处理数据的速度有限,如果发送端发的太快就会导致接收端的缓冲区满了,这个时候发送端继续发送数据就会造成丢包,继而引发一系列丢包重传的连锁反应,这就是为什么要引入流量控制的原因。
  24. 窗口大小多少合适呢,这个得问问接收方觉得多少合适;接收方根据自己的接收能力来反向影响发送方接下来的发送速率。接收方的接受速率如何进行量化?接收方使用接收缓冲区的剩余空间大小,来作为发送方发送速率(窗口大小)的参考数值。
  25. 接收方B收到A的数据之后,就会在ACK应答报文中,把当前接收缓冲区剩余空间大小的值反馈给发送方。每次ack都会调整窗口的大小。
  26. 如果接收方缓冲区满了就会把窗口置为0,这时发送方不再发送数据,但是需要定期发送一个窗口探测数据报,使接收端把窗口的大小告诉发送方。
  27. 拥塞控制(6),虽然滑动窗口机制可以提高tcp的效率但是如果在刚开始阶段就发送大量的数据就会引发很多问题。从少量开始,逐渐变大,如果丢包再变小,反复动态调整。
  28. 流量控制和拥塞控制都是在控制发送方的窗口大小,当这俩有分歧的时候,谁小听谁的!
  29. tcp实现拥塞控制具体方式,tcp引入了慢启动机制,先发少量的数据摸清当前网络的拥堵程度如果不丢包就要放大拥塞窗口(拥塞控制下的那个窗口大小)。当拥塞窗口的大小超过这个阈值的时候,不再按指数方式增长而是线性方式增长。每次超时重传的时候,慢启动的阈值会变成原来的一半,同时拥塞窗口置为1。
  30. 来给上述的实现方式举个例子:和对象刚谈恋爱的时候处于热恋期感情指数增长,过了热恋期慢慢的就趋于稳定的线性增长;突然有一天吵架了闹分手感情一落千丈,后来和好了又会进入热恋期不过这时的热恋时间就小于第一次.....
  31. 拥塞控制归根结底就是为了tcp协议尽可能快的把数据传输给对方,但是又避免给网络造成太大压力的折中方案。
  32. 延迟应答(7),提高传输效率的机制又是基于流量控制来引入提高效率的机制。
  33. 延迟应答的作用就是慢一点应答尽可能的让窗口大一点。
  34. 捎带应答(8),基于延时应答的基础上引入的。
  35. TCP中只要把数据传过去了,对方收到之后就会立即由内核返回一个ack确认报文;响应的数据则是由应用程序来负责传输的。
  36. 本来ack是立即就要返回的,但是由于延时应答稍微等了一会,正巧业务上也要返回这个响应,此刻就把俩个报文合二为一了。捎带应答是偶然发生的,因此四次挥手也有可能变成三次,但是不是100%的。
  37. 来给捎带应答举个例子:我在沙发上坐着看电视,突然渴了但是太懒不想动,于是就稍微等一会,过了一会想上厕所了,就起来一趟同时完成喝水和上厕所。这俩操作不是100%合并到一起的。
  38. 面向字节流(9),这里有一个典型的问题叫做“粘包问题”
  39. TCP(或者其他面向字节流的传输方式)都有一个接收缓冲区。A的应用程序就需要从接收缓冲区中读取数据,由于是面向字节流的所以A无法确定从哪里到哪里是一个完整的应用层数据报。要想解决粘包问题就要在应用层协议这里进行区分,只要定义应用层数据报协议的时候明确包和包之间的边界就可以了。
  40. 典型的方法有俩种:通过分隔符或指定包的长度(在数据包的开头位置声明长度)。
  41. TCP自身对于应用层数据报是无法做区分的;UDP面向数据报是不存在这个问题的,一个UDP数据报就是对应一个应用层报文。
  42. TCP的异常处理(10),连接异常了。
  43. a)程序崩溃了;进程异常退出了,操作系统会回收进程的资源,包括释放文件描述符表。这样的释放操作就相当于调用了对应的socket的close,执行close就会触发FIN报文,接下来就是四次挥手了。(这种情况和普通的四次挥手没啥区别)
  44. b)正常关机;关机的时候会先强制结束所有的用户进程,和上述的那个进程崩溃类似,系统内核会进行文件描述符表的释放操作,进一步四次挥手。
  45. c)主机掉电(突然的状况);掉电的是接收方,发送方不知道对面挂了,继续发送数据此时发的数据,没有ack了就会触发超时重传,重传几次之后仍然无应答就尝试重置连接,最终放弃连接。掉电的是发送方,此时接收方只能等着(也不是干等着,过了一会还会发送心跳包,来确认对方是否还在,如果对方不返回心跳包说明心跳遗失了,那就放弃连接)。
  46. d)网线断开;和主机掉电的情况一样,只不过通信双方的主机都还正常,还是按照上述俩种情况分别来进行。
  47. 如何使用UDP来实现可靠传输,考察的是TCP!

 


如果对您有帮助的话,

不要忘记点赞+关注哦,蟹蟹

如果对您有帮助的话,

不要忘记点赞+关注哦,蟹蟹

如果对您有帮助的话,

不要忘记点赞+关注哦,蟹蟹

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/3022.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qt 自定义控件

学过的东西很久不用都已经忘记了,即使是很简单的事情 1、添加一个Qt 设计师界面类 如何将这个放到比较好看并且是居中的呢? 布局--》水平-》竖直 点击大的widget 不是这两个控件 2、在主窗口中添加一个widget 来加载上面我们已经拿到组合控件 3、将这个…

HTML入门零基础教程(三)

嗨,大家好,我是异星球的小怪同志 一个想法有点乱七八糟的小怪 如果觉得对你有帮助,请支持一波。 希望未来可以一起学习交流。 目录 一、 VSCode工具生成骨架标签新增代码 1.文档类型声明标签 2.lang语言种类 3.charset字符集 二、HT…

从刘老师的进化的力量到有感,疫情阶段如何弯道超车

听了刘老师的内容,了解了一个公式:方向趋势不确定周期,那么JVS更能成为企业这几年实现弯道超车的助理。 方向事关企业生死,在方向上宁愿多花些时间,也不能犯错。不确定刺激企业短时间的痛,企业是需要化解短…

[Spring MVC 4] MyBatis 分页开发

在做Web开发的时候,需要对查询结果进行分页查询,初学者会使用原生的sql查询方式,例如limit关键字,不过这种属于对数据库物理分页了,然而会造成数据库本身的压力,所以分页管理就诞生了。一般在Mybatis中使用…

校园二手交易系统,二手交易网站,闲置物品交易系统毕业设计作品

项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于web网页的二手交易网站系统,整个网站项目使用了B/S架构,基于java的springboot框架下开发;用户通过登录网站,查询二手交易商品,购买二手交易网站…

对于volatile的看法

volatile原意是易变的,编译器对volatile修饰的变量,当要读取这个变量时,任何情况下都会从内存中读取,而不会从寄存器缓存中读取。 编译器不会对volatile修饰的变量进行任何优化 1)非volatile变量 在这个用例中&#…

codery-why蘑菇街商城项目梳理笔记

supermallagain-学习记录 项目目录搭建 安装vue以及整理目录 样式初始化 引入assets/css/normalize.css文件 在实际开发中,经常会将浏览器默认的样式进行重置 *{margin:0;padding:0;border:0;}但是*是通配符,需要把所有的标签都遍历一遍,…

MySQL底层知识总结

MySQL数据库配置主从 三大日志 -binlog 归档日志 -redolog 重做日志 -undolog docker run --name mysql102 -p 33062:3306 -e MYSQL_ROOT_PASSWORD123 -d mysql:5.7 --character-set-serverutf8mb4 --collation-serverutf8mb4_unicode_ciGRANT REPLICATION SLAVE ON *.* t…

Spring Bean 的生命周期(看着图不迷路)

目录 Bean的生命周期5步走系列: BeanLifeCycle类 Spring.xml 配置文件 BeanLifeTest测试方法 运行结果: Bean的生命周期7步走系列:在实例化Bean的前和后加了两步。​​​​ 定义myInstantiationAwareBeanPostProcessor 类 实现InstantiationAwar…

【JavaWeb】一文搞懂Java过滤器与拦截器的区别

✅✅作者主页:🔗孙不坚1208的博客 🔥🔥精选专栏:🔗JavaWeb从入门到精通(持续更新中) 📋📋 本文摘要:本篇文章主要分享Java过滤器与拦截器的知识。…

字节跳动测开实习生面试,拿15K过分吗?

今年9月面了字节跳动的测试开发岗(日常实习岗),2面技术面和1面hr面。拿到offer后,考虑到自己还是想保研怕成绩掉,选择留在学校,拒offer。 很幸运的是我的简历被内推到了其他部门,今年10月初字节…

【MySQL性能优化系列】select count(*)走二级索引比主键索引快几百倍,你敢信?

问题 在MySQL版本5.7数据测试过程中,一张百万数据的表用 select count(*)查询特别慢需要20s并且是走了主键索引,为什么查询还需要这么久?如何优化?下面我们将请到当事SQL进行发言 验证分析 猜想 先猜想一波为什么走了主键索引依…

【Vue3】手把手教你创建前端项目 Vue3 + Ts + vite + pinia

文章目录一、 项目初始化二、 代码风格安装eslint安装prettier三、 状态管理工具--Pinia优点使Pinia 基本使用四、Vue-Router4 快速上手指南五、VueUse快速上手指南什么是 VueUse简单上手六、全局样式CSS原生 css 新特性scss 或 less封装axios安装依赖封装UI 样式库一、 项目初…

数据结构(二叉树)——Java实现

作者:~小明学编程 文章专栏:Java数据结构 格言:目之所及皆为回忆,心之所想皆为过往 目录 树型结构 什么是树 树的相关概念 树的表现形式 树的引用 二叉树 概念 二叉树的种类 常规二叉树 满二叉树 完全二叉树 二叉树的性…

京东商品接口加解密算法解析

最近,闲来没事,打开看了一下京东图书的热销榜,想通过接口查看下它接口的加密方式,于是直接打开了M站的地址:https://m.jd.com/,然后打开搜索页面,如下图。 打开页面,打开开发者工具,往下滑动鼠标,获取接口地址。 解析一下接口,接口返回值跟没什么特殊说明,首尾加…

spring boot 整合 shiro 框架

1、整合shiro 1.1、创建spring boot项目 1.2、引入依赖 <dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring-boot-web-starter</artifactId><version>1.9.0</version> </dependency><!--mybatis…

云手机在黑产中的应用

虚拟化技术是当下黑灰产的热门技术。使用虚拟化环境&#xff0c;让黑灰产可以利用虚拟环境在应用运行环境的更底层这一优势&#xff0c;对 App 进行神不知鬼不觉的修改&#xff0c;从而避免在分析、破解 App 上的投入。 较早之前以 VirtualApp 为代表的 Android 虚拟化多开工具…

OpenHarmony源码分析(二):系统安全

1、 概要 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gc6K9a9A-1667380110547)(PNG/11.png)] 2、 进程隔离 OpenHarmony 内核态的进程之间无隔离,共享一块VMM空间,用户态进程每个用户用于自己独立的空间,相互之间不可见,通过MMU 机制实现进…

拓端tecdat|python在Scikit-learn中用决策树和随机森林预测NBA获胜者

全文链接&#xff1a;http://tecdat.cn/?p5222 原文出处&#xff1a;拓端数据部落公众号 在本文中&#xff0c;我们将以Scikit-learn的决策树和随机森林预测NBA获胜者。美国国家篮球协会&#xff08;NBA&#xff09;是北美主要的男子职业篮球联赛&#xff0c;被广泛认为是首屈…

【Transformers】第 5 章:微调文本分类的语言模型

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…