1.既然UDP是无连接不保证送达的,那么就没有必要在关闭时通知对方了,因为这个“关闭”消息也不能保证送达,不仅如此,任何的控制信息诸如确认都不便在传输层发送,因为不能保证送达。UDP是基于数据报的,第一个数据报和随后同源同目的的第二个数据报之间没有任何的关系。因此不要指望对端能收到自己closesocket的消息,即使是有人想出用带外数据传输也是徒劳的,因此只能通过超时机制或者心跳机制来保活;
2.对于tcp,其比udp开销大,大就大在协议头的空间开销和重传以及ip分段的时间开销,确认并不算什么开销,而是可以直接就近连带返回的;
3.所谓的udp不拆分并不是指udp报文不分段,而是在传输层不拆分,在ip层还是会被分段的,视MTU而定,网络层的分段和传输层的拆分并没有什么关系,源之后目的地之前的网络设备逻辑上不会触及网络层之上,除非物理上要做连接跟踪或者七层过滤等等,数据在到达目的地后,送往传输层之前,ip层会将分段的数据重新组装好。
4.TCP的connect/accept模型和unix/linux的fork模型类似,而UDP则类似于单进程单执行绪模型,它们是如此的类似,由于tcp是有连接的,因此如果n个客户端连接同一个服务器,那么该服务器必须能够区分这n个客户端,从资源消耗以及事先不知道有多少潜在客户端的角度考虑,不能想象有n个服务器进程事先在等待,套接字accept模型完美的解决了这个问题,方式正和fork机制一样,在进程模型中,只有在有新的作业时才fork出一个新的执行绪,accept也是同样,有新的客户端连接时就返回一个新的套接字描述符,然后继续accept,因此对于有连接的协议,首先要有一个监听套接字,它正如unix的init进程一样,一旦有新的客户端就返回一个新的套接字(对于init进程就是fork出一个新的子进程后init进程继续监听或者收养孤儿)。我想accept模型也是从fork中学习的,起初网络通信只用于远端终端连接,主机并不知道一共会有几个终端要连接,因此就让一个进程getty等待在主机,一旦有终端连接,getty就会fork出一个shell并且创建一个伪终端对用于服务新建的远程终端,也许,仅仅是也许,套接字学习了unix的fork这种模式,产生了accept模型,在unix中,fork一次就会产生一个独立执行绪,英文表达中有一个thread单词,该词就有“线”“序列”的意思,正和“连接”语义相近,都有一种上下衔接的含义,这也许又是二者的另一种渊源吧。udp就没有这样的需求,udp可以在一个套接字上将一份数据分发给不同的接收方,因为其sendto接口中就带有地址信息,如此udp套接字只需要一对即可,因此也就不需要accept机制了,在一个执行绪就可以搞定多目的地传输。
分享到:
相关推荐
broadcast icmp jiqiao multi_broad raw sys_net_ml tcp1 term thread udp cap io mul_thread_download qq sem tcp tcp_dos testerr time wav ./broadcast: broad.h client.c server server.c ./cap: ...
国嵌视频,网络编程,TCP:tcp_client.c,tcp_server.c,tcp_server_fork.c,udp_server.c,udp_client.c
服务器端利用I/O复用同时支持TCP和UDP,在同一个端口上同时绑定TCP套接口和UDP套接口,使用select()函数等待读写就绪条件的发生,然后通过FD_ISSET(listenfd, &rset)和FD_ISSET(listenfd, &rset)判断是TCP就绪还是...
Linux下udp并发服务器的实现。服务器循环接收客户端的消息,每收到一个消息,fork()一次,通过子进程来完成客户端的消息。与tcp并发不一样,他不必listen()和accept()。
Docker主机转发器 Docker Host Forwarder是一个最小的容器,可用于在Docker容器和Docker主机...$ docker run -d numtide/docker-host-forwarder socat UDP4-RECVFROM:8125,fork UDP4-SENDTO:host.docker.internal:8125
( 更新fork) 贡献者 这些人很棒: 防锈实施 防锈实施 -Golang实施 -Unity集成,C#实现 支持随机连接令牌随机数 重播保护中发现的漏洞 Chen-打字稿实施 感谢您对netcode的贡献! 作者 该库的作者是 。 ...
如 IP、TCP、 UDP、IPv6、PIPE、EXEC、System、Open、Proxy、Openssl、Socket等。 android反向shell工具。 本zip包含socat arm版本 和 arm64版本,可以push到android设备运行。 例如: adb push socat /data/local...
Fire and forget unboxed or fragmented messages over UDP or TCP, have them forwarded to Kafka 0.8 or the standard output. That should cover syslog. Disclaimer As-is: This project is not actively ...
Supports serial ASCII, serial RTU, TCP, and UDP protocols. NModbus4 it's a fork of NModbus(https://code.google.com/p/nmodbus). NModbus4 differs from original NModbus in following: 1.removed USB ...
TCP and UDP Echo Server Using select Section 8.16. Summary Exercises Chapter 9. Elementary SCTP Sockets Section 9.1. Introduction Section 9.2. Interface Models Section 9.3. sctp_bindx ...
1. TCP/IP协议栈与数据包封装 2. 以太网(RFC 894)帧格式 3. ARP数据报格式 4. IP数据报格式 5. IP地址与路由 6. UDP段格式 7. TCP协议 7.1. 段格式 7.2. 通讯时序 7.3. 流量控制 37. socket编程 1. 预备知识 1.1. ...
软件包含多种tcp与udp通信的简单示例,服务器处理客户端请求的方式有:递归、fork子进程、创建线程、select处理多IO等等
这是该页面的伪代码: **Server** start while(running) { wait(new incoming client TCP connection) fork server process: [ check_authenticate(MD5, "kitten"); exchange settings and values with client; ...
本实验代码包是国嵌OK6410应用开发板网络编程部分:tcp_server.c tcp_client.c udp_server.c udp_client.c tcp_server_fork.c 仅供参考
5.1.4 IP地址转换函数 5.2 创建socket 5.3 命名socket 5.4 监听socket 5.5 接受连接 5.6 发起连接 5.7 关闭连接 5.8 数据读写 5.8.1 TCP数据读写 5.8.2 UDP数据读写 5.8.3 通用数据读写函数 5.9 带外...
\初级驱动\drivers_实验资料\drivers_实验资料\kernel课程\内核课程.chm 内核源码下载和结构; 目录结构: ...net: 大部分的网络协议代码就在这里了,比如IPv4,IPv6,tcp,udp,ieee80211,域套接字
3.3.3 传输协议的选择:UDP与TCP的对比 3.4 网络服务 3.4.1 IP服务 3.4.2 ICMP服务 3.5 支持协议和服务 3.5.1 域名服务 3.5.2 地址解析协议 3.5.3 其他支持协议 3.6 TCP/IP的发展前景 第4章 网络应用程序工作机制 ...
3.3.3 传输协议的选择:UDP与TCP的对比 3.4 网络服务 3.4.1 IP服务 3.4.2 ICMP服务 3.5 支持协议和服务 3.5.1 域名服务 3.5.2 地址解析协议 3.5.3 其他支持协议 3.6 TCP/IP的发展前景 第4章 网络应用程序工作机制 ...
nmodbus的源代码及说明文档,用于与硬件进行modbus通讯 ... NModbus是Modbus协议的C#实现,提供与Modbus从设备兼容的设备和应用程序的连接,支持串行ASCII,串行RTU,TCP和UDP协议,NModbus4是fork的NModbus (安装