这个标题有点唬人。
几个通信领域的专业名词,和自动驾驶仿真能有什么关系?
还真有。
这得从自动驾驶仿真界鼎鼎大名的软件-VTD-说起了。这个软件非常考验使用者对于整个仿真计算流程的理解,使用者首先需要知道该软件的整体框架,使用中也得随时准备徒手敲代码,遇到问题debug时脑海里要时刻演练数据流通的奥义。这个数据的流通,就是标题背后的故事了。
如果把VTD比喻为一本武林秘籍,那么修炼者要修炼好它,掌握数据的流通,就像疏导筋脉中的内力一样,走上七七好多个大周天,最终收于丹田(TaskControl),当修炼者需要打出一个招式(功能),那么首先需要的就是将内力(数据)导向某一个身体部位(进程)。这里面,内力(数据)从丹田(TaskCtrol)导向手脚(进程),都是需要特定的修炼手法(通信协议)的,稍有不适,就会走火入魔(死机)。
--个人理解,谨慎解读
但愿你看懂了,通信的重要性了。
软件中的进程和进程之间,甚至软件和硬件之间,进行通讯,一般都爱采用TCP协议和UDP协议。哎呀,说人话就是一种特殊的数据传输方式而已。
---------------------------
TCP 的全称是Transmission Control Protocol,传输控制协议。
TCP是面向连接的服务。在传输数据之前必须先建立连接,数据传送介绍后需要释放连接。
TCP一般用于文件传输、发送和接收邮件、远程登录等场景。
UDP 的全称是 User Datagram Protocol,用户数据报协议。
UDP在传送数据之前不需要先建立连接,远程主机在收到UDP报文以后,不需要给出任何确认。
虽然UDP不提供可靠的交付,但在某些情况下UDP确实是一种最有效的工作方式(一般用于即时通讯),比如语音、视频、直播等。
---------------------------
再来看一张图:
看图说话:
socket 其实就是操作系统提供给程序员操作「网络协议栈」的接口,说人话就是,你能通过socket 的接口,来控制协议找工作,从而实现网络通信,达到跨主机通信。
协议栈的上半部分有两块,分别是负责收发数据的 TCP 和 UDP 协议,它们俩会接受应用层的委托执行收发数据的操作。
协议栈的下面一半是用 IP 协议控制网络包收发操作,在互联网上传数据时,数据会被切分成一块块的网络包,而将网络包发送给对方的操作就是由 IP 负责的。
此外 IP 中还包括 ICMP 协议和 ARP 协议。
ICMP 用于告知网络包传送过程中产生的错误以及各种控制信息。
ARP 用于根据 IP 地址查询相应的以太网 MAC 地址。
IP 下面的网卡驱动程序负责控制网卡硬件,而最下面的网卡则负责完成实际的收发操作,也就是对网线中的信号执行发送和接收操作。
最后再来回答下标题的问题:
socket是对TCP/IP协议的封装,它的出现只是使得程序员更方便地使用TCP/IP协议栈而已。socket本身并不是协议,它是应用层与TCP/IP协议族通信的中间软件抽象层,是一组调用接口(TCP/IP网络的API函数)。
本文完。