tcp与udp

2023-10-27

tcp

服务端回复完SYN+ACK之后,就建立连接

1.为什么是三次,而不是两次?服务端回复完SYN+ACK之后,就建立连接

这是为了防止因为已失效的请求报文,突然又传到服务器引起错误

意思就是:假设采用两次握手建立连接,客户端向服务端发送了一个SYN包来请求建立连接,因为某些未知原因,并没有到达服务器,在中间的某个网络节点产生了滞留,为了建立连接客户端会重发SYN包,这次的数据包正常发送,服务端恢复SYN+ACK之后建立起了连接,但是第一包数据阻塞了网络节点。突然恢复,第一包SYN又发送到服务端,这是服务端会认为是客户端又发起了一个新的连接,从而在两次握手之后进入等待数据状态。服务端认为是两个连接 而客户端认为是一个连接,造成的状态不一致。(其实二次握手就可以建立链接,三次握手是为了防止丢包的链接被服务端等待(syn~ask~ask)
四次挥手是因为服务端有未发送完的数据。所以需要服务端连续发两次。同时客户端最后的等待也是为了确保服务端收到ASK请求fin~ask~fin~ask
如果过了等待时间则认为服务端已经关闭(没有关闭的话会有ASK))

如果是三次握手的情况下,服务端收不到最后的ACK包,自然不会认为连接建立成功,所以三次握手,本质上就是为了解决网络信道不可靠问题。为了能在不可靠的信道上建立起可靠的连接。

经过三次握手之后,客户端都进入数据传输状态,

2.为什么是四次挥手

处于连接状态的客户端和服务端都可以发起关闭连接请求,此时需要四次挥手来进行连接关闭

假设客户端主动发起连接关闭请求,它需要向服务端发起一个FIN包,表示要关闭连接,自己进入终止等待1状态,这是第一次挥手,服务端收到FIN包,发送一个ACK包,表示自己进入了关闭等待状态,客户端进入终止等待2 状态,这是第二次挥手,服务端此时还可以发送未发送的数据,而客户端还可以接受数据,待服务端发送完数据之后,发送一包FIN包,进入最后确认状态,这是第三次挥手,客户端收到之后恢复AKC包,进入超时等待状态,进入超时等待后关闭连接,而服务端收到ACK包后,立即关闭连接,这是第四次挥手。

为什么客户端需要等待超时时间?
为了保证对方已收到ACK包,因为假设客户端发送完最后一包ACK包后就释了连接,一旦ACK包在网络中丢失,服务端将一直停留在最后确认状态,
如果在客户端发送最后一包ACK后,如果等待一段时间后,这时服务端因为没有收到ACK包会重发FIN包,客户端会响应这个FIN包,重发ACK包并刷新超时时间
这个机制跟三次握手一样,也是为了保证在不可靠的网络链路中,进行可靠的连接断开确认,

udp协议

udp协议是基于非连接的,发送数据就是把简单地数据包封装以下,然后从网卡发出去就可以了,数据包之间并没有状态上的联系

性能损耗少,资源占用也远小于tcp

但是在网络传输过程中产生的丢包,udp协议并不能保证,所以udp稳定性弱

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

