TCP协议与UDP协议

news2024/12/28 15:20:17

1.TCP协议特点

1.1连接的建立与断开

        TCP协议提供的是:面向连接、可靠的、字节流服务。使用TCP协议通信的双发必须先建立连接,然后才能开始数据的读写。双方都必须为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。TCP连接是全双工的,双方的数据可以通过一个连接进行读写。完成数据交换之后,通信双方都必须断开连接以释放系统资源。

       三次握手发生在客服端执行connect()的时候,该方法返回成功,则说明三次握手已经建立。三次握手示例图如下:

四次挥手发生在客户端或服务器端执行close()关闭的时候,示例图如下:

 

SYN标志:请求建立一个连接,我们称携带SYN标志的TCP报文段为同步报文段。

ACK标志:表示确认号是否有效。我们称携带ACK标志的TCP报文段为确认报文段

FIN标志:表示通知对方本端要关闭连接了。我们称携带FIN标志的TCP报文段为结束报文段。

思考题:

1.为什么是三次握手,可不可以是两次为什么?

三次握手的步骤:

第一次握手:客户端向服务器端发送 SYN和序列号(如seq=i)。

第二次握手:服务器端向客户端发送SYN和序列号(seq=j)和ACK确认号(i+1)。

第三次握手:客户端向服务器端发送ACK确认号(j+1)。

之所以是三次握手,是因为只有双方都收到自己的seq被对方确认,才会认为这条连接时可靠的。如果只是两次握手,那么至多只有连接发起方的起始序列号能被确认,另一方的序列号得不到确认。换句说,如果是两次握手建立连接,第二次握手时发送丢包,那么客户端就无法与服务器建立连接。

2.如果监听队列listen(sockfd,5)大小是5,是不是服务器只能连接五个客户端?

不是,虽然listen()监听队列大小是5,表示能存放已完成三次握手连接的长度是5,但是accept()会从监听队列中接收已完成三次握手的连接,所以监听队列大小是5,不代表服务器端只能连接五个客户端。

3.三次握手过程中客户端向服务器端发送的SYN和序列号是不是,调用send()发送过去的?

 不是,客户端代码中connect()开始三次握手,connect()结束三次握手完成,三次握手未完成客户端和服务器端连接还未完成,用户不能发数据,所以SYN和序列号不是用户发送的,是传输层协议发送的。

4.四次挥手可不可以是三次呢?

四次挥手的步骤:

(1).先调用close()的一端向另一端发送FIN和序列号

(2).另一端向先调用close()的一端发送ACK确认号进行确认

(3).另一端调用cloe()向先调用close()的一端发送FIN和序列号

(4).先调用close()的一端向另一端发送ACK确认号进行确认。

四次挥手可以是三次挥手,当先调用close()的一端向另一端发送FIN和序列号时,另一端也刚好close(),此时另一端会把FIN和序列号和确认号ACK一起发送给先调用close()的一端。此时就是三次挥手。

发送缓冲区和接收缓冲区

 5.三次握手时可能出现什么攻击

一、握手阶段消息丢失

二、握手阶段队列已满

1.2TCP状态转移

        TCP 连接的任意一端在任一时刻都处于某种状态,当前状态可以通过 netstat 命令查看,下图是 TCP 连接从建立到关闭整个过程中通信两端状态的变化。其中 CLOSED 是假想的起始点,并不是一个实际的状态。

 上图中TIME_WAIT状态一般是主动关闭的一端才会出现的状态。该状态出现后,会维持一端长为2MSL(Maximum Segment Life)的时间,才会完全关闭。MSL是TCP报文段在网络中的最大生存时间。

TIME_WAIT状态存在的原因有两点:

可靠的终止TCP连接。

保证让迟来的TCP报文有足够的时间被识别并丢弃。

        在Linux系统上,一个TCP端口不能被同时打开多次,(两次及以上)。当一个TCP连接处于TIME_WAIT状态时,我们将无法立即使用该连接占用着的端口来建立一个新的连接。

思考题:

同一个端口可不可以被一个TCP和一个UDP的应用程序同时使用?

可以,因为TCP和UDP是不同的协议。

1.3流式服务特点

        TCP字节流的特点,发送端执行的写操作次数和接收端的读操作次数之间没有任何数量关系,应用程序对数据的发送和接收是没有边界限制的。如下图:

思考问题:

什么是粘包,如何解决?

      tcp协议是面向连接的,客户端和服务器是连接的,所以不同的send()发送的数据在同一个发送缓冲区中,即发送方发送的若干包数据到接收方接收时粘成一包,从接受缓冲区来看后一包的数据紧接着前一包数据的尾。

        如理方法:发送端send()一个一个发送

1.4应答确认与超时重传

        TCP 发送的报文段是交给 IP 层传送的。但 IP 层只能提供尽最大努力的服务,也就是
