Linux TCP和UDP协议

news2025/3/2 4:10:50

目录

  • TCP协议
    • TCP协议的面向连接
      • 1.三次握手
      • 2.四次挥手
    • TCP协议的可靠性
      • 1.TCP状态转移——TIME_WAIT 状态
        • TIME_WAIT 状态存在的意义:
          • (1)可靠的终止TCP连接。
          • (2)让迟来的TCP报文有足够的时间被识别并被丢弃。
      • 2.应答确认、超时重传
      • 3.去重
      • 4.乱序重排
      • 5.滑动窗口
    • TCP协议的流式服务,粘包
      • 1.粘包的产生
      • 2.粘包的影响
      • 3.解决粘包的方法
  • UDP协议
    • UDP协议数据报服务特点

TCP协议

TCP协议:面向连接 可靠的 流式服务

TCP协议的面向连接

使用TCP协议通信的双方必须先建立连接,具体是通过TCP的报文进行三次握手建立连接,然后才能开始数据的读写。双方都必须为该连接分配必要的内核资源,从而来管理连接的状态和连接上数据的传输。TCP连接是全双工的,双方的数据可以通过一个连接进行读写。完成数据交换之后,通信双方都必须断开连接以释放系统资源,具体是通过四次挥手来断开连接。

1.三次握手

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

在这里插入图片描述

2.四次挥手

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

在这里插入图片描述

TCP协议的可靠性

1.TCP状态转移——TIME_WAIT 状态

建立连接(三次握手)和断开连接(四次挥手)时会引起TCP状态发生变化。

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

在这里插入图片描述

TIME_WAIT状态一般情况下是主动关闭的一端才会出现的状态。。该状态出现
后,会维持2分钟的时间,才能完全关闭。

TIME_WAIT 状态存在的意义:

(1)可靠的终止TCP连接。

挥手一共是4次,如果最后一次挥手发送的ACK确认消息丢了,这时对方没有收到确认ACK确认消息,就会重发FIN,然后收到FIN之后再给对方回复ACK。如果服务器端先关闭,服务器端如果没有TIME_WAIT 状态,第三次挥手客户端发送给服务器端的FIN会让服务器端觉得莫名其妙,因为此时服务器端已经关闭了,就无法正常完成四次挥手了。TIME_WAIT 状态就会让先关闭的一端(假设是服务器端)等待2分钟,如果这两分钟内对方不再重发FIN,说明对方已经收到ACK确认消息,这时服务器端才可以关闭。

(2)让迟来的TCP报文有足够的时间被识别并被丢弃。

假设服务器是主动关闭的一端,当服务器端处于TIME_WAIT 状态时,端口号还没有被释放出来,此时的服务器端不可以马上重新启动,在Linux 系统上,一个TCP端口不能被同时打开多次(两次及以上)。当一个TCP连接处于TIME_WAIT状态时,我们将无法立即使用该连接占用着的端口来建立一个新连接,只能等2分钟后将端口释放之后才可以重新启动服务器端,这是为了让迟来的TCP报文有足够的时间被识别并被丢弃,也就是说当某一个数据包还在路上的时候服务器端和客户端的连接断开了,然后重新启动了一个服务器端,此时这个重新启动的服务器端就会收到发给上一个服务器的数据包,这样会造成困惑,我们并不希望这样的现象出现,所以需要等待2分钟,让新服务器在这两分钟内启动不了,让网络中延迟的那个数据包先到达,发现此时端口无法收数据,然后把这个数据包丢弃,这样两分钟以后重新启动的服务器端就不会收到发给上一个服务器端的数据。

2.应答确认、超时重传

TCP协议在传输层,当把数据交到网络层之后,网络层通过IP协议进行信息的传送,无论在传输层用的是TCP协议还是UDP协议,把消息交给网络层之后都是通过IP协议进行传输的,IP是无状态无连接的,尽最大可能去提供传输,如果所传输的信息丢了,那也没办法,也就是说无论是TCP还是UDP在网络层达成IP分组之后都有可能会丢掉信息。对于UDP来说丢了就丢了,而对于TCP来说,如果信息丢了,等一段时间没有等到确认的消息,这时就需要重发这个信息,所以TCP协议的开销要比UDP大,所以TCP的可靠性是以牺牲一定的开销为代价的。TCP协议具有应答确认、超时重传的机制。

3.去重

也不用担心发过去的确认信息丢了之后对方会多收一次相同的报文,因为TCP协议具有去重的功能。

4.乱序重排

