1.UDP协议
概念:
除了 TCP 协议外,还有 UDP 协议,想必大家都听过说,UDP 是 User Datagram Protocol 的简称,中文名是用户数据报协议,是一种无连接、不可靠的协议,同样它也是工作在传顺层。它只是简单地实现从一端主机到另一端主机的数据传输功能,这些数据通过 IP 层发送,在网络中传输,到达目标主机的顺序是无法预知的,因此需要应用程序对这些数据进行排序处理,这就带来了很大的不方便,此外,UDP 协议更没有流量控制、拥塞控制等功能,在发送的一端,UDP 只是把上层应用的数据封装到 UDP 报文中,在差错检测方面,仅仅是对数据进行了简单的校验,然后将其封装到 IP 数据报中发送出去。而在接收端,无论是否收到数据,它都不会产生一个应答发送给源主机,并且如果接收到数据发送校验错误,那么接收端就会丢弃该UDP 报文,也不会告诉源主机,这样子传输的数据是无法保障其准确性的,如果想要其准确性,那么就需要应用程序来保障了。
特点:
- 无连接、不可靠
- 尽可能提供交付数据服务,出现差错直接丢弃,无反馈
- 面向报文,发送方的udp拿到上层数据直接添加个udp首都,然后进行效验后就递交给IP层,而接受的一方在接收到UDP报文后简单进行效验,然后直接去除数据递交给上层应用
- 速度快,因为 UDP 协议没有 TCP 协议的握手、确认、窗口、重传、拥塞控制等机制,UDP 是一个无状态的传输协议,所以它在传递数据时非常快,即使在网络拥塞的时候 UDP 也不会降低发送的数据。
UDP 虽然有很多缺点,但也有自己的优点,所以它也有很多的应用场合,因为在如今的网络环境下,UDP 协议传输出现错误的概率是很小的,并且它的实时性是非常好,常用于实时视频的传输,比如直播、网络电话等,因为即使是出现了数据丢失的情况,导致视频卡帧,这也不是什么大不了的事情,所以,UDP协议还是会被应用与对传输速度有要求,并且可以容忍出现差错的数据传输中。
2.网络通信
网络通信本质上是一种进程间通信,是位于网络中不同主机上的进程之间的通信,属于 IPC 的一种, 通常称为 socket IPC,在前面给大家简单地提到过,如图 10.2.1 中所示。所以网络通信是为了解决在网 络环境中,不同主机上的应用程序之间的通信问题。
大概可以分为三个层次,如下所示:
- 硬件层:网卡设备,收发网络数据
- 驱动层:网卡驱动(Linux 内核网卡驱动代码)
- 应用层:上层应用程序(调用 socket 接口或更高级别接口实现网络相关应用程序)
图 29.1.1 网络连接
在硬件上,两台主机都提供了网卡设备,也就满足了进行网络通信最基本的要求,网卡设备是实现网络数 据收发的硬件基础。并且通信的两台主机之间需要建立网络连接,这样两台主机之间才可以进行数据传输,譬如 通过网线进行数据传输。
网络数据的传输媒介有很多种,大体上分为有线传输(譬如双绞线网线、光纤等)和 无线传输(譬如 WIFI、蓝牙、ZigBee、4G/5G/GPRS 等),PC 机通常使用有线网络,而手机等移动设备通 常使用无线网络。
在内核层,提供了网卡驱动程序,可以驱动底层网卡硬件设备,同时向应用层提供 socket 接口。 在应用层,应用程序基于内核提供的 socket 接口进行应用编程,实现自己的网络应用程序。需要注意 的是,socket 接口是内核向应用层提供的一套网络编程接口,所以我们学习网络编程其实就是学习 socket 编 程,如何基于 socket 接口编写应用程序。 除了 socket 接口之外,在应用层通常还会使用一些更为高级的编程接口,譬如 http、网络控件等,那么这 些接口实际上是对 socket 接口的一种更高级别的封装。
在正式学习 socket 编程之前,我们需要先了解一些 网络基础知识,为后面的学习打下一个理论基础。 网络通信知识庞大,其中涉及到一大堆的网络协议(TCP/IP 协议族)。
3.通信方式
单工:单工通信只支持信号在一个方向上传输,任何时候不能改变信号的传输方向。
为保证正确传送数据信号,接收端要对接收的数据进行校验,若校验出错,则通过监控信道发送请求重发的信号
用途:适用于数据收集系统、如气象数据的收集、电话费的集中计算等
半双工:允许信号在两个方向上传输、但某一时刻只允许信号在一个信道上单向传输
因此,半双通信实际上是一种可切换方向的单工通信
此方式适用于闻讯、检索、科学计算等数据通信系统
示例;对讲机,不允许同时进行讲话
全双工;全双工通信允许数据同时在两个方向上传输,既有两个信道,因此允许同时进行双向传输
要求双方都有接受和发送能力
全双工通信效率高,控制简单,但造价更高,示例:电话