说, TCP 下面的网络所提供的是不可靠的传输。因此, TCP 必须采用适当的措施才能使两个运输层之间的通信变得可靠。 TCP 的可靠传输是通过使用应答确认和超时重传来完成。
下图是通过 netstat 命令抓包看到的信息:

 下图是无差错时, 数据交互的流程: 发送端发送数据 m1 给接收端,接收端收到数据后
会给发送端一个确认信息,以表明数据已经被成功收到。在发送方未收到确认信息前, M1
应继续被保留,直到确认信息到达才能丢弃

 下图是出现差错时,数据交互的流程:

1.5滑动窗口

         TCP 协议是利用滑动窗口实现流量控制的。一般来说,我们总是希望数据传输得更快一些,不会一次只发一个字节。但是如果发送方把数据发得过快,接受方就可能来不及接收,这就会造成数据的丢失。 所谓流量控制就是让发送方的发送速率不要太快,要让接收方来的及接收。

        在 TCP 的报头中有一个字段叫做接收通告窗口,这个字段由接收端填充,是接收端告
诉发送端自己还有多少缓冲区可以接收数据。于是发送端就可以根据这个接收端的处理能力
来发送数据,而不会导致接收端处理不过来。所以发送端就会有一个发送窗口,这个发送窗
口的大小是由接收端填充的接收通告窗口的大小决定的,并且窗口的位置会随着发送端数剧的发送和接收到接收端对数据的确认而不断的向右滑动,将之称为滑动窗口。
发送方的滑动窗口示意图如下:

 当收到 36 的 ack,并发出 46-51 的字节后,窗口滑动的示意图如下:

1.6拥塞控制

         在计算机网络中的链路容量(即带宽)、交换结点中的缓存和处理机等,都是网络的资
源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性
能就要变坏。这种情况就叫做拥塞。 所谓拥塞控制就是防止过多的数据注入到网络中,这样
可以使网络中的路由器或链路不致过载。拥塞控制是一个全局性的过程,涉及到所有主机,
所有路由器,以及与降低网络传输性能有关的所有因素

几种拥塞控制的方法:
慢开始、拥塞避免、快速重传、快速恢复

慢开始、拥塞避免、快速恢复示意图:

 快速重传示意图:

2.UDP协议的特点

        UDP数据报服务的特点:发送端应用程序每执行一次写操作,UDP模块就将其封装成一个UDP数据报发送。接收端必须及时针对每一个UDP数据报执行读操作,否则就会丢包。并且,如果用户没有指定足够的应用程序缓冲区来读取UDP数据,则UDP数据会被截断。 

 

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

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

相关文章

从C语言到C++(第一章_C++入门_下篇)内联函数+auto关键字(C++11)+范围for +nullptr

目录 1. 内联函数 1.1 内联函数的概念 1.2 内联函数的特性 1.3 宏的优缺点和替代方法 2. auto关键字(C11) 2.1 改版前的auto 2.2 改版后的auto 2.3 auto 的使用场景 2.3.1处理很长的数据类型 2.3.2 auto 与指针结合起来使用: 2.4…

第2章 数据的类型

第2章 数据的类型 文章目录第2章 数据的类型2.2 为什么要进行区分2.3 结构化数据和非结构化数据案例:数据预处理字数/短语数特殊符号文本相对长度文本主题2.4 定量数据和定性数据2.4.1 案例:咖啡店数据2.4.2 案例:世界酒精消费量2.4.3 更深入…

4.18、TCP滑动窗口

4.18、TCP滑动窗口1.滑动窗口的介绍2.滑动窗口通信的例子1.滑动窗口的介绍 滑动窗口(Sliding window)是一种流量控制技术。早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据。由于大家不知道网络拥塞状况,同时发送数…

客户案例 | 迎接智能化浪潮,传统水厂数字化势在必行

关键发现 客户痛点:传统水厂业务离散,无法实现数据实时同步,为收集和分析处理数据并辅助决策带来障碍。需要智能化管理系统帮助水厂提升管理效率,优化管理流程,实现数字化、智能化的目标。 解决方案:天津腾…

你说你还不会Redis?别怕,今天带你搞定它!

Redis 前言 本文章是我学习过程中,不断总结而成,篇幅较长,可以根据选段阅读。 全篇17000字,图片 十三 张,预计用时1小时。 认识Redis 什么是Redis? 要使用一门技术,首先要知道这门技术是什…

pytorch进阶学习(三):在数据集数量不够时如何进行数据增强

