LINUX UDP SOCKET

01

UDP号绑定会报错吗?

会的,提示Address is using,本地的没有区别

UDP不需要发起链接,不知道是不是连接成功

client的IP地址和端口号不正确都不会报错,包一直向外抛

但是通过抓包工具,IP不正确

可以得到network unreachable的网关回答

端口不正确

可以得到对方主机拒绝端口的回答(图中端口错了)

运行终止后再次绑定端口号能否成功?

可以!因为UDP是未知状态下的抛送包,TCP下是不行的,要等握手链接告别表示已经空了可以断线,之后才能绑上,而UDP没有链接,只有包。

阻塞接通UDP包

在Server端kill掉进程

客户端没有任何反应

在Client端kill掉进程

服务端没有任何反应

总结:UDP链接不锁死端口号(没有握手过程不需要确认告别),kill掉任何一段另一端都没有反应(收不到信号)

02

阻塞方法和非阻塞方法没有区别

因为UDP对网络的状态是未知的,想获得报错信息,只能在程序里想办法抓到网关或者对方主机的refused包

非阻塞方法接通socket

03

阻塞方法一次读取20字节

读取到的内容只有20字节,每次都是前20字节

阻塞方法发送2字节//没有意义

每次都是前两字节

04

非阻塞方法法20字节

效果同阻塞方法

非阻塞方法发送2字节//没有意义

效果同阻塞方法

为什么UDP中缓冲区长度没有意义?

在UDP中调整缓冲区来保证字节数本身就是没有价值的

因为UDP的包本身不保证连续,不保证能够送达(送不到直接回信refused)有可能是缓冲区满,有可能丢包了。因此每个包就是一个完整的数据

05

Server端和Client端都具备双路收发

其他问题

UDP能否只绑定一个IP?

