套接字
套接字指通讯双方在通讯时所使用的通讯点(Endpoint),通讯的双方经过通讯点来交换信息和数据。不一样类型的通讯会使用不一样的类型通讯点,好比对于电话通讯而言,通讯点就是电话号码和分机号码的组合,这时由于若是你想和朋友通话,就须要拨打你朋友的电话号码和分机号码。对于IP网络通讯而言,通讯点就是套接字,即两个进程在进行网络通讯的时候,他们经过套接字来交换信息和数据。服务器
和电话通讯相似,当一个进程想和另外一个进程进行网络通讯时,它必须知道另一个进程所在的目标机器IP地址,同时也必须有一种机制来标识目标机器上的进程,这种机制就是咱们前面章节提到的端口号,目标机器正是经过端口号才能肯定应该把接收到的数据发往哪个进程。也就是说套接字这种通讯点必须经过端口号标识和IP地址,另外因为网络通讯也有不一样类型,同一个端口号在使用不一样的传输层协议时含义是不同的,因此套接字还和传输层协议有关。网络
一个套接字包含:并发
一个已链接的TCP套接字对应以下:spa
【本地IP,端口,目标机IP,端口】线程
服务器能够分为迭代服务器和并发服务器
迭代服务器工做方式以下(UDP):进程
- 等待客户请求
- 当接受到客户请求时,处理该请求并把结果返回该客户
- 回到步骤1,继续等待下一个客户请求。
并发服务器的工做方式以下(TCP):服务器端
- 等待客户请求
- 当接收到客户请求,为该客户开启一个新的服务器实例(进程、线程等),而且由这个新的服务器实例来处理该客户的请求并把结果返回客户,以后该新的服务器实例就终止。
- 回到步骤一,继续等待下一个客户请求
TCP客户端与服务器交互过程
TCP服务器端链接套接字建立、关闭交互过程说明以下:List
- 服务器建立一个套接字。
- 服务器把本地套接字地址(本地IP地址和本地端口)绑定(Bing)到该套接字。客户端将使用在这里的绑定的套接字地址来链接到该服务器
- 服务器把该套接字置为等待状态,也叫(Listen)这时套接字也被称为监听套接字。
- 服务器开始接受(Accept)客户端的链接请求。若是这时没有链接求,则服务器就等待请求的到来;若是有链接请求,则服务器为该链接请求建立一个新的套接字,该新的套接字用来描述这个链接,既它对应于一个四元组:[本地IP地址,本地端口,远程IP地址,远程端口]。咱们把这个新的套接字被称为已链接套接字,以便于区分监听套接字。
- 服务器使用已经链接的套接字来接受来自客户端的数据,或者发送数据到客户端。
- 当完成和客户端的数据交互以后,服务器关闭套接字。
通常来讲,当服务器建立了已链接套接字后,会生成一个新的服务器实例(线程或进程等)。而后这个新的实例执行5,、6步,即处理和客户端的数据交互。请求
TCP客户端
TCP客户端链接套接字建立,关闭过程说明通信
- 客户端建立一个套接字
- 客户端把本地套接字地址(本地IP地址和本地端口)绑定到套接字。注意,这个步骤对于客户端来讲不是必须的。若是执行的话就按四元组中的地址分配,若是没有执行则系统自动分配地址。
- 客户端使用在步骤1中建立的套接字来链接(Connect)到一个远程套接字的地址(远程IP地址和远程端口),即服务器的监听套接字地址。在链接成功以后,这个链接将由客户端套接字来描述,这个客户端套接字也对应于一个四元组:[本地IP地址,本地端口,远程IP地址,远端端口]。此时,这个客户端套接字也成为一个链接套接字。
- 客户端使用已链接套接字发送来发送数据到服务器,或者接受来自服务器的数据。
- 当完成和服务器的数据交互以后,客户端关闭链接套接字。
这整个过程都只有一个套接字和一个客户端实例