HCIA---TCP/UDP协议

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

文章目录

  • 目录

    文章目录

    一.UDP协议简介

    UDP协议的特点:

       二.TCP协议简介

        TCP协议特点

    三.TCP和UDP的区别

     四.TCP/IP结构详解

    五.TCP运输连接的阶段

     ​编辑

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

    TCP三次握手总结: 

    TCP四次挥手:

    思维导图


一.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 一般都会分开发送,从而比三次握手导致多了一次。

 

 

 

思维导图

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

删除这4个文件夹,流畅使用手机无忧

在现代社会中,手机已经成为我们生活中不可或缺的一部分。然而,随着使用时间的增长,我们可能会遇到手机卡顿和内存不足的问题,让我们感到十分困扰。手机卡顿不仅影响使用体验,还可能导致应用程序运行缓慢,甚…

ChatGPT已闯入学术界,Elsevier推出AI工具

2022年11月,OpenAI公司发布了ChatGPT,这是迄今为止人工智能在现实世界中最重要的应用之一。 当前,互联网搜索引擎中出现了越来越多的人工智能(AI)聊天机器人,例如谷歌的Bard和微软的Bing,看起来…

war和war exploded

war和war exploded的区别 war模式&#xff1a;将WEB工程以包的形式上传到服务器 &#xff1b; war exploded模式&#xff1a;将WEB工程以当前文件夹的位置关系上传到服务器&#xff1b;>> war包是自己打包生成的&#xff0c;如pom文件中<packaging>war</packag…

南卡签约游泳冠军傅园慧,创造防水运动耳机的新天花板!

近日&#xff0c;国内骨传导运动耳机龙头品牌NANK南卡&#xff0c;正式官宣知名游泳冠军傅园慧出任品牌形象大使。在此之外&#xff0c;南卡品牌方还特邀了同样作为游泳冠军的孙杨&#xff0c;以及知名演员张新成、流行歌手段奥娟等多位明星来体验旗下的运动耳机&#xff0c;皆…

【从零学习python 】04. Python编程基础:变量、数据类型与标识符

文章目录 变量以及数据类型一、变量的定义二、变量的类型三、查看数据类型 标识符和关键字标识符命名规则命名规范 关键字进阶案例 变量以及数据类型 一、变量的定义 对于重复使用&#xff0c;并且经常需要修改的数据&#xff0c;可以定义为变量&#xff0c;来提高编程效率。…

中间件插件机制

一、插件 在mybatis一类中间件在处理的时候&#xff0c;提供了插件机制&#xff0c;类似于aop机制&#xff0c;可以在方法前、方法后进行拦截并且修改入参获得改变其方法的行为。那么调用的的方法应该也需要使用动态代理活动被插件进行aop的对象。

django处理分页

当数据库量比较大的时候一定要分页查询的 在django中操作数据库进行分页 queryset models.PrettyNum.objects.all() #查询所有 queryset models.PrettyNum.objects.all()[0:10] #查询出1-10列 queryset models.PrettyNum.objects.filter(mobile__contains136)[0:10] …

sentinel简单使用

核心demo&#xff1a; 1 引入依赖: <dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-core</artifactId><version>1.8.0</version> </dependency>2 核心代码&#xff1a; 3 限流保护代码&#xff1a;…

Delphi Professional Crack,IDE插件开发和扩展IDE

Delphi Professional Crack,IDE插件开发和扩展IDE 构建具有强大视觉设计功能的单源多平台本机应用程序。 Delphi帮助您使用Object Pascal为Windows、Mac、Mobile、IoT和Linux构建和更新数据丰富、超连接、可视化的应用程序。Delphi Professional适合个人开发人员和小型团队构建…

uniapp scroll-view 隐藏滚动条

/*清除滚动条 - 适配安卓*/::-webkit-scrollbar {width: 0;height: 0;color: transparent;}/*清除滚动条 - 适配IOS*/::-webkit-scrollbar {display: none;}

