转载自:
网络编程懒人入门(十四):到底什么是Socket?一文即懂!
1、引言
对于即时通讯IM这方面的应用层开发者来说,跟计算机网络打道的其实是各种API接口。
本篇文章就来聊一下网络应用程序员最熟悉的Socket这个东西,抛开生涩的计算机网络理论,从应用层的角度来理解到底什么是Socket。
对于 Socket 的认识,本文将从以下几个方面着手介绍:
-
1)Socket 是什么;
-
2)Socket 是如何创建的;
-
3)Socket 是如何连接的;
-
4)Socket 是如何收发数据的;
-
5)Socket 是如何断开连接的;
-
6)Socket 套接字的删除等。
2、Socket 是什么
首先说明下,socket并非互联网协议,它只是基于互联网协议,连接应用层和传输层之间的套件,翻译为“套接字”,使两层建立联系,便于传输数据,这个套件就是 Socket,可以认为它就是一种通信模式
一个数据包经由(1)应用程序产生,进入到(2)协议栈中进行各种报文头的包装,然后操作系统调用(3)网卡驱动程序指挥硬件,把数据发送到对端主机。
整个过程的大体的图示如下:
我们大家知道,协议栈(互联网协议)其实是位于操作系统中的一些协议的堆叠,这些协议包括 TCP、UDP、ARP、ICMP、IP等。
通常某个协议的设计都是为了解决特定问题的,比如:
-
1)TCP 的设计就负责安全可靠的传输数据;
-
2)UDP 设计就是报文小,传输效率高;
-
3)ARP 的设计是能够通过 IP 地址查询物理(Mac)地址;
-
4)ICMP 的设计目的是返回错误报文给主机;
-
5)IP 设计的目的是为了实现大规模主机的互联互通。
应用程序比如浏览器、电子邮件、文件传输服务器等产生的数据,会通过传输层协议进行传输。而应用程序是不会和传输层直接建立联系的,而是有一个能够连接应用层和传输层之间的套件,这个套件就是 Socket。
在上面这幅图中,应用程序包含 Socket 和解析器,解析器的作用就是向 DNS 服务器发起查询,查询目标 IP 地址(关于DNS请见《理论联系实际,全方位深入理解DNS》)。
应用程序的下面:就是操作系统内部,操作系统内部包括协议栈(互联网协议),协议栈是一系列协议的堆叠。
操作系统下面:就是网卡驱动程序,网卡驱动程序负责控制网卡硬件,驱动程序驱动网卡硬件完成收发工作。
在操作系统内部有一块用于存放控制信息的存储空间,这块存储空间记录了用于控制通信的控制信息。其实这些控制信息就是 Socket 的实体,或者说存放控制信息的内存空间就是Socket的实体。