udp

TCP与UDP的区别(超详细)

假装没事ソ 提交于 2020-02-28 19:44:49
总结 TCP是面向连接的,UDP是无连接的 TCP是可靠的,UDP是不可靠的 TCP是面向字节流的,UDP是面向数据报文的 TCP只支持点对点通信,UDP支持一对一,一对多,多对多 TCP报文首部20个字节,UDP首部8个字节 TCP有拥塞控制机制,UDP没有 TCP协议下双方发送接受缓冲区都有,UDP并无实际意义上的发送缓冲区,但是存在接受缓冲区 TCP是面向连接的,UDP是无连接的 在TCP协议进行网络通信时,需要先建立连接,也就是说需要先将客户端与服务器的连接连好,然后在进行数据交互。 服务器的listen()函数和accept() 函数确保了连接的建立 因为使用TCP协议时,Linux内核协议栈为TCP连接创建了两个队列 1. 半连接队列:用来保存处于SYN_SENT 和 SYN_RECV状态的请求 2. 全连接队列:accept队列,用来保存正在数据交互(established状态)的客户端连接 全连接队列长度 == 套接字函数listen()的第二个参数+1 TCP是可靠的,UDP是不可靠的 TCP使用一下方式保证自身发送接受数据可靠 数据包校验(16为数据校验和)防止发送过来的数据是错误数据 确认序列号,对失序报文进行重排 丢弃重复数据包,防止数据冗余重复 确认应答机制,接收方接受数据之后会发送一个确认 超时重传机制,发送方发出数据后会启动一个定时器

Reconstruct image from RTP packets

风流意气都作罢 提交于 2020-02-28 15:53:56
问题 I am trying to stream a user's webcam over the network to a C-based server. I have used Janus gateway. I created a small plugin which is heavily based on the echotest demo example : I have my browser connecting to my janus server via WebRTC technology and I have it stream the user's webcam. On the server side, I have janus_incomming_rtp function which gives me a char * buffer and int length . Upon inspection, the buffer of data that's incomming is about the length of the MTU : each frame of

Reconstruct image from RTP packets

删除回忆录丶 提交于 2020-02-28 15:51:11
问题 I am trying to stream a user's webcam over the network to a C-based server. I have used Janus gateway. I created a small plugin which is heavily based on the echotest demo example : I have my browser connecting to my janus server via WebRTC technology and I have it stream the user's webcam. On the server side, I have janus_incomming_rtp function which gives me a char * buffer and int length . Upon inspection, the buffer of data that's incomming is about the length of the MTU : each frame of

Java网络编程之UDP程序设计

空扰寡人 提交于 2020-02-28 13:58:02
1.UDP简介 使用UDP发送消息,对方不一定收到,因为所有的信息使用数据报的形式发送出去,这就要求客户端要始终等待接收服务器发送过来的信息,在Java中使用DatagramSocket类和DatagramPacket类完成UDP程序的开发。 2.程序实现 使用DatagramPacket类包装一条要发送的信息,之后使用DatagramSocket类用于完成信息的发送操作。DatagramPacket类的常用方法: 类型 方法 描述 构造 DatagramPacke t(byte[] buf, int length) 构造 DatagramPacket ,用来接收长度为 length 的数据包。 构造 DatagramPacket (byte[] buf, int length, InetAddress address, int port) 构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。 byte[] getData () 返回数据缓冲区。 int getLength () 返回将要发送或接收到的数据的长度。 DatagramSocket类常用方法: 类型 方法 描述 构造 DatagramSocket (int port) 创建数据报套接字并将其绑定到本地主机上的指定端口。 void send (DatagramPacket p)

python实现简陋的udp通讯例子

泄露秘密 提交于 2020-02-28 07:40:16
单纯就是udp客户端发送数据一的个例子。通过连续发送信息,主要想看看服务器是否能完整收到所有信息。 import socket import time # UDP 客户端,连续发送信息。 ip = '192.168.0.112' port = 2000 addr = ( ip , port ) udpClientSocket = socket . socket ( socket . AF_INET , socket . SOCK_DGRAM ) for i in range ( 1000 ) : infoStr = "今天吃了么?" + str ( i ) msg = infoStr . encode ( 'utf-8' ) udpClientSocket . sendto ( msg , ( addr ) ) if i == 600 : time . sleep ( 3 ) for i in range ( 1000 , 2000 ) : infoStr = "今天吃啥了?" + str ( i ) msg = infoStr . encode ( 'utf-8' ) udpClientSocket . sendto ( msg , ( addr ) ) 来源: CSDN 作者: 还是没名字 链接: https://blog.csdn.net/hryjzsh/article

TCP和UDP相关

被刻印的时光 ゝ 提交于 2020-02-27 12:21:09
前言 前端的面试中经常问的 TCP 和 UDP 的区别,网上也有好多内容,比如 TCP 和 UDP 的区别 TCP 是面向连接的,UDP 是面向无连接的 UDP程序结构较简单 TCP 是面向字节流的,UDP 是基于数据报的 TCP 保证数据正确性,UDP 可能丢包 TCP 保证数据顺序,UDP 不保证 之前也因为面试的原因了解过一下,但是面试官又问了为什么 TCP 是可靠传输,一下就露馅了,说不出来了,然后这两天就仔细了解了一下这方面的内容,还专门订阅了极客时间的趣谈网络协议,因此,这篇文章主要基于趣谈网络协议和自己的理解。 UDP 要想理解 TCP 和 UDP 的区别,首先要明白什么是 TCP,什么是 UDP TCP 和 UDP 是传输层的两个协议 我们来看一下 UDP 的包头 由上图可以看出,UDP 除了端口号,基本啥都没有了。如果没有这两个端口号,数据就不知道该发给哪个应用。 所以 UDP 就像一个小孩子,特别简单,有如下三个特点 UDP 的特点 沟通简单,不需要大量的数据结构,处理逻辑和包头字段 轻信他人。它不会建立连接,但是会监听这个地方,谁都可以传给它数据,它也可以传给任何人数据,甚至可以同时传给多个人数据。 愣头青,做事不懂变通。不会根据网络的情况进行拥塞控制,无论是否丢包,它该怎么发还是怎么发 因为 UDP 是"小孩子",所以处理的是一些没那么难的项目

