粉丝825获赞5077

要正确的姿势涨知识!哈喽大家好,欢迎收看涨知识!对于 tcp 协议和 udp 协议,大家应该都有做耳闻, 我们常用的网络通讯,比如浏览网页、软件聊天,以及你现在正在收看的视频,都是通过这两种协议来进行数据传输的。到底他们是如何工作的?这两种协议又有什么区别呢?请耐心看完本期视频,一定会有所收获。 tcp 协议和 udp 协议都工作在传输层,他们的目标都是在程序之间传输数据,数据可以是文本文件可以是视频,也可以是图片, 对于 tcp 协议和 udp 协议来说,都是一对二进之处,并没有多大的区别。那 tcp 与 udp 之间的区别是什么?想必看到这里的同学也能异口同声的说出来。最大的区别 是一个机遇连接,一个机遇飞。连接具体是什么意思?我们来举一个简单的例子,如果把人与人的通信比喻为晋城与晋城的通信, 我们基本有两种方式,第一种方式是写信,第二种方式是打电话。如果不考虑速度因素,这两种方式之间最大的区别是什么?就是信寄出去之后,对方是否能收到,以及收到的信内容是否完整,先后继两封信过去,是否按照顺序接收都变成了未知数, 甚至你填写的收信地址和收信人是否存在,你都无法确认。而打电话则不同,从拨打电话到对方接通互相通话,再到结束通话后挂断,这一系列的流程都能得到及时的反馈, 并且能确认对方准确的接收到。打电话是基于连接的,也就是 tcp, 而写信就是基于非连接的,就是 udp。 tcp 是如何保证以上过程的?有三个关键的步骤,分别为三次握手、传输确认,四次挥手。 三次握手是建立连接的过程,当客户端向服务端发起连接时,会先发一包连接请求数据过去询问一下能否与你建立连接。这包数据我们称之为肾包,如果对端同意连接,则回复一包性价艾克包。客户端收到之后回复一包艾克包连接建立。 因为这个过程中互相发送了三包数据,所以称之为三次握手。为什么要三次握手而不是两次握手?服务端回复完三加艾克之后就建立连接, 这是为了防止因为已失效的请求豹纹突然又传到服务器引起错误。这是什么意思?假设采用两次握手建立连接,客户端向服务端发送了一个肾包来请求建立连接,因为某些未知的原 原因并没有到达服务器,在中间某个网络节点产生了滞留。为了建立连接,客户端会重发赠包,这次的数据包正常送达,服务端回复增加艾克之后建立起来连接, 但是第一包数据阻塞的网络节点突然恢复,第一包省包又送达到服务端,这时服务端会误认为是客户端又发起了一个新的链接, 从而在两次握手之后进入等待数据状态,服务端认为是两个连接,而客户端认为是一个连接,造成了状态不一致。如果在三次握手的情况下,服务端收不到最后的爱,可自然不会认为连接建立成功。 所以三次握手本质上来说就是为了解决网络信道不可靠的问题,为了能够在不可靠的信道上建立起可靠的连接,经过三次握手之后,客户端和服务端都进入了数据传输状态。我们 刚才说过, tcp 协议需要在不可靠的信道上保证可靠的连接。现在就有几个问题需要面对,一包数据有可能会被拆成多爆发送,如何处理丢包问题?这些数据包到达的先后顺序不同, 如何处理乱序问题?针对这些要求, tcb 协议为每一个连接建立了一个发送缓冲区,从建立连接后的第一个字节的序列号为零,后面每个字节的序列号就会增加。一 发送数据时,从发送缓冲区取一部分数据组成发送豹纹,在其 tcb 协议头中会附带序列号和长度,接收端在收到数据后需要回复确认豹纹,确认豹纹中的艾克等于接收序列号加长度, 也就是下一包数据需要发送的起始序列号。这样一问一答的发送方式能够使发送端确认发送的数据已经被对方收到, 发送端也可以一次发送连续的多包数据,接收端只需要回复一次艾克就可以了。这样发送端可以把带发送的数据分割成一系列的碎片发送到对端。对端根据序列号和长度在接收后重构出来完整的数据。 假设其中丢失了某些数据包,则接收端可以要求发送端重传。比如丢失了一百到一百九十九这一百个字节,接收端向发送端发送艾克等于一百的豹纹,发送端收到后重传这一包数据,接收端进行补齐。 以上过程不区分客户端和服务端, tcp 连接是全双工的,对于两端来说均采用上述机制。我们再来看一下什么是次次挥手。处于连接状态的客户端和服务端都可以发起关闭连接请求,此时需要次次挥手来进行连接关闭。假设客户端主动 发起连接关闭请求,他需要将服务端发起一包粪包,表示要关闭连接,自己进入中置等待一状态。这是第一次回收。服务端收到粪包,发送一包艾克包,表示自己进入了关闭等待状态。客户端进入中置等待二状态,这是第二次回收。 服务端此时还可以发送未发送的数据,而客户端还可以接收数据,待服务端发送完数据之后,发送一包粪包进入最后确认状态,这是第三次回收。客户端收到之后回复艾克包进入超时等待状态,经过超时时间后关闭连接, 而服务端收到艾克堡后立即关闭连接,这是第四次回收。为什么客户端需要等待超时时间?这是为了保证对方已收到艾克堡。因为假设客户端发送完最后一包艾克堡后就释放了连接,一旦艾克 包在网络中丢失,服务端将一直停留在最后确认状态。如果客户端发送最后一包艾克包后等待一段时间, 这时服务端因为没有收到艾克包,会重发粪包,客户端会响应这个粪包,重发艾克包并刷新超市时间。这个机制跟三次握手一样,也是为了保证在不可靠的网络链路中进行可靠的连接断开确认。 了解了 tcp 协议,我们再来看一下 udp 协议。首先 udp 协议是基于非连接的发送数据,就是简单的把数据包封装一下,然后从网卡发出去就可以了,数据包之间并没有状态上的联系,正因为 udp 这种简单的处理方式, 导致他的性能损耗非常少,对于 cpu 内存资源的占用也远小于 tcp。 但是对于网络传输过程中产生的丢包, udp 协议并不能保证,所以 udp 在传输 稳定性上要弱于 tcp, 所以我们能总结出来 tcp 和 udp 的主要区别。 tcp 传输数据稳定可靠,适用于对网络通讯质量要求较高的场景, 需要准确无误的传输给对方,比如传输文件、发送邮件、浏览网页等。 udp 的优点是速度快,但是可能产生丢包,所以适用于对实施性要求较高,但是对少量丢包并没有太大要求的场景, 比如域名查询、语音通话、视频直播等。有 app 还有一个非常重要的应用场景就是隧道网络。什么是隧道网络?比如我们常用的 vpn 就是一种隧道网络,以及在 sdn 中用到的微叉烂也是一种隧道网络。 关于隧道网络的知识,我们在下期视频进行讲解,今天的视频就到这里了,欢迎大家点赞、留言、关注、转发,再见!