可以的,我所有的代码都是绑定第二个IP(一般第一个是回环IP,第二个是ens33通外网的IP,直接使用之前写的GET IP LIST即可

UDP Server之间能否收发数据?

可以,UDP不需要设置监听链接,没有accept和connect关系,Server和Client之间是等位的,两个Server之间也可以传递UDP包

UDP中的client端口号可以绑定吗?

可以绑定,但是没有绑定的意义。链接都不存在,指定端口也不能接听到什么内容。

UDP的端口号netstat能不能看到?

看不到的。试过无数次了,只能通过抓包工具看包的来源和去向(IP:PORT)

Client端是否一定需要connect?不使用connect的情况下有什么区别?

对于Server端来说没有区别,对于client端来说connect在自己主机给sockfd固定一个addr,这样可以直接写recv和send而不用每次都执行recvfrom和sendto。但是只影响到内核中的sockfd文件和地址族绑定,UDP协议还是UDP协议,收发包没有任何区别

持续写能否写满缓冲区?阻塞和非阻塞有区别吗?

有区别!阻塞的方法写满了缓冲区直接报错回弹了,非阻塞的一直发包,另一边缓冲区满了包直接扔了不读

UDP收发缓冲区可以设置?

可以的,setsockopt,但是没有任何价值,UDP的包本身是不连续的,除非为了接受一个硕大无比的UDP包,才去调整缓冲区,但是UDP本身丢包是不知道的,UDP包也没有长度指示符。

Linux Socket - UDP链接包的更多相关文章

  1. linux 系统 UDP 丢包问题分析思路

    转自:http://cizixs.com/2018/01/13/linux-udp-packet-drop-debug?hmsr=toutiao.io&utm_medium=toutiao.i ...

  2. [转]SOCKET通信中TCP、UDP数据包大小的确定

    TCP.UDP数据包大小的确定 UDP和TCP协议利用端口号实现多项应用同时发送和接收数据.数据通过源端口发送出去,通过目标端口接收.有的网络应用只能使用预留或注册的静态端口:而另外一些网络应用则可以 ...

  3. Linux Socket - 基本socket链接

    0x0000 Linux Socket 函数 bind listen connect accept send recv read write 0x0001 Server绑不上ip 报错位置在bind函 ...

  4. Linux下unix socket 读写 抓包

    Linux下unix socket 读写 抓包-ubuntuer-ChinaUnix博客 http://blog.chinaunix.net/uid-9950859-id-247877.html

  5. Linux Socket 原始套接字编程

    对于linux网络编程来说,可以简单的分为标准套接字编程和原始套接字编程,标准套接字主要就是应用层数据的传输,原始套接字则是可以获得不止是应用层的其他层不同协议的数据.与标准套接字相区别的主要是要开发 ...

  6. 浅谈UDP(数据包长度,收包能力,丢包及进程结构选择)

    UDP数据包长度 UDP数据包的理论长度 udp数据包的理论长度是多少,合适的udp数据包应该是多少呢?从TCP-IP详解卷一第11章的udp数据包的包头可以看出,udp的最大包长度是2^16-1的个 ...

  7. Nginx学习笔记(四) 源码分析&socket/UDP/shmem

    源码分析 在茫茫的源码中,看到了几个好像挺熟悉的名字(socket/UDP/shmem).那就来看看这个文件吧!从简单的开始~~~ src/os/unix/Ngx_socket.h&Ngx_s ...

  8. linux socket高性能服务器处理框架

    这个博客很多东西 http://blog.csdn.net/luozhonghua2014/article/details/37041765   思考一种高性能的服务器处理框架 1.首先需要一个内存池 ...

  9. Linux socket编程 DNS查询IP地址

    本来是一次计算机网络的实验,但是还没有完全写好,DNS的响应请求报文的冗余信息太多了,不只有IP地址.所以这次的实验主要就是解析DNS报文.同时也需要正确的填充请求报文.如果代码有什么bug,欢迎指正 ...

随机推荐

  1. ipython的使用

    改初始路径 还有一个坑,可以用notebook打开一个已经存在的文件,但是不能正常编辑(使用单元编辑),因为使用这个创建的东西根本就不是一个.py文件,如果代码编辑完毕,倒是可以通过下载那里选择下载成 ...

  2. 在 Ubuntu 16.04 LTS 上 离线安装 Docker / Docker-compose

    前情提要 今天上班后,突然接到现场的工程师的电话: XXX的现场环境组的的局域网,上不了互联网.bla bla bla..... 如果需要安装其他软件的话,只能是自己带过去安装... 听完现场工程师的 ...

  3. 第 0 课 Golang环境搭建

    1  下载 https://studygolang.com/dl  2   安装完成后,查看环境变量 GOBIN 存放可执行文件的目录的绝对路径. GOPATH 工作区目录的绝对路径.存放远源码的路径 ...

  4. JMS消息服务模型

    JMS--仅仅是一种规范,一种接口规约,一种编程模型.类似的JPA,JSR等 场景: 1.多个系统之间交互,实现可以采取RPC,但是交互复杂,基本就是点对点的方式 2.其实交互就是消息,而JMS就是消 ...

  5. python 简单爬虫获取气象数据发送气象定时报-预报预警信息及时推送及阿里云短信群发接口

    !/usr/bin/python #encoding=utf-8 #Author:Ruiy #//////////////////////////////////////////////////// ...

  6. ES6系列_9之对象

    1.对象赋值 es5中的对象赋值方式如下: let name="小明"; let skill= 'es6开发'; var obj= {name:name,skill:skill}; ...

  7. 通过PicturreId获取图片路径(Url)

    1.直接使用接口服务 _pictureService.GetPictureUrl((int)entity.SponsorPictureId); //entity是具体查询出来的实体对象 Sponsor ...

  8. Matlab信号处理工具箱函数

    波形产生和绘图chirp 产生扫描频率余弦diric 产生Dirichlet函数或周期Sinc函数gauspuls 产生高斯调制正弦脉冲pulstran 产生脉冲串rectpuls 产生非周期矩形信号 ...

  9. js中元素结点的引用

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  10. win7局域网内共享文件夹及安全设置

    右键想要共享的文件夹,选择属性. 在文件夹属性对话框中选择共享标签,如图: 点击共享按钮,弹出文件共享对话框. 添加 Everyone ,并根据实际需要修改权限.权限可以是读取 或 读取/写入. 到此 ...