Python—TCP的黏包问题以及UDP的分片问题

*爱你&永不变心* 提交于 2020-02-26 22:27:19
TCP协议与UDP协议 TCP(transport control protocol,传输控制协议)是面向连接的,面向流的,提供高可靠性服务。收发两端(客户端和服务器端)都要有一一成对的socket, 因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小且数据量小的数据,合并成一个大的数据块,然后进行封包。这样,接收端,就难于分辨出来了,必须提供科学的拆包机制。 即面向流的通信是无消息保护边界的。 UDP(user datagram protocol,用户数据报协议)是无连接的,面向消息的,提供高效率服务。 不会使用块的合并优化算法,, 由于UDP支持的是一对多的模式,所以接收端的skbuff(套接字缓冲区)采用了链式结构来记录每一个到达的UDP包,在每个UDP包中就有了消息头(消息来源地址,端口等信息),这样,对于接收端来说,就容易进行区分处理了。 即面向消息的通信是有消息保护边界的。 tcp是基于数据流的,于是收发的消息不能为空,这就需要在客户端和服务端都添加空消息的处理机制,防止程序卡住,而udp是基于数据报的,即便是你输入的是空内容(直接回车),那也不是空消息,udp协议会帮你封装上消息头。 TCP与UDP的不同接包处理方式 1.TCP的发包问题 问:tcp 发送两次数据,第一次发送100字节 ,第二次发送200字节,

计算机网络 第五章:传输层

元气小坏坏 提交于 2020-02-26 11:58:53
第五章 传输层 ->传输层协议UDP和TCP ->网络安全 ->TCP可靠传输的实现 ->TCP的流量控制 ->TCP的拥塞控制 ->TCP的运输连接管理 5.1 OSI和DoD模型 下图必须背下来。尤其是传输层和网络层的协议。 传输层最大数据包是65535字节,而网络层数据最大只有1480字节。所以需要分段,但是只要分段,就有可能丢包,因为网络层不负责可靠传输。所以要求服务器和客户端保持会话,直到数据传输完成。 ->TCP(Transmission Control Protocol)传输控制协议 应用场景:需要将要传输的文件分段传输时;就需要TCP协议来建立会话实现可靠传输;同时也有流量控制功能。(例如QQ传文件) 查看会话 netstat -n 查看建立会话的进程 netstat -nb ->UDP(User Data Protocol)用户数据报协议 应用场景:一个数据包就能完成数据通信;不需要建立会话和流量控制;多播/广播;是一种不可靠传输。(例如QQ聊天,屏幕广播) 5.2 传输层协议和应用层协议的关系 (1)TCP和UDP协议和不同的端口即可对应一个应用层的协议。注意,53大部分是与UDP相连。 (2)熟知数值一般为0-1023,登记端口号数值1024-49151,客户端口号数值为49152-65535. (3)常用的应用层协议使用的端口(号): http = TCP

Linux 常用命令

两盒软妹~` 提交于 2020-02-26 10:57:25
要列出正在侦听的所有 TCP 或 UDP 端口,包括使用端口和套接字状态的服务,请使用以下命令:   sudo netstat -tunlp 此命令中使用的选项具有以下含义: -t - 显示 TCP 端口。 -u - 显示 UDP 端口。 -n - 显示数字地址而不是主机名。 -l - 仅显示侦听端口。 -p - 显示进程的 PID 和名称。仅当您以 root 或 sudo 用户身份运行命令时,才会显示此信息。 来源: oschina 链接: https://my.oschina.net/u/4118479/blog/3165282

UDP与TCP的区别

旧城冷巷雨未停 提交于 2020-02-25 23:53:02
UDP是 无连接 的,即发送数据之前 不需要建立连接 ,发送数据结束时也 没有连接可以释放 ,因此 减少了开销和发送数据之前的时延 。目的主机的运输层在收到UDP报文后, 不需要给出任何确认 。 TCP是 面向连接 的运输层协议,也就是说,应用程序在使用TCP协议之前, 必须先建立TCP连接,在传送数据完毕后,必须释放已经建立的TCP连接 UDP 尽最大努力交付 ,即不保证可靠交付,因此主机 不需要维持复杂的连接状态表 。 TCP 提供可靠交付 的服务。通过TCP连接传送的数据, 无差错、不丢失、不重复,并且按序到达 。 UDP是 面向报文 的。发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层,应用层交给UDP多长的报文,UDP就照样发送,既不合并,也不拆分,一次发送一个报文。 TCP是 面向字节流 的,即TCP把应用程序交下来的数据仅仅看成是一连串的无结构的字节流 UDP支持 一对一、一对多、多对一和多对多 的交互通信 每一条TCP连接只能有两个端点,每一条TCP连接只能是点对点的( 一对一 )。 UDP 没有拥塞控制 ,因此网络出现的拥塞不会使源主机的发送速率降低。 UDP的 首部小 ,只有8个字节,比TCP的20个字节的首部要短 TCP提供 全双工通信 。TCP允许通信双方的应用进程在任何时候都能发送数据。TCP连接的两端都设有发送缓存和接收缓存