MTU最大传输单元,这个最大传输单元实际上和链路层协议有着密切的关系,EthernetII帧的结构DMAC+SMAC+Type+Data+CRC由于以太网传输电气方面的限制,每个以太网帧都有最小的大小64bytes最大不能超过1518bytes,对于小于或者大于这个限制的以太网帧我们都可以视之为错误的数据帧,一般的以太网转发设备会丢弃这些数据帧。
由于以太网EthernetII最大的数据帧是1518Bytes这样,刨去以太网帧的帧头(DMAC目的MAC地址48bit=6Bytes+SMAC源MAC地址48bit=6Bytes+Type域2bytes)14Bytes和帧尾CRC校验部分4Bytes那么剩下承载上层协议的地方也就是Data域最大就只能有1500Bytes这个值我们就把它称之为MTU。
PPPoE所谓PPPoE就是在以太网上面跑PPP协议,有人奇怪了,PPP协议和Ethernet不都是链路层协议吗?怎么一个链路层跑到另外一个链路层上面去了,难道升级成网络层协议了不成。其实这是个误区:就是某层协议只能承载更上一层协议。
为什么会产生这种奇怪的需求呢?这是因为随着宽带接入(这种宽带接入一般为Cable Modem或者xDSL或者以太网的接入),因为以太网缺乏认证计费机制而传统运营商是通过PPP协议来对拨号等接入服务进行认证计费的.
PPPoE带来了好处,也带来了一些坏处,比如:二次封装耗费资源,降低了传输效能等等,这些坏处俺也不多说了,最大的坏处就是PPPoE导致MTU变小了以太网的MTU是1500,再减去PPP的包头包尾的开销(8Bytes),就变成1492。
UDP 包的大小就应该是 1492 - IP头(20) - UDP头(8) = 1464(BYTES)
TCP 包的大小就应该是 1492 - IP头(20) - TCP头(20) = 1452(BYTES)
目前大多数的路由设备的MTU都为1500
我对上面的理解是:如果我们定义的TCP和UDP包小于1452,1464,那么我们的包在IP层就不用分包了,这样传输过程中就避免了在IP层组包发生的错误。如果使用UDP协议,如果IP层组包发生错误,那么包就会被丢弃,UDP不保证可靠传输。但是TCP发生组包错误时,该包会被重传,保证可靠传输。所以,我们在用Socket编程时,包的大小设定不一定非要小于1400,UDP协议要求包小于64K,TCP没有限定。
总结:
我们设定包的大小对于UDP和TCP协议是不同的,关键是看系统性能和网络性能,网络是状态很好的局域网,那么UDP包分大点,提高系统的性能。不好,就分小于1464,这样可以减低丢包率。对于TCP来说,这个就要靠经验了,因为,TCP丢包可以自动重传,分大了,系统性能提高了,分包和错误重组可能会耗费时间,使传送时间延长,分小了,系统性能又降低了。
分享到:
相关推荐
例如,在"浅析C#套接字.doc"中,可能会详细讲解如何创建TCP客户端和服务器,以及如何处理连接、接收和发送数据。 对于UDP通信,同样使用Socket类,但需要设置Socket类型为Datagram,因为UDP是无连接的。在发送数据...
### TCP协议及工作原理浅析 #### 一、TCP/IP整体构架 TCP/IP协议作为互联网的核心协议之一,虽然没有完全遵循OSI的七层参考模型,但它自成一体的四层模型却成为了事实上的标准。为了更好地理解TCP/IP的工作方式,...
TCP的定时器种类多样,如重传定时器用于确保数据包被正确接收,而坚持定时器用于定期发送窗口更新,以防止旧窗口信息丢失。保活定时器虽然有助于保持连接,但设置不当可能导致TCP连接资源的过度消耗,进而影响网络...
### Linux环境下基于TCP的Socket编程浅析 #### 摘要 本文主要探讨了Linux环境下基于TCP协议的Socket编程技术。Socket作为一种通用的进程间通信(IPC)方式,不仅适用于同一台计算机上的进程通信,也广泛应用于网络...
《Linux环境下基于TCP的Socket编程浅析》 在现代计算机科学中,Socket编程是构建网络应用程序的基础,尤其在Linux操作系统中,它的重要性更是不言而喻。Socket提供了一种标准接口,使得进程间通信(IPC)以及网络...
另一方面,UDP(用户数据报协议)则是无连接的服务,数据包发送后不保证到达,适用于实时性要求高的应用,如在线视频和音频流媒体。 在Linux中,开发网络通讯程序涉及到套接字编程,包括创建套接字、绑定地址、监听...
2. UDP Flood攻击:利用UDP协议的无连接特性,攻击者发送大量UDP数据包到目标服务器,服务器回应ICMP不可达消息,消耗大量带宽。 3. ICMP Flood攻击:攻击者发送大量的ICMP回显请求(ping),导致目标服务器收到...
- Network Address/Port Translator (NAPT):不仅转换IP地址,还修改TCP/UDP端口,允许多个内部主机共享一个公网IP。这是目前最常见的NAT类型,分为两类: - Cone NAT:一旦一个内部主机的私有IP和端口与外部公共...
UDP是TCP/IP协议族中的一个无连接、不可靠的传输协议,不保证数据包的顺序或完整性,但因为其轻量级和快速的特性,在局域网环境和对实时性要求高的应用中较为适用。在LabVIEW中,可以通过编程实现基于UDP的网络通信...
流套接字提供面向连接的服务,保证数据包按顺序到达且不丢失,适用于需要可靠传输的场景。数据报套接字则不保证数据的顺序和完整性,适用于一次性的、无连接的数据传输,例如UDP协议。 C#中的套接字连接过程通常...
在视频会议场景中,多播技术可以使得发送端只需要发送一次数据包,所有接收端即可共享这份数据,从而极大地提高了网络资源的利用率,特别是在需要将一个节点的信号传输至多个节点的情况下,多播技术可以避免点对点...
应用层负责诸如HTTP、FTP、SMTP等应用协议,传输层主要涉及TCP和UDP,它们确保数据传输的可靠性或效率;互连网络层则通过IP协议处理数据包的路由;网络接口层管理实际网络媒体的数据传输。 HTTP协议是应用层中的...
在实际应用中,`inet_pton`常用于网络协议的编码,比如创建或解析TCP/UDP连接时的套接字地址。它也可以用于验证IP地址的有效性,因为尝试将非法格式的IP地址转换时,`inet_pton`会返回`false`。 总之,`inet_pton`...