TCP与UDP协议(三次握手四次挥手)

news2024/12/25 13:01:54

TCP与UDP

  • 简介TCP和UDP
  • 一、TCP
    • 1.1 TCP的三次握手
      • 问题来了:为啥是三次握手而不是两次呢?
    • 1.2建立连接后的通信过程(丢包与乱序问题)
    • 1.3四次挥手
      • 问题来了:为什么要四次挥手?
  • 二、UDP

简介TCP和UDP

TCP、UDP都属于传输层,是传输协议
TCP基于连接,UDP基于非连接
TCP:在不稳定的信道上建立稳定的连接
在这里插入图片描述
UDP(写信):是不可靠通信,邮件发出后无法判断对方是否接收到,内容是否完整,顺序是否正常等等。
TCP(打电话):可靠的通信,必须对方接通才可以互相对话,到最后挂断。

一、TCP

1.1 TCP的三次握手

在这里插入图片描述
建立连接的过程:

  1. 当客户端向服务端发起连接时,会先发一包syn包连接请求数据,进行询问,能否建立连接。
  2. 如果服务端同意连接,则回复一包syn+ack包。
  3. 客户端收到之后回复一包ack包,连接建立

举个例子:(假设客户端为A,服务端为B)
A:是B吗?我要和你说个事,听得到吗?
B:好的,你听到我说话吗?
A:我也听得到。

问题来了:为啥是三次握手而不是两次呢?

本质是为了互相确认对方的序列号。
大家也可以想想如果是前两次握手就建立了链接,无需A再次发送ack给B,其实B这边无法知道A是否可以接受信息的。第一次握手表示A可以发出信息,第二次则表示B可以接收消息和发消息。所以必须要求第三次握手,确保在不可靠的通信中实现可靠的通信。
举个握手两次翻车的例子: 例如A第一次发送syc1包,出现网络波动导致滞留,A再次发送syc2包,正常建立连接,这个时候网络正常,syc1包发送到B,B误以为建立新的连接,导致B这边以为有两个连接,而A这边只有一个连接,导致最终状态不一致。(如果这个时候有第三次A确认,就不会出现这个情况了)

1.2建立连接后的通信过程(丢包与乱序问题)

在这里插入图片描述
首先有一个发送缓冲区,数据序列是从0开始递增,A发送给B的报文中有起始序列号和长度以及内容,B接收到后会发送一个ACK就是刚刚发送的序列号加长度,确保数据不丢包,如果不一致,B可以则根据实际收到的计算丢失的序列号起点要求A重发即可。

1.3四次挥手

在这里插入图片描述
过程描述:

  1. A需要向服务端发起一包fin包,表示要关闭连接,自己进入终止等待1状态,这是第一次挥手。
  2. B 收到fin包,发送一包ack包,表示自己进入了关闭等待状态,客户端进入终止等待2状态,这是第二次挥手
  3. B此时还可以发送未发送的数据,而客户端还可以接收数据,待服务端发送完数据之后,发送一包fin包,进入最后确认状态。这是第三次挥手。
  4. A收到之后回复ack包,进入超时等待状态,经过超时时间后关闭连接,而服务端收到ack包后,立即关闭连接。这是第四次挥手

举个生活中的例子:
A:打完球了吗,饭做好了。
B:知道了,最后一个回家球!
B:进了,回家的路上。
A:OK。

问题来了:为什么要四次挥手?

由于 TCP 的半关闭(half-close)特性,任何一方都可以在数据传送结束后,发出连接关闭的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接关闭通知,对方确认后就完全关闭了TCP连接。
通俗的来说,两次挥手就可以释放一端到另一端的 TCP 连接,完全释放连接一共需要四次挥手。

二、UDP

在这里插入图片描述
特点:

  • 建立于非链接,将数据包封装一下,即可发出
  • 性能损耗少,CPU、内存占用远小于TCP,稳定性弱于TCP
  • TCP适合传输文件、发送文件、浏览网页,UDP适合域名查询、语音通话、视频,以及隧道网络:VPN等

举个例子:
在这里插入图片描述
左边兄弟把盘子中的韭菜扔出去了就不管了,不管对方是否接收到,韭菜是否散了等等。

此文章是基于B站视频而记录
视频地址:视频讲解更清晰

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

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

相关文章

机器学习笔记(持续更新)