当发送的数据中途到达的次序和发送的顺序不一样也没关系,因为TCP协议具有乱序重排的功能。

5.滑动窗口

TCP还有一个功能就是滑动窗口,来进行流量控制,窗口越大单位时间内允许发送的数据就越多,窗口越小,单位时间内允许发送的数据就越少,不会让发送数据的速度太快也不会太慢。

TCP协议的流式服务,粘包

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

1.粘包的产生

在这里插入图片描述

send发送的次数和recv接收的次数不一定就是一样的,如上图,三次send的数据有可能一次recv就收到了。由于多次连续send发送数据被对方一次收到就会产生粘包

2.粘包的影响

粘包在不同情况下的影响不同,比如是下载文件,则没有影响,发送的多个文件可以一次性收完,但是一些交互情况是有影响的,比如客户端发送一个长方体的长、宽、高,服务器端接收这个长方体的长、宽、高之后再给客户端发送这个长方体的体积,客户端发送长方体的长、宽、高分别是20、10、2,服务器端在接收的时候由于粘包,就会一次性接收20、10、2为20102误以为20102是长方体的长,会一直等待接收长方体的宽和高,客户端也会一直等待接收服务器给它发送长方体的体积,发生了阻塞,这时粘包就产生了不好的影响。

3.解决粘包的方法

(1)让某一个端在接收数据时可以区分出数据是几个不同的报文,可以将数据用中括号“[]”括起来,这样在接收数据的时候,可以自行判断所接收的数据。

(2)可以在报文前面设计一个大小,就是用来说明一个报文到底有多大,这样的话在recv的时候接收的时候就会告诉后面有几个字节,就把那些字节全部都接收完就可以了,接收完之后,后面开始的就是一个新的报文。

(3)不要连续send,而是send发送一个数据之后就recv接收这个数据。

UDP协议

UDP协议:无连接 不可靠 数据报

UDP协议数据报服务特点

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

在这里插入图片描述

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

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

相关文章

linux 堆探索

堆的虚拟地址是连续的,是brk来分配,brk是一个指针指向堆顶的指针,并且是可以复用的,但是只有在堆顶空闲128k时,才收缩,也就是说,为了减少page_fault,可重用,开销小的特点…

消息队列--入门篇

消息队列–入门篇 目录 消息队列--入门篇如何学习一门新技术?消息队列的组件大体介绍一下producerproducer groupnameSrvbrokerbroker clusterconsumer和consumer groupTopicTag 总结 如何学习一门新技术? 学习任何知识需要有一个整体的认识&#xff0c…

【数据分享】2006-2021年我国省份级别的园林绿化相关指标(多项指标)

《中国城市建设统计年鉴》中细致地统计了我国城市市政公用设施建设与发展情况,在之前的文章中,我们分享过基于2006-2021年《中国城市建设统计年鉴》整理的2006—2021年我国省份级别的市政设施水平相关指标、2006-2021年我国省份级别的各类建设用地面积数…

【Linux】进程概念I --操作系统概念与冯诺依曼体系结构

Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法…感兴趣就关注我吧!你定不会失望。 本篇导航 1. 冯诺依曼体系结构为什么这样设计? 2. 操作系统概念为什么我们需要操作系统呢?操作系统怎么进行管理? 计算机是由两部分组…

使用Xshell远程访问工具连接到Linux

首先需要查看Linux地址,在Linux主界面中右键选择“Open in Terminal” 输入“ifconfig”指令查看IP地址 打开Xshell,输入相关信息,建立连接 点击连接,按照提示输入用户名 root和你自己安装centos7时设置的密码,用…

css实现圆角三角形,圆角三角形的实现

今天给大家带来一个如何实现圆角三角形的方案,这个方案虽然可以实现,但是也是借助拼凑等方式来实现的,假如想一个div来实现圆角三角形,还是比较困难的。之前文章讲了如何实现对话框,里面介绍了三角形的实现方式。今天讲…

使用navicat for mongodb连接mongodb

使用navicat for mongodb连接mongodb 安装navicat for mongodb连接mongodb 安装navicat for mongodb 上文mongodb7.0安装全过程详解我们说过,在安装的时候并没有勾选install mongodb compass 我们使用navicat去进行可视化的数据库管理 navicat for mongodb下载地址…

秒杀“超卖”问题

概述:限时秒杀活动在我们的日常生活中有很多,尤其在“双11”,“618”这类购物节活动中用户的并发数更是海量剧增,那么系统为了防止“超卖”秒杀商品,怎么做才能不影响性能的同时防止超卖。 为了解决“超卖”问题有两种…

