HCIA---TCP/UDP协议

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 目录

    前言

    一.UDP协议简介

    UDP协议的特点:

       二.TCP协议简介

        TCP协议特点

    三.TCP和UDP的区别

     四.TCP/IP结构详解

    五.TCP运输连接的阶段

     ​编辑

     TCP连接建立过程---TCP三次握手

    TCP三次握手总结: 

    TCP四次挥手:

    思维导图


前言

       通过上一篇对OSI七层参考模型的了解,我们清楚了OSI七层模型中各层的作用以及数据是如何传输的,在现实生活中,人们无时无刻不在通过电话等工具进行会话从而进行信息交流,同理,在计算机网络的世界中,设备与设备之间是如何建立连接进行数据传输的呢?接下来,让我们详细了解一下设备与设备之间是如何建立连接关系的。


一.UDP协议简介

         UDP(User Datagram Protocol,用户数据报协议)是一种轻量级的传输层协议,在计算机网络中使用。与TCP协议不同,UDP协议不保证数据传输的可靠性和顺序性,但它具有较低的延迟和较少的网络开销。UDP协议通常被用于需要实时性较高的应用程序,如音频、视频、游戏等。

         UDP协议的数据传输采用数据包的形式,每个数据包包含源端口号、目的端口号、数据长度和数据内容等信息。UDP协议没有连接的概念,因此在数据传输过程中,源端和目的端之间没有建立任何状态由于UDP协议不需要维护连接状态和各种控制信息,因此在网络中的开销比TCP协议小。但是,这也意味着UDP协议没有对数据传输的可靠性和顺序性进行保障,因此需要应用程序自行实现相关处理机制。

         UDP协议的优点是速度快、网络开销小,适用于对数据传输实时性要求较高的应用场景;缺点是不保证数据传输的可靠性和顺序性,需要应用程序自行处理相关问题。因此,在选择使用UDP协议时需要根据具体应用场景的需求进行权衡。

UDP协议的特点:

        1. 面向无连接UDP协议是一种非面向连接的协议发送数据之前不需要建立连接,也不需要维护连接的状态。因此,UDP协议的速度比TCP协议更快,但可靠性较低

        2. 简单、轻量级:UDP协议的头部较短,只有8个字节,相比之下TCP协议的头部有20个字节,因此UDP协议的数据包更小,传输效率更高

       3. 不可靠:UDP协议不提供可靠的数据传输机制,数据包可能会丢失、重复、乱序等,因此应用程序需要自己进行错误检测和重传等操作。

       4. 支持广播和多播:UDP协议可以将数据包传输给多个主机,支持广播和多播功能。

       5. 适用于实时应用:由于UDP协议传输数据速度快,数据包较小,因此适用于实时应用,如视频流、音频流等。

       6. 不支持拥塞控制:UDP协议不支持拥塞控制,当网络拥塞时,UDP协议可能会导致数据包丢失或网络负载过高。

   二.TCP协议简介

            TCP(Transmission Control Protocol,传输控制协议),是一种面向连接的、可靠的、基于字节流的传输协议。TCP协议被广泛用于Internet上的通信,它在应用层和IP层之间提供可靠的数据传输服务。

    TCP协议特点

       1.面向连接:为了确保可靠性和有序性,TCP协议在数据传输之前需要建立连接,数据传输完成后需要断开连接。

       2.可靠性:TCP协议可以确保数据的可靠性,它使用确认应答机制,如果发送方的数据没有被接收方正确接收,TCP协议会重新发送数据,直到接收方正确接收为止。

       3.流式传输:TCP协议以字节流的方式传输数据,没有数据记录的界限,可以根据需要动态地调整数据传输的大小。

       4.拥塞控制:TCP协议可以根据网络情况动态地调整数据传输的速率,避免网络拥塞。

       5.数据传输有序:TCP协议可以确保数据按照发送的顺序传输,不会出现乱序的情况。

       6.面向字节流:TCP协议以字节流的方式传输数据,没有数据记录的界限,可以根据需要动态地调整数据传输的大小。

三.TCP和UDP的区别