重复值处理: 重复值处理代码: import pandas as pd data pd.DataFrame({学号: [1, 2, 3, 4, 5, 6, 7, 7, 8],身高: [172,162,175,170,168,160,164,164,160],体重: [70,62,75,68,67,58,64,64,53] }) data.drop_duplicates([学号], keep last, inplaceT…

SQL第13课挑战题

1. 使用inner join,以检索每个顾客的名称(customers表中的cust_name)和所有的订单号(orders表中的order_num). 2. 修改第一题,仅列出所有顾客,及时他们没有下过订单。 3. 使用outer join联结products表和or…

【Easy RL】Easy RL蘑菇书全书学习笔记

【Easy RL】Easy RL蘑菇书全书学习笔记 第一章 强化学习基础1.1 强化学习概述监督学习强化学习与监督学习的不同之处二者的区别总结强化学习的特征强化学习的优越性预演(rollout)和 轨迹(trajectory)的概念端到端的概念深度强化学…

BurpSuite内置浏览器打不开(实用解决法/简便)

也不知道出现了什么问题就是莫名其妙的内置浏览器打不开,有时候不想配置代理很麻烦,这里实用的解决办法. 任务一 报错情况(反正也看不懂) 任务二 我们先去尝试打开这个运行模式,然后我们再去重试,如果还是打…

【重学 MySQL】五十九、二进制字符串类型与 JSON 类型

【重学 MySQL】五十九、二进制字符串类型与 JSON 类型 二进制字符串类型JSON类型 在MySQL数据库中,二进制字符串类型与JSON类型各自具有独特的特点和用途。 二进制字符串类型 二进制字符串类型在MySQL中主要用于存储二进制数据。这类数据类型包括BINARY、VARBINAR…

使用 ChatGPT Canvas 辅助 ABAP 开发

ChatGPT Canvas 是最近 OpenAI 推出的一个新功能,它不仅仅是一个简单的聊天对话式窗口。 Canvas 旨在扩展 ChatGPT 平台的功能,超越简单的问答交互。 Canvas 可以在单独的窗口中打开专用工作区,用户能够更直观、更高效地与 ChatGPT 在复杂的写作或者编码项目进行协作。 有…

Nginx08-反向代理

零、文章目录 Nginx08-反向代理 1、概述 关于正向代理和反向代理,我们在前面已经介绍过了,简而言之就是正向代理代理的对象是客户端,反向代理代理的是服务端,这是两者之间最大的区别。 Nginx即可以实现正向代理,也可…

【Unity】版本不一致且未升级资产,导致 Unity Sprite 2D 动画播放错误

自己的 Unity版本是 2022.3.45f1。目前折腾的这插件 2D Action RPG Engine: Mythril2D ,推荐使用的 Unity 版本是 2021.3.18。 倒腾了这个 unity animation 动画半天,发现这个 animation sprite resolver 在导入动画帧的时候,一直都导入的是…

LeetCode 11 Container with Most Water 解题思路和python代码

题目: You are given an integer array height of length n. There are n vertical lines drawn such that the two endpoints of the ith line are (i, 0) and (i, height[i]). Find two lines that together with the x-axis form a container, such that the co…

【论文阅读】AUTOREGRESSIVE ACTION SEQUENCE LEARNING FOR ROBOTIC MANIPULATION

ABSTRACT 自回归模型在自然语言处理中取得了显著的成功。在这项工作中,我们为机器人操纵任务设计了一个简单而有效的自回归架构。我们提出了Chunking Causal Transformer(cct),它扩展了因果关系transformers的下一个单标记预测 n…

Nginx07-静态资源访问

零、文章目录 Nginx07-静态资源访问 1、Nginx解决跨域问题 (1)同源策略 同源策略(Same-Origin Policy)是一个关键的网络安全概念,由Netscape公司在1995年引入,现在被所有现代浏览器所采用。它限制了从一…

基于JAVA的鲜花商城管理系统(源码+定制+讲解)鲜花商城管理系统、鲜花商城管理平台、鲜花商城信息管理、鲜花商城系统开发与应用、鲜花在线商城管理系统

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

毕业设计项目 深度学习安全帽佩戴检测(源码+论文)

文章目录 0 前言1 项目运行效果2 设计概要3 最后 0 前言 🔥这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师…

sqli-labs靶场第二关less-2

sqli-labs靶场第二关less-2 本次测试在虚拟机搭建靶场,从主机测试 1、输入?id1和?id2发现有不同的页面回显 2、判断注入类型 http://192.168.128.3/sq/Less-2/?id1’ 从回显判断多一个‘ ,预测可能是数字型注入 输入 http://192.168.128.3/sq/Less…

Sharding 分页原理分析

优质博文:IT-BLOG-CN 如果业务上需要执行如下分页查询,Sharding-JDBC如何执行分页查询的? 官方文档 select * from student_time ORDER BY create_time ASC limit 1000, 5;Sharding-JDBC分页查询时在每个分表中都查询1005条数据&#xff0c…

【树结构与栈】中等力扣练习题

二叉树中和为目标值的路径 给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。叶子节点 是指没有子节点的节点。 示例 1: 输入:root [5,4,8,11,null,13,4,7,2,null,null,5…

2024.10月7日- 非关系型数据库--- Redis

一、Redis介绍 Redis(Remote Dictionary Server),即远程字典服务,也被人们称之为***结构化数据库*** 功能:把周期性数据持久化还能实现主从复制 是一个开源的用C语言编写的支持网络、基于内存、可持久化的日志型Key-Value数据库提供多种语言的API Re…

Facebook 正式推出了一项专为 Z 世代设计的全新改版

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

基于Springboot海宝海鲜餐厅系统JAVA|VUE|SSM计算机毕业设计源代码+数据库+LW文档+开题报告+答辩稿+部署教+代码讲解

源代码数据库LW文档(1万字以上)开题报告答辩稿 部署教程代码讲解代码时间修改教程 一、开发工具、运行环境、开发技术 开发工具 1、操作系统:Window操作系统 2、开发工具:IntelliJ IDEA或者Eclipse 3、数据库存储&#xff1a…

图文深入理解Oracle DB Scheduler(续)-调度的创建

List item 今天是国庆假期最后一天。窗外,秋雨淅淅沥沥淅淅下个不停。继续深宅家中,闲来无事,就多写几篇博文。 本篇承接前一篇,继续图文深入介绍Oracle DB Scheduler。本篇主要介绍调度的创建。 1. 创建基于时间的作业 • 可以…