进程、端口与套接字
话不多说,直接入题:
进程:
具有独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的独立单位。
如一个QQ对应一个进程。
端口(端口有许多种,这里当然说的是协议端口):
一个IP地址可以有65536个端口。
本地操作系统会给那些有需求的进程分配协议端口,每个协议端口由一个正整数标识,如:80,139,445等等。
套接字:
也称应用程序编程接口(Application Programming Interface,API)。
套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口。
作用:通信时其中一个网络应用程序将要传输的一段信息写入它所在主机的 Socket中,该 Socket通过与网络接口卡(NIC)相连的传输介质将这段信息送到另外一台主机的 Socket中,使对方能够接收到这段信息。
那么两主机通信流程概括起来就是(这里就只关注应用层):
前提:发送主机与接收主机以建立连接。
1.发送主机中的进程想发送信息了,于是启用了一个套接字。(说个题外话,若运输层使用的是TCP协议,则套接字由源ip地址、源端口号、目的ip地址、目的端口号标识;若运输层使用的是UDP协议,则这个套接字由目的ip地址、目的端口号标识)。
2.发送主机将报文(应用层的信息分组称为报文)通过这个套接字送到下游。
3.下游将报文运到接收主机的套接字,若合适则接收主机中的接收进程会对该报文进行处理。
另外我也看到一篇写的不错的文章:深入浅出理解套接字