我们知道,多数的应用程序是由通信进程对组成,如C/S架构的程序客户端C向服务端S发送请求报文并从S端接收返回的数据,则从一个进程向另一个进程发送和接受的报文必须经过下面的网络,所以套接字便应用而生,进程通过一个套接字(软件接口)向网络发送报文和接收报文。
可能这样解释还是比较抽象,我们先来看一下套接字的结构。
IP地址:端口号
没错,一个套接字结构是由一个IP地址和一个端口号构成的,一个进程可以比作一栋房子,套接字就是他的门,一个进程要向另一台主机的进程发送报文时,他就把数据推出这个门(套接字),随后这两个进程通信都通过这个特定的门,当然接收端也有一个这样的门。理解了这个再返回去看上面那段话会不会好接受一点。
通俗的理解后,我们看一下套接字在TCP/IP协议栈中的位置
套接字是同一台主机内应用层和传输层之间的接口。
我们知道,IP是在网络层,端口是在传输层定义的,那这里的IP地址和端口号是怎么回事,这里不要混淆,网络层确定的是数据包的源目IP地址,传输层确定端口号是数据包在接收主机上这个数据包应该交给哪个进程,如果上面那个实例中房子里的进程要发送的是一个快递包,传输层和网络层定义的是包裹上面的写的地址和签收人,而套接字的IP和端口号并没有规定在数据报文里面,而是规定在一个门上,面向的对象是不一样的,一个面向数据包,一个面向进程,一定要注意区分。