udp 协议大家应该都不陌生,在咸鱼上有一个买家联系我说你的内网穿透平台支持 udp 协议吗?我当时告诉他不支持, 那今天的话写了一天的代码,完善了 udb 的支持,也就是说通过内网穿透可以实现在内网的 udb 的服务端,可以映射到外网来看一下效果。这是一个 tcp udp 的一个测试工具啊,这个测试工具可以监听 啊,服务器端模拟客户端发送这个 udp 的消息。那现在的话,我们来测试一下我们的内网传统平台的 udp 支持。那首先的话我们要进入下载中心啊,下载中心去下载对应操作系统版本,我这里是 windows, 所以说直接下载 windows, 那这个下载的话,我直接在我的这个内网上面进行下载,速度很快啊,点击这个问的是 md 六四直接下载,下载成功了过后我们就得解压,得到这样的一个目录啊, 叫巴特克奈啊,然后下一步做什么事呢?下一步就是进入到闭目录,然后双击这个巴特 bat 啊,这是 windows 的,如果你是练的死的话,就执行他啊, 我们把它跑起来,跑起来过后的话有一尊佛在这哈,这个佛的话是保证这个项目没有问题的啊,主要是辟邪作用啊。然后就是这个客户端连上了这个夫妻端啊,那我们现在的话要做什么事呢?就是 登录到联网上的平台啊,然后去绑定这个设备, 来我们看一下设备绑定,那基于这个服务的发现啊,客户端发现啊,客户端发现的话就可以找到这个设备,然后点击他绑定, 那这个时候的话,我们的设备就绑定在我们的这个账号下面了,然后再绑定对应的端口, 这里我们使用这个 udp 协议的单个是二零八,然后我们做什么事呢?那首先选择 utp 协议,然后他的内网的 host 的话是我本机的 ip 的话是幺九二的幺六八,点一点二零,然后 本地开启一个端口啊,刚才的话给大家看啊,这个叫 udb 测试工具,本地监听三零零二,端口啊,开启监听, 然后这里写三零零二,然后 udb 协议协议测试, 然后我们先不打开,然后点保存,不打开的话这个香奈社这个网络是中断的,那怎么样打开呢?嗯,我们先发送消息啊,这个 ip 地址呢,是我在 我们服务器端的外网 ip 地址啊,看到没有?拼得到的 ip 二三五,二三五啊,也就是我们 我们这个服务的外网的 ip 地址,然后他的外网的端口的话是二二零八啊,这里的二二零八,然后我们点连接,那么这个时候的话, 我的发送区啊,这个模拟软件的发送区和接收区都没有消息啊,发送区的发送内容啊,接收区没有接收到任何消息。 那这个时候我们把 udb 协议的这个通道打开啊,映射保存短啊,那这边就接收区的话,就接收到了 udb 的这个消息啊,客户端的话他一直在发送,哎,他妈吃了炫迈了,停不下来。