对图片数据增强,可以对图片实现: 1. 尺寸放大缩小 2. 旋转(任意角度,如45,90,180,270) 3. 翻转(水平翻转,垂直翻转) 4. 明亮度改变(变…

一零五五、mysql8.0高版本数据导入5.6低版本通解

背景 今日想将本机的mysql(8.0)中的数据库文件导出到远程服务器中的mysql(5.6)中,刚开始用source 一直报一大串ERROR,由于数据量比较大,那就直接用图形化工具导吧,连接上远程数据库&…

【常见CSS扫盲之渐变效果】好看的24种CSS渐变效果汇总(附源码)

【写在前面】web开发过程中,页面背景色想要一个渐变的效果很多时候网上一找全是官网那种很丑的色系,尤其是一些按钮和一些大背景色时候,不能搞得很yellow,今天我就做个工具人给大家罗列一些我在工作过程中总结的一些好看的渐变效果…

51单片机(8051系列)外部时钟

OUT(输出引脚),IN(输入引脚)的区别 OUT(输出引脚) 输入引脚连接输入设备IN(输入引脚) 输出引脚连接输出设备外部时钟和内部时钟的区别 1、XTAL1和XTAL2引脚 内部时钟方式:必须在XTAL1和XTAL2引脚两端跨…

观早报 | 特斯拉储能超级工厂落沪;“华尔街之狼”募资550亿

今日要闻:京东拟今年发布千亿级产业大模型;特斯拉储能超级工厂落沪;“华尔街之狼”募资550亿;英特尔落户海南三亚;日本人要搞二次元老婆版 ChatGPT京东拟今年发布千亿级产业大模型 据《科创板日报》消息,京…

机器学习——L1范数充当正则项,让模型获得稀疏解,解决过拟合问题

问:使用L2范数正则项比L1范数正则项得到的是更为稀疏的解。 答:错误,L1范数正则项得到的是更稀疏的解。因为在L1正则项中,惩罚项是每个参数绝对值之和;而在L2正则项中,惩罚项是每个参数平方的和。L1正则项…

数字孪生智慧应急怎么实现?

根据国家对智慧应急建设的指示精神以及城市发展的迫切需求,智慧应急体系的建设应当从“大应急、大安全”的业务关切出发,聚焦“智慧应急”需求,融合对安全推进城市韧性建设的思考,将人工智能、物联网、大数据等高科技手段与应急救…

深度学习----DenseNet

1. 结构图 Input Shape : (3, 7, 7) — Output Shape : (2, 3, 3) — K : (3, 3) — P : (1, 1) — S : (2, 2) — D : (2, 2) — G : 1 The parts of this post will be divided according to the following arguments. These arguments can be found in the Pytorch documen…

STM32CubeMx+HAL库实现USB CDC+MSC复合设备

之前的文章中介绍过STM32的USB应用,包括虚拟串口(CDC)和大容量存储设备(MSC)。今天来介绍USB实现CDC和MSC复合设备的方法。 硬件:STM32F407VET6 软件:STM32CubeMx v6.5F4库v1.27.1 编译环境&a…

行内元素之间出现空白间隙及解决办法

这里的行内元素包括 display 为 inline 和 inline-block 的元素。 基本布局 <div class"container"><span class"item">1</span><span class"item">2</span><span class"item">3</span> …

15. unity官网资源商店的免费资源引入自己项目中

1. 说明 在unity开发中可以在官网引入一些免费的资源&#xff0c;免得自己找不到合适的素材 第一步&#xff1a; 首先进入Unity资源商店官网&#xff0c;https://assetstore.unity.com/&#xff0c;计入并登录自己的unity账号&#xff0c;如果没账号&#xff0c;可以注册一个…

什么是堆叠面积图?如何解读?

简介 在之前的文章中提到过&#xff0c;面积图&#xff08;Area Chart&#xff09;是在折线图的基础上&#xff0c;对折线以下区域进行颜色填充&#xff0c;主要是用于在连续间隔或时间跨度上展示数值。而今天我们要说的是堆叠面积图&#xff08;Stacked Area Chart&#xff0…

一切都是命中注定的!

“光锥之内就是命运”&#xff0c;这是刘慈欣的《三体黑暗森林》里一句话&#xff0c;如果我们看到一件事情正在发生&#xff0c;那么它早在过去无论是几秒前还是几千年前&#xff0c;就已经发生了&#xff0c;我们无法改变这个命运。 孔明叹曰&#xff1a;“谋事在人&#xf…

( “树” 之 DFS) 671. 二叉树中第二小的节点 ——【Leetcode每日一题】

671. 二叉树中第二小的节点 给定一个非空特殊的二叉树&#xff0c;每个节点都是正数&#xff0c;并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话&#xff0c;那么该节点的值等于两个子节点中较小的一个。 更正式地说&#xff0c;即 root.val min(roo…

VSCODE 配置MARKDOWN

参考博客 VSCode如何将Markdown转为PDF 一篇博客让你学会在vscode上编写markdown 1&#xff1a;VSCODE 上配置插件 Markdown All in OneMakrdown Preview EnhancedPaste ImageMarkdown Pdf 2&#xff1a;插件详解 1&#xff1a;Makrdown Preview Enhanced 用来进行MARK…