UDP/TCP与fork

简介:
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机制了,在一个执行绪就可以搞定多目的地传输。



 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1271810

相关文章
|
2月前
|
存储 网络协议 算法
UDP 协议和 TCP 协议
本文介绍了UDP和TCP协议的基本结构与特性。UDP协议具有简单的报文结构,包括报头和载荷,报头由源端口、目的端口、报文长度和校验和组成。UDP使用CRC校验和来检测传输错误。相比之下,TCP协议提供更可靠的传输服务,其结构复杂,包含序列号、确认序号和标志位等字段。TCP通过确认应答和超时重传来保证数据传输的可靠性,并采用三次握手建立连接,四次挥手断开连接,确保通信的稳定性和完整性。
83 1
UDP 协议和 TCP 协议
|
3月前
|
消息中间件 网络协议 算法
UDP 和 TCP 哪个更好?
【8月更文挑战第23天】
157 0
|
7天前
|
网络协议 算法 网络性能优化
|
1天前
|
缓存 负载均衡 网络协议
面试:TCP、UDP如何解决丢包问题
TCP、UDP如何解决丢包问题。TCP:基于数据块传输/数据分片、对失序数据包重新排序以及去重、流量控制(滑动窗口)、拥塞控制、自主重传ARQ;UDP:程序执行后马上开始监听、控制报文大小、每个分割块的长度小于MTU
|
17天前
|
网络协议 前端开发 物联网
TCP和UDP区别?
本文首发于微信公众号“前端徐徐”,详细介绍了TCP和UDP两种传输层协议的核心概念、连接性和握手过程、数据传输和可靠性、延迟和效率、应用场景及头部开销。TCP面向连接、可靠、有序,适用于网页浏览、文件传输等;UDP无连接、低延迟、高效,适用于实时音视频传输、在线游戏等。
31 1
TCP和UDP区别?
|
9天前
|
Web App开发 缓存 网络协议
不为人知的网络编程(十八):UDP比TCP高效?还真不一定!
熟悉网络编程的(尤其搞实时音视频聊天技术的)同学们都有个约定俗成的主观论调,一提起UDP和TCP,马上想到的是UDP没有TCP可靠,但UDP肯定比TCP高效。说到UDP比TCP高效,理由是什么呢?事实真是这样吗?跟着本文咱们一探究竟!
36 10
|
19天前
|
网络协议 网络性能优化 C#
C# 一分钟浅谈:UDP 与 TCP 协议区别
【10月更文挑战第8天】在网络编程中,传输层协议的选择对应用程序的性能和可靠性至关重要。本文介绍了 TCP 和 UDP 两种常用协议的基础概念、区别及应用场景,并通过 C# 代码示例详细说明了如何处理常见的问题和易错点。TCP 适用于需要可靠传输和顺序保证的场景,而 UDP 适用于对延迟敏感且可以容忍一定数据丢失的实时应用。
25 1
|
25天前
|
网络协议 Linux 网络性能优化
Linux C/C++之TCP / UDP通信
这篇文章详细介绍了Linux下C/C++语言实现TCP和UDP通信的方法,包括网络基础、通信模型、编程示例以及TCP和UDP的优缺点比较。
31 0
Linux C/C++之TCP / UDP通信
|
28天前
|
网络协议 算法 数据格式
【TCP/IP】UDP协议数据格式和报文格式
【TCP/IP】UDP协议数据格式和报文格式
81 3
|
28天前
|
存储 网络协议 Java
【网络】UDP和TCP之间的差别和回显服务器
【网络】UDP和TCP之间的差别和回显服务器
56 1