二零四八,控台与 udp 设置连接,首先我们控台的设置是 要看一下设置里面的阿特内设置 ip, 阿特内为只能 ip, 我们使用默默认的就可以了。 设置完之后我们退出,然后到用户设置谜底需要等于重击,这里可以切换的啊,等于重击,设置完之后我们直接退出, 然后到我们这个 udp 的设置软件这里,我们协议类型要修改一下,修改为 udp d 的 ip 地址是在这里显示的,但是他和和你的网络设置是相关的。在仪态网更改设备期选项, 我们这里有一个属性修改,写一版本四属性,这里是一致的,这里设置是一致的,它会自动识别,落实不出来,你可以手动修改。 端口号是这一个协议的端口号六四五四, 接收是十六进制,然后发送去这里也要打勾十六进制,然后目标主机的设置是幺九二点幺六八点幺点一百,这个是 对应的空台的 ip, 设置的端口是一致的, 然后协议命运是十六进制的话,发送我们是有一个前缀的,包头格式是四 d 四九四四四九九零,前面的前缀 后面的这三个是代表的第一个零零代表的是推杆,这一个代表是推杆,这一个代表的是叶树,这一个代表的是推杆的电瓶,就是你推杆数值, 我们现在零零是代表着第一根推杆,零零代表的是第一页的这一个零零是代表出电瓶为零,我们修改一下, 就是把第一根第一页的第一根推杆数字打满,发送可以售后,我们输入为零零的话,发送就会灭灯, 我们修改为第一根,第二根推杆,我们输入 ff 发送第二根推杆运行 这一个包头格子设置是四 d 空格、四九空格、四四空格、四九空格、九零空格,然后输入我们要运行的推杆或者是关闭推杆,我们这边运 进行的是第二根推杆,我们输入零一零零第一页, 然后零零让他关闭发送即可。