uni——tab切换

案例展示 案例代码 <view class"tablist"><block v-for"(item,index) in tabList" :key"index"><view class"tabItem" :class"current item.id?active:" click"changeTab(item)">{{item.nam…

小白到运维工程师自学之路 第六十七集(Harbor企业镜像仓库部署)

一、概述 Harbor 是 VMware 公司开源的企业级 Docker Registry 项目&#xff0c;其目标是帮助用户迅速搭建一个企业级的 Docker Registry 仓库服务。它以Docker公司开源的Registry为基础&#xff0c;提供了管理 UI。基于角色的访问控制(Role Based AccessControl)、AD/LDAP集成…

基于Java的新闻全文搜索引擎的设计与实现

中文摘要 本文以学术研究为目的&#xff0c;针对新闻行业迫切需求和全文搜索引擎技术的优越性&#xff0c;设计并实现了一个针对新闻领域的全文搜索引擎。该搜索引擎通过Scrapy网络爬虫工具获取新闻页面&#xff0c;将新闻内容存储在分布式存储系统HBase中&#xff0c;并利用倒…

RabbitMQ - 简单案例

目录 0.引用 1.Hello world 2.轮训分发消息 2.1 抽取工具类 2.2 启动两个工作线程接受消息 2.4 结果展示 3.消息应答 3.1 自动应答 3.2 手动消息应答的方法 3.3 消息自动重新入队 3.4 消息手动应答代码 4.RabbitMQ 持久化 4.1 队列如何实现持久化 4.2 消息实现持久化 5.不…

面试热题(LRU缓存)

请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关键字的值&#xff0c;否则返回 -1 …

OB数据库基础知识(学习记录)

目录 OB业务场景 公司使用理由&#xff1a; 常见 bootstrap 失败原因 常见OBD 部署 失败原因 Grafana 查看集群资源由各个节点的聚合情况 OB创建租户 表分组的场景 mysqldump到处数据库schema&#xff0c;数据库数据&#xff0c;表数据 数据同步框架 DATAX obdumper…

MongoDB文档-进阶使用-MongoDB索引-createindex()与dropindex()-在MongoDB中使用正则表达式来查找

阿丹&#xff1a; 之前研究了MongoDB的基础增删改查。在学会基础的数据库增删改查肯定是不够的。这个时候就涉及到了数据库搜索的时候的效率。需要提高数据的搜索效率。 MongoDB索引 在所以数据库中如果没有数据索引的时候。如果需要查找到一些数据。都会去主动扫描所有可能存…

开源代码分享(12)—考虑负荷曲线的配电网扩展规划(附matlab代码)

1.背景介绍 电力系统&#xff08;SEP&#xff09;不断扩展&#xff0c;以满足电力消费者的需求。在这个背景下&#xff0c;配电系统扩展规划&#xff08;PESD&#xff09;确定了配电网络扩展的指导方针。除了SEP的扩展之外&#xff0c;现代化和新技术的出现&#xff0c;例如分布…

Babylon.js开发工具链大全

本文介绍Babylon 团队&#xff08;JS 和原生&#xff09;和社区共同创建的所有出色工具的摘要&#xff0c;以帮助开发人员和设计人员创建出色的 3D 体验。 推荐&#xff1a;用 NSDT设计器 快速搭建可编程3D场景。 1、Sandbox 第一个工具Sandbox可能是最简单的&#xff0c;它实…

接口测试—知识速查(Postman)

文章目录 接口测试1. 概念2. 原理3. 测试流程4. HTTP协议4.1 URL的介绍4.2 HTTP请求4.2.1 请求行4.2.2 请求头4.2.3 请求体4.2.4 完整的HTTP请求示例 4.3 HTTP响应4.3.1 状态行4.3.2 响应头4.3.3 响应体4.3.4 完整的HTTP请求示例 5. RESTful接口规范6. 测试用例的设计思路6.1 单…