TCP和UDP的区别
TCP协议UDP协议
面向连接协议无连接协议
传输可靠传输不可靠
可以进行流控不可进行流控
可以分段不可分段
传输速度慢,占用资源大传输速度快,占用资源小

 四.TCP/IP结构详解

 源端口号和目的端口号(寻址)与udp中类似,用于寻找发端和收端应用进程这两个值加上IP                                                          首部中的源端IP地址和目的端IP地址唯一确定一个,在网络编程                                          中,一般一个IP地址和一个端口号组合称为一个套节字

 序号(seq):用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的第                             一个数据字节。在tcp中tcp用序号对每个字节进行计数(这个值与发送的帧数没有                           关系,而是与发送的数据字节数有关系

 确认序号(seq+1):包含发送确认的一端所期望收到的下一个序号。因此,确认序号应当是上                                         次已成功收到数据字节序号加 1(不是单纯的序号加1,还包括数据字节                                            数)。                            

 首部长度:用于记录tcp数据报首部的长度,一般为20字节,实际值为首部长度除以4。

URG紧急指针( urgent pointer)有效。
ACK确认序号有效。
PSH接收方应该尽快将这个报文段交给应用层。
RST重建连接。
SYN同步序号用来发起一个连接
FIN发端完成发送任务。

 窗口大小用于流量控制。

检验和:检验和覆盖了整个的 TCP报文段: TCP首部和TCP数据,与udp相似需要计算伪首部。

五.TCP运输连接的阶段

TCP运输连接有以下三个阶段:

  • 建立TCP连接,也就是通过三报文握手来建立TCP连接。
  • 数据传送,也就是基于已建立的TCP连接进行可靠的数据传输。
  • 释放连接,也就是在数据传输结束后,还要通过四报文挥手来释放TCP连接。

 


 TCP连接建立过程---TCP三次握手

TCP的连接建立要解决以下三个问题:

  • 1、使TCP双方能够确知对方的存在 。

  • 2、使TCP双方能够协商一些参数( 最大窗口值是否使用窗口扩大选项和时间戳选项,以及服务质量等)

  • 3、使TCP双方能够对运输实体资源(例如缓存大小连接表中的项目等)进行分配

 这是两台要基于TCP进行通信的主机:

  • 主动发起TCP连接建立称为TCP客户(client)。

  • 被动等待TCP连接建立的应用进程称为TCP服务器(server)。

我们可以将TCP建立连接的过程比喻为”握手“,“握手”需要在TCP客户端和服务器之间交换三个TCP报文段。

最初两端的TCP进程都处于关闭状态。

 

 一开始,TCP服务器进程首先创建传输控制块,用来存储TCP连接中的一些重要信息。 例如TCP连接表、指向发送和接收缓存的指针、指向重传队列的指针,当前的发送和接收序号等。之后就准备接受TCP客户进程的连接请求, 此时TCP服务器进程就要进入监听状态等待TCP客户进程的连接请求。

 TCP客户进程也是首先创建传输控制块,然后再打算建立。 TCP服务器进程是被动等待来自TCP客户端进程的连接请求,因此称为被动打开连接。

TCP连接时向TCP服务器进程发送TCP连接请求报文段,并进入同步已发送状态

TCP 连接请求报文段首部中的同步位SYN被设置为1,,表明这是一个tcp连接请求报文段。

序号字段seq被设置了一个初始值x作为TCP客户进程所选择的初始序号。

由于TCP连接建立是由TCP客户进程主动发起的,因此称为主动打开连接。 请注意TCP规定SYN被设置为1的报文段不能携带数据但要消耗掉一个序号。

TCP服务器进程收到TCP连接请求报文段后,如果同意建立连接,则向TCP客户进程发送TCP连接请求确认报文段,并进入同步已接收状态。

1.该报文段首部中的同步位SYN和确认位ACK 都设置为1,表明这是一个TCP连接请求。
2.序号字段seq被设置了一个初始值y,作为TCP服务器进程所选择的初始序号。
3.确认号字段ack的值被设置成了x+1,这是对TCP客户进程所选择的初始序号seq的确认。


请注意这个报文段也不能携带数据,因为它是SYN被设置为一的报文段但同样要消耗掉一个序号。

 TCP服务器进程收到该确认报文段后也进入连接已建立状态,现在TCP双方都进入了连接已建立状态,他们可以基于已建立好的TCP连接进行可靠的数据传输了

 

TCP三次握手总结: 

三次握手是 TCP 连接的建立过程。在握手之前,主动打开连接的客户端结束 CLOSE 阶段,被动打开的服务器也结束 CLOSE 阶段,并进入 LISTEN 阶段。随后进入三次握手阶段:

① 首先客户端向服务器发送一个 SYN 包,并等待服务器确认,其中

1.标志位为 SYN,表示请求建立连接;
2.序号为 Seq = x(x 一般取随机数);
3.随后客户端进入 SYN-SENT 阶段。

② 服务器接收到客户端发来的 SYN 包后,对该包进行确认后结束 LISTEN 阶段,并返回一段 TCP 报文,其中:

1.标志位为 SYN 和 ACK,表示确认客户端的报文 Seq 序号有效,服务器能正常接收客户端发送的数据,并同意创建新连接;
2.序号为 Seq = y;
3.确认号为 Ack = x + 1,表示收到客户端的序号 Seq 并将其值加 1 作为自己确认号 Ack 的值,随后服务器端进入 SYN-RECV 阶段。


③ 客户端接收到发送的 SYN + ACK 包后,明确了从客户端到服务器的数据传输是正常的,从而结束 SYN-SENT 阶段。并返回最后一段报文。其中:

1.标志位为 ACK,表示确认收到服务器端同意连接的信号;
2.序号为 Seq = x + 1,表示收到服务器端的确认号 Ack,并将其值作为自己的序号值;
3.确认号为 Ack= y + 1,表示收到服务器端序号 seq,并将其值加 1 作为自己的确认号 Ack 的值。
4‘随后客户端进入 ESTABLISHED。


当服务器端收到来自客户端确认收到服务器数据的报文后,得知从服务器到客户端的数据传输是正常的,从而结束 SYN-RECV 阶段,进入 ESTABLISHED 阶段,从而完成三次握手。

TCP四次挥手:

 

 你可以看到,每个方向都需要一个 FIN 和一个 ACK,因此通常被称为四次挥手

为什么挥手需要四次?

再来回顾下四次挥手双方发 FIN 包的过程,就能理解为什么需要四次了。

关闭连接时,客户端向服务端发送 FIN 时,仅仅表示客户端不再发送数据了但是还能接收数据。
服务器收到客户端的 FIN 报文时,先回一个 ACK 应答报文,而服务端可能还有数据需要处理和发送,等服务端不再发送数据时,才发送 FIN 报文给客户端来表示同意现在关闭连接。
从上面过程可知,服务端通常需要等待完成数据的发送和处理,所以服务端的 ACK 和 FIN 一般都会分开发送,从而比三次握手导致多了一次。

 

 

思维导图

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

43..利用fsolve函数解对应lambda下的方程组(matlab程序)

1.简述 fsolve的基本用法 : x fsolve(fun,x0) 其中fun应为函数句柄,x0为搜索的种子,即预估的fun0的解的大致位置。 函数句柄的定义方式主要有两种: 1.定义函数文件,使用操作符 定义function文件root2d.m, 如下: …

怎么把图片表格转换成word表格?几个步骤达成

在处理文档时,图片表格的转换是一个常见的需求。而手动输入表格是非常耗时的,因此,使用文本识别软件来自动转换图片表格可以大大提高工作效率。在本文中,我们将介绍如何使用OCR文字识别技术来将图片表格转换为Word表格。 OCR文字识…

yolov2检测网数据集标注_labelme使用_json2txt格式转换

yolov2检测网数据集标注_labelme使用_json2txt格式转换 一、安装Anaconda二、创建labelme虚拟环境三、使用labelme标注健康非健康猫狗数据3.1 打开数据集所在文件夹3.2 进行标注数据集3.3 json2txt3.4 按文件目录和训练测试数据集重分配 四、数据喂给服务器网络参考链接 一、安…

Paddle OCR V4 测试Demo

效果 项目 VS2022.net4.8OCRV4 代码 using OpenCvSharp; using Sdcb.PaddleInference; using Sdcb.PaddleOCR; using Sdcb.PaddleOCR.Models; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; usin…

[保研/考研机试] KY135 又一版 A+B 浙江大学复试上机题 C++实现

题目链接&#xff1a; KY135 又一版 AB https://www.nowcoder.com/share/jump/437195121691736185698 描述 输入两个不超过整型定义的非负10进制整数A和B(<231-1)&#xff0c;输出AB的m (1 < m <10)进制数。 输入描述&#xff1a; 输入格式&#xff1a;测试输入包…

C语言的简单基础知识

C语言的基础知识包括变量、数据类型、运算符、控制流语句、函数等。下面会对每个部分进行详细解释&#xff0c;并给出相应的案例。 变量和数据类型&#xff1a; 变量&#xff1a;C语言中的变量用于存储数据&#xff0c;并且需要先声明后使用。声明变量时需要指定其数据类型。例…

包管理工具详解npm 、 yarn 、 cnpm 、 npx 、 pnpm(2023)

1、包管理工具npm &#xff08;1&#xff09;包管理工具npm&#xff1a; Node Package Manager&#xff0c;也就是Node包管理器&#xff1b;但是目前已经不仅仅是Node包管理器了&#xff0c;在前端项目中我们也在使用它来管理依赖的包&#xff1b;比如vue、vue-router、vuex、…

怎么用PS的魔术棒抠图?PS魔术棒抠图的操作方法

使用PS的魔术棒抠图教程&#xff1a; 1、首先&#xff0c;在ps界面上方点击“文件”选项&#xff0c;再在其弹出的选项栏中选择“打开”选项。然后&#xff0c;打开你所需要的图片。 2、然后&#xff0c;单击左侧的“魔术棒”工具。 3、然后&#xff0c;用鼠标点击图片的背景&…

根据渲染数据长度动态渲染后缀图标

在动态获取数据时&#xff0c;想要渲染后面的图标是根据数据的长度渲染图标位置&#xff0c;效果如下&#xff1a; 代码如下&#xff1a; <el-row :gutter"60"><el-col :span"24"><el-form-item><el-input v-model.trim"form…

你不能访问此共享文件夹因为你组织的安全策略

我在windows 10中尝试访问没有密码的共享文件只报错如下&#xff1a; 解决办法 运气中执行 gpedit.msc来启动本地组策略编辑器。 这样设置完成后&#xff0c;就可以在运行中输入 \\192.168.199.1\可以访问共享的文件了。 参考 https://zhuanlan.zhihu.com/p/164721714…

从零构建深度学习推理框架-7 计算图的表达式

什么是表达式 表达式就是一个计算过程,类似于如下&#xff1a; output_mid input1 input2 output output_mid * input3用图形来表达就是这样的。 但是在PNNX的表达式&#xff08;Experssion Layer&#xff09;中不是这个样子&#xff0c;而是以一种抽象得方式&#xff0c;…

韩顺平Linux基础篇

一、课程内容 二、Linux应用领域 一、Linux使用在哪些地方 Linux最强应用&#xff1a;服务器 三、Linux概述 三、Linux和Unix的关系 五、VM和Linux的安装 基本说明 学习Linux需要一个环境&#xff0c;我们需要创建一个虚拟机&#xff0c;然后再虚拟机上安装一个Centos系统来学…

【多重信号分类】超分辨率测向方法——依赖于将观测空间分解为噪声子空间和源/信号子空间的方法具有高分辨率(HR)并产生准确的估计(Matlab代码实现)

【多重信号分类】超分辨率测向方法——依赖于将观测空间分解为噪声子空间和源/信号子空间的方法具有高分辨率&#xff08;HR&#xff09;并产生准确的估计&#xff08;Matlab代码实现&#xff09; &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️…

检测文本是否由AI生成,GPT、文心一言等均能被检测

背景 目前很多机构推出了ChatGPT等AI文本检测工具&#xff0c;但是准确率主打一个模棱两可&#xff0c;基本和抛硬币没啥区别。 先说结论&#xff0c;我们对比了常见的几款AI检测工具&#xff0c;copyleaks检测相比较而言最准确。 检测文本 AI文本片段1 来源&#xff1a;G…

【Maven】常用命令、插件管理、私服nexus

【Maven】常用命令、插件管理、私服nexus 常用命令 插件管理 私服nexus Nexus3 配置私服 项目pom中的配置 发布时区分正式版、快照版 常用命令 Maven提供了一系列常用命令&#xff0c;用于构建、测试和管理项目。以下是一些常用的Maven命令示例&#xff1a; mvn clean:…

圆圈中最后剩下的数字——剑指 Offer 62

文章目录 题目描述解法一题目描述 解法一 class Solution

Cobbler自定义yum源

再次了解下Cobbler的目录结构&#xff1a; 在/var/www/cobbler/ks_mirror目录下存放的是所有的镜像。 存放的是仓库镜像&#xff1a; 在/var/lib/cobbler/kickstarts目录下是存放的所有的kickstarts文件。 再有就是/etc/cobbler这个目录&#xff1a; [rootvm1 loaders]# cd /…

ad+硬件每日学习十个知识点(26)23.8.6 (DCDC的降压电路、升压电路、降压-升压电路,同步整流,选型考虑同步、隔离)

文章目录 1.DCDC的降压原理2.DCDC的升压原理3.DCDC的升压和降压原理4.什么是肖特基二极管造成的死区电压&#xff1f;5.MOS管有死区电压么&#xff1f;6.DCDC的同步整流&#xff08;用MOS管取代整流二极管&#xff0c;避免死区电压的影响&#xff09;7.DCDC选型——同步与非同步…

kube-prometheus 使用 blackbox-exporter 进行icmp 监控

安装kube-prometheus 后默认在monitoring namespace中有创建 blackbox-exporter deployment。但默认没有icmp的module配置&#xff0c;无法执行ping探测。因为即使有icmp module&#xff0c;默认配置也是无法执行ping探测的&#xff08;这篇文章要解决的就是这个问题&#xff0…

数据结构-带头双向循环链表的实现

前言 带头双向循环链表是一种重要的数据结构&#xff0c;它的结构是很完美的&#xff0c;它弥补了单链表的许多不足&#xff0c;让我们一起来了解一下它是如何实现的吧&#xff01; 1.节点的结构 它的节点中存储着数据和两个指针&#xff0c;一个指针_prev用来记录前一个节点…