tcp与udp 的相关文章

  • memcached 使用 Django 监听 UDP

    Question 我无法获得memcached正在听UDP 上班 get set delete 与姜戈 我只让 memcached 监听UDP 11211 正如我在上一个问题 https stackoverflow com question
  • 如何设置Winsock UDP套接字?

    我想创建一个仅向客户端发送数据的 Winsock UDP 套接字 我希望内核为我选择一个可用的端口 另一方面 我想指出要使用哪个本地 IP 因为我正在运行一些网卡 我尝试过梳理迷宫般的套接字选项 以及将套接字地址中的端口绑定设置为 0 但均
  • UDP 服务器套接字缓冲区溢出

    我正在 Linux 上编写 C 应用程序 我的应用程序有一个 UDP 服务器 它在某些事件上向客户端发送数据 UDP 服务器还接收来自客户端的一些反馈 确认 为了实现这个应用程序 我使用了一个 UDP 套接字 例如int fdSocket
  • 数据报总是被完整接收吗?

    大多数数据报接收函数 例如c的recv或read java的DatagramPacket类或python的SocketServer 都包含找出接收数据量的可能性 c int amount recv sock buf n MSG WAITAL
  • 为什么我的 UDP 广播失败?

    我正在尝试发送 UDP 广播 但wireshark 没有报告任何流量 这是执行发送的代码片段 void SendBroadcast String ip 255 255 255 255 int port 30718 String messag
  • Java:使用多个 DatagramSocket 接收 UDP 数据报包

    我正在尝试实现一种将 UDP 数据包发送到多个接收者的方法 我认为这应该是可行的设置setReuseAddress true 在接收 DatagramSocket 实例上 我的问题是 在某些情况下 我需要限制与本地计算机的通信 因此限制本地
  • 具有多个接口的 Python UDP 套接字

    我正在 Windows XP 机器上用 python2 7 编写脚本 本机使用不同的网卡连接到多个网络 我遇到了一个问题 我已将 UDP 套接字绑定到特定接口 我知道您可以通过仅提供网卡现有的 IP 地址来在 Windows 中完成此操作
  • udp数据包被tcpdump捕获,但没有被套接字接收[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我编写了一个 rawudp 程序 通过原始套接字发送 udp 数据包 按照网页http www tenouk com Module43a html h
  • 移动提供商无法进行 UDP 打洞

    实际上 我正在编写一个 Android 应用程序 该应用程序接收连接到 PC 的网络摄像头的图片 为了获得更多的 fps 我使用 udp 协议而不是 tcp 这个想法是 电脑将图片发送到手机的 IP 和端口 但电话提供商有不同的公共端口 所
  • HTTP 是否使用 UDP?

    这可能是一个愚蠢的问题 HTTP 是否使用过用户数据报协议 例如 如果使用 HTTP 传输 MP3 或视频 它内部是否使用 UDP 进行传输 From RFC 2616 http www ietf org rfc rfc2616 txt 通
  • UDP sendto 上的 ECONNREFUSED 错误

    我在使用正在写入的应用程序时遇到一些无法解释的行为 使用 sendto 向多个端口发送 UDP 数据 所有端口均使用套接字 PF INET SOCK DGRAM 0 为了一组客户端读取进程的利益 这些 sendto 偶尔会不可预测地触发经济
  • 如何监听任意端口的广播包?

    使用 NET 如何在任何端口上侦听发送到 255的udp广播数据包 而不需要绑定到特定端口 我自己找到了办法 它是这样工作的 mainSocket new Socket AddressFamily InterNetwork SocketTy
  • iOS 14 在进行本地网络广播时给出“操作系统错误:错误的文件描述符,errno = 9”

    做一点Jeopardy 风格问答 https stackoverflow blog 2011 07 01 its ok to ask and answer your own questions here 我正在 Flutter 中开发一个应
  • 在 macOS 10.12 上绑定到套接字时出现 NSPOSIXErrorDomain

    我正在玩CocoaAsyncSocket https github com robbiehanson CocoaAsyncSocket在 Swift 中绑定到 UDP 套接字并通过本地网络接收消息 我正在初始化一个套接字 并尝试绑定到一个端
  • F1 2019 UDP解码

    我目前正在为 F1 方向盘开发自己的显示器 F1 2019 由codemasters提供 通过UDP发送数据 该数据存储在字节数组中 我在解码返回的数组时遇到一些问题 问题是我得到了很多信息 但我不知道如何处理它们 我将向您介绍我所尝试过的
  • 在 PowerShell 中通过 UDP 发送和接收数据

    我正在尝试编写一个脚本来使用 PowerShell 进行测试和应用 测试应包括通过 UDP 向远程服务器发送字符串 然后读取该服务器的响应并对结果执行某些操作 我需要的唯一帮助是脚本的中间两个步骤 发送字符串 然后 接收响应 在端口 UDP
  • 如何将udp发送到udp node.js服务器?

    我对此很陌生 所以我真的不知道我在做什么 但我已经设置了一个 node js udp 服务器 我想从客户端 来自网站 向它发送一个数据包 但我不知道如何在 javascript 中做到这一点 或者是否可能 我不是在研究如何从 Node js
  • 错误号:11,资源暂时不可用

    我正在使用 c 套接字来实现可靠的 UDP 协议 我正在使用以下代码在等待确认的套接字上设置超时 我不确定为什么会收到 errno 11 资源暂时不可用 set timer for recv socket struct timeval tv
  • 从不同进程通过套接字 (UDP) 回复客户端

    我有一个服务器而不是 命令处理程序 进程 它通过 UDP 接收消息 并通过其发布的 API 无论该进程采用何种 IPC 机制 与该进程进行通信 从而将要做的工作委托给不同的进程 我们的系统有多个协作进程 然后 该 API 调用的结果会从命令
  • boost 是否有可移植的方式来使用 ntohl/htonl/ntohs/htons 类型函数?

    我正在使用 UDP 特别是 boost asio ip udp socket 套接字 如果有帮助的话 头文件是什么 我需要哪些标头 类来处理 UDP 提升下的网络字节排序 刚刚发现就足够了 include

随机推荐

  • js中的定时器、延时器

    一 定时器 创建定时器 window setInterval 方法名 间隔时间 1000 1秒 var timer window setInterval func1 2000 var i 0 function func1 console l
  • C++函数对象

    目录 函数符概念 函数对象 函数对象 函数指针调用演示 匿名函数Lambda 函数包装器 函数符概念 两大类 函数对象 函数指针 四种形式 函数对象 成员函数指针 全局函数指针 Lambda表达式 函数对象 函数对象概念 1 函数对象是一个
  • 中国电子学会2022年09月份青少年软件编程Python等级考试试卷二级真题(含答案)

    2022 09 Python二级真题 分数 100 题数 37 测试时长 60min 一 单选题 共25题 共50分 1 运行以下代码 结果输出的是 C 2分 means Thank You print len means A 8 B 6
  • 最粗暴的方法实现一个栈

    对于栈和队列是一个很简单的知识 用的感觉也不是很多 但是 我们仍然的学习 加油 在实现最简单的栈之前 我们需要简单了解一下栈是什么 栈 stack 又名堆栈 它是一种运算受限的线性表 限定仅在表尾进行插入和删除操作的线性表 这一端被称为栈顶
  • 数据结构图的操作邻接表创建,深度、广度遍历,Dijkstra最短路径算法

    邻接表 深度优先 广度优先搜索方式遍历图 include
  • 数值计算之 插值法(1)多项式插值——拉格朗日插值法

    数值计算之 插值法 1 多项式插值 拉格朗日插值法 前言 什么是插值 多项式插值法 拉格朗日插值法 总结 前言 移动机器人有一个非常重要的任务 轨迹规划 轨迹规划需要满足运动学原理 即在路径规划给出路点后 必须把路点平滑成光滑的轨迹 才能让
  • 对输入图像按比例压缩、居中填充

    摘要 图像在输入神经网络之前 通常需要进行尺寸压缩 如yolov5的输入为640x640 分类网络Resnet 50的输入为224x224 通常地 分类网络直接将输入进行resize处理 而对于目标检测网络 为了防止目标变形 通常采用pad
  • gitlab在merge request 中可能遇到的问题

    1 merge request 中代码冲突 merge的时候 可能存在代码冲突 这时 开发者可从远程仓库master分支重新拉取最新代码进行本地merge 解决冲突后重新提交代码进行review git pull upstream mast
  • sonar 规则总结

    bug类型 1 equals should not be used to test the values of Atomic classes bug 主要 不要使用equals方法对AtomicXXX进行是否相等的判断 Atomic变量永远
  • echarts 省市区联动地图

    地图效果 省地图
  • Java导出Excel 复杂表头

    文章标题 导出表格 依赖 导出表格 导出表格的方式在我的理解有两种 一种是直接用代码控制表头 简单的表头 一种是直接使用模板直接添加数据就可以 复杂的表头 依赖
  • Centos SSh端口号的更改

    前言 开启某服务或软件的端口 要从该服务或软件监听的端口 多以修改配置文件为主 SeLinux和防火墙 FireWall 的安全策略下手 如果使用阿里云 腾讯等第三方服务器还需要对管理控制台的安全组下手 下面进入主题 如果有什么问题请查看下
  • TCP长连接与NAT超时

    TCP长连接 TCP连接建立后只要不关闭 逻辑上连接一直存在 TCP是有保活定时器的 可以打开保活定时器来维持长连接 设置SO KEEPALIVE才会开启 时间间隔默认7200s 也就是2h 这个默认是关闭的 HTTP中的keep aliv
  • 内向者性格&&安静的力量

    前言 作为搞IT技术的 相信很多人都是比较内向的 以下文章正是介绍内向者的 希望大家能够从中认识自己 接受自己 外向的人更倾向从外部世界寻找力量 而内向的人更倾向关注自己的内部世界 安静 内向性格的竞争力 幸福快乐的首要之点 就在于一个人愿
  • valgrind使用心得

    1 definitely lost 有的时候实际上应该是still reachable 2 uninitialised value s 如 int c GetC if c gt 3 问题不出在c 实际是在GetC里的东西没初始化的 3 换行
  • 冒泡排序及其优化

    冒泡排序及其优化 图解冒泡排序 算法排序步骤 依次比较相邻两个元素 如果第一个比第二个大 则交换两个元素位置 对每一对相邻元素做同样的工作 直到最后一对 这样每次最后一对的元素排序后都是最大的 重复以上步骤直到排序完成 基本算法实现 pub
  • Salesforce解散中国团队,国产SaaS软件如何完美替代

    近日 全球最大的SaaS软件公司Salesforce突然宣布 解散中国区团队 同时关闭位于中国香港的办公室 转由阿里云代销业务 Salesforce的中国淘金之路彻底折戟 国产软件替代外资软件 水土不服等多重因素导致巨头败退 作为全球Saa
  • UKN服务器找不到,ukn6eo.top服务器iP

    2020 10 30 2021 05 02 31 13 76 99 2020 10 30 2021 05 02 31 13 97 245 2020 10 30 2021 05 02 69 63 189 16 2020 11 02 2021
  • 【STM32+ESP-12S连接腾讯云物联网开发平台 1】云平台的创建和AT固件烧录

    腾讯云物联网开发平台创建和ESP 12S的固件烧录 前言 一 腾讯云物联网开发平台的创建 1 创建产品 2 配置产品和创建设备 3 设备三元组说明 二 ESP 12S固件烧录 1 固件获取 2 固件烧录 三 连接测试 1 连接WiFi 2
  • tcp与udp

    tcp 服务端回复完SYN ACK之后 就建立连接 1 为什么是三次 而不是两次 服务端回复完SYN ACK之后 就建立连接 这是为了防止因为已失效的请求报文 突然又传到服务器引起错误 意思就是 假设采用两次握手建立连接 客户端向服务端发送