mysql或ps提示 vcruntime140_1.dll丢失如何修复,5种方法办法你搞定

今天我在运行一款新安装的软件时,突然遇到了一个让我十分困扰的问题——系统提示vcruntime140_1.dll文件丢失。这个问题导致我无法正常使用这个软件,我也不知道怎么回事,所以我在网上找了一天终于让我找到解决这个问题的方法了,今…

绩效只是绩效

绩效只是绩效 一、背景二、绩效和管理三、绩效和薪资四、QA环节五、总结与反思 一、背景 目前大部分主体的绩效考核方向不明确,有的只是为了考核而考核,那么绩效是什么? 打A(超出预期)和打D(低于预期&…

阿里云ESC服务器CPU一直处于100%该如何排查?

阿里云ESC服务器CPU一直处于100%该如何排查? 问题背景 使用 docker 容器化部署整个项目,然后服务器的CPU一直处于100%,此时就出现了问题:此时如果重新开启一个窗口去连接,或者访问宝塔面板、Navicat连接MySQL就连接不…

使用redis+lua通过原子减解决超卖问题【示例】

文章目录 前言一、准备工作二、不使用Lua三、使用Lua 前言 超卖,即在并发的情况下,所售商品数量大于商品的库存数量。在并发量大的情况下,用户请求同时到达,对数据库进行操作,在没有采取相应的处理的情况时从而导致出…

第八章 Linux实际操作——定时任务调度

第八章 Linux实际操作——定时任务调度 8.1 crond任务调度8.1.1 概述8.1.2 基本语法8.1.3 常用选项8.1.4 快速入门8.1.5 应用实例8.1.6 crond相关指令 8.2 at定时任务8.2.1基本介绍8.2.2 at命令格式8.2.3 at命令选项8.2.4 at时间定义8.2.5 应用实例 8.1 crond任务调度 crontab…

Vulnhub系列靶机---HarryPotter-Nagini-哈利波特系列靶机-2

文章目录 信息收集主机发现端口扫描gobuster目录扫描dirsearch扫描joomscan扫描实现http3访问 漏洞利用Gopherus工具GetShell提权firefox_decrypt工具 总结 靶机文档:HarryPotter: Nagini 下载地址:Download (Mirror) 信息收集 主机发现 端口扫描 访问8…

生成克隆钓鱼网站与对win7进行后渗透操作

目录 目录 前言 系列文章列表 思维导图 1,实验涉及复现环境 2,CS的介绍 2.1,CS的简介 2.2,CS的主要功能 3,CS的安装 3.1,将cobalt_strike_4.5文件夹放到kali中 3.1,放入过程中的注意事项 3.2,如图所示 4,配置工具 4.1,进入c…

Kafka3.0.0版本——消费者(Sticky分区分配策略以及再平衡)

目录 一、Sticky分区分配策略原理二、Sticky分区分配策略 示例需求三、Sticky分区分配策略代码案例3.1、创建带有7个分区的sevenTopic主题3.2、创建三个消费者 组成 消费者组3.3、创建生产者3.4、测试3.5、Sticky分区分配策略代码案例说明 四、Sticky分区分配再平衡案例4.1、停…

机器人抓取检测技术的研究现状

1.分析法 图 1 为分析法在进行抓取检测时所采用的 一般策略[3] [3]Sahbani A, El-Khoury S, Bidaud P. An overview of 3D object grasp synthesis algorithms[J]. Robotics and Autonomous Systems, 2012, 60(3): 326-336. 首先,基于环境限制和机械手与物体模 型进行抓取检…

算法宝典——Java版本(持续更新)

目录 一、链表的算法题(目前9道) 1. 移除链表元素(思路:前后指针) 2. 反转一个单链表 (思路:头插法) 3. 链表的中间结点(思路:快慢指针) 4. 链…

衷心祝福“好教师”节日快乐

在2023年教师节的今天,本“人民体验官”推广人民日报官方微博文化产品《张桂梅说教师这个职业有苦有幸福》。 图:来源“人民体验官”推广平台 人民微博简述道:“今天,张桂梅祝全国老师们节日快乐。” 张桂梅说:“教师…

图像的几何变换(缩放、平移、旋转)

图像的几何变换 学习目标 掌握图像的缩放、平移、旋转等了解数字图像的仿射变换和透射变换 1 图像的缩放 缩放是对图像的大小进行调整,即 使图像放大或缩小 cv2.resize(src,dsize,fx0,fy0,interpolationcv2.INTER_LINEAR) 参数: src :输入图像dsize…