服务基础流程怎么写

服务基础流程怎么写,第1张

Web服务基础

一、HTTP简介


HTTP是超文本传输协议的缩写,即HTML文件传输协议。HTTP是应用层协议,它和其他应用层协议一样,是为了更好地完成某一类实际应用协议而设计的,在客户室空运行的一个应用软件就会完成它的功能。HTTP是一个协议标准,记录在文本文档上,真正按照HTTP协议进行通信的是完成HTTP的过程。我们知道,HTTP协议的通信是基于C/S框架的,HTTP协议的服务器端完成过程包括httpd、nginx等。客户端完成过程主要是网页浏览器,如Firefox、InternetExplorer、Googlechrome、Safari、Opera等。此外,客户端命令行工具还包括elink、crul等。Web服务是基于TCP的,所以为了更好地随时随地响应客户端请求,必须在端口80/TCP对Web服务器进行监控。客户端计算机浏览器可以根据HTTP协议与Web服务器通信。



二。IANA定义的端口


正如我们所知,为了更好地使所有客户的计算机浏览器程序能够与他们通信,Web服务器通常必须在端口80进行监控。当客户端在计算机浏览器中输入URL时,例如www.baidu.com,默认设置端口是80。此端口由IANA(互联网编号分配机构)分配。另外,IANA由ICANN管理,其定义的端口如下:

0-1023:知名端口永久分配给固定应用。该端口的应用必须通过专门的应用申请注册,并且属于正确的端口,比如Webservices的80/tcp,FTP的21/tcp。这种端口只能由网站管理员打开,由进程监控,而单个用户没有管理权限。

1024-41951:也是申请注册的港口,但是规定不是特别严格。这个端口被分配给程序流,申请注册为应用,但是这个应用不是很常见,比如mysql服务项目的3306/tcp,memcache的11211/tcp。

41952:客户端程序进程任意申请的端口是动态端口还是独占端口。在Linux上,此类端口的类别在/proc/sys/net/IPv4/IP_local_port_range中定义。



三。BSD套接字


BSDSocket最初是BSDUnix系统软件的一个进程通信系统。Socket是socket,作为IPC(进程间通信)的一个完成,它允许位于不同服务器(或同一服务器)上的进程间通信系统。插座可以理解为“电源插座”。如果将电缆插入这个“电源插座”,就可以进行通信。socket本质上应该是socketAPI,在核心中封装了与Socket通信相关的通信关键点。即封装了通信子网(网络层、传输层、数据链路层、物理层)要完成的实际通信关键点。程徐苑可以根据启用SocketAPI编写能够完成通信网络的程序流程。


Socket描述了IP地址和端口。不同的服务项目匹配不同的端口号。每个服务项目必须在一个端口上关联和监控,并且应该打开一个套接字。客户端可以根据套接字在服务器上创建一个与套接字的连接,这样两者就可以完成通信。大家都把通信中的一对套接字称为连接套接字。一般来说,Socket是网络层和网络层之间的高速公路桥梁,如图所示。


如前所述,socket是对IP地址和端口号的描述,一个IP地址和一个端口就是一个Socket。根据Socket应用在网络层的协议,可以分为以下三类:

(1)Sock_stream:TCP套接字

(2)Sock_dgram:UDP套接字

(3)Sock_raw:原始套接字


这里的rawsocket是指在不应用所有网络层协议(如tcp、udp等)的情况下,根据推送或接受IP数据文件立即完成通信的一种方法。),即网络层立即绕过tcp/udp之类的协议,立即按照IP数据文件进行通信。


根据Socket监听到的详细地址文件格式,Socket域可以分为:

(1)af_inet:addressfamily,IPv4详细地址文件格式

(2)af_inet6:addressfamily,IPv6详细地址文件格式

(3)AF_Unix:AddressFamily,同一服务器上不同进程根据套接字通信使用的详细地址文件格式。这种详细地址的表达式是socket文档(Linux中的一切都是文档);这种详细地址也叫Unix_SOCK。


接下来详细介绍TCP客户端和服务器如何根据TCPsocket进行通信。如图所示。

至于TCP服务器,首先必须开启socket()函数,向内核申请注册建立TCPsocket(IP地址端口);一旦成功处理了应用程序,就需要根据bind()函数将程序流关联到这个socket关联后必须启用listen()函数,这样才能在这个socket上监控服务器进程,socket可以连接,但此时不能接受客户端请求;只有在启用了accept()函数之后,TCP服务器进程才开始接受客户端请求,并且在客户端请求到达之前一直保持阻塞状态。此时,TCP服务器进程的情况是LISTEN。


对于TCP客户端,必须启用socket()函数来建立套接字,但不需要监控。当客户端向服务器发出连接请求时,启用connect()函数,其中括号内的主要参数包括对方服务器的IP地址和端口;如果服务器接受连接请求,它们相互之间进行tcp三次握手,并创建一个双虚拟链路。此时客户端和服务器之间的socket建立,后续的http请求/响应消息的格式都是按照之前创建的虚拟链接推送的。


在Linux上,创建连接后,客户机可以在与服务器连接的套接字文件上填写所需的数据信息。加载数据信息相当于向服务器传输数据,整个过程是根据启用write()函数来进行的。而服务器可以从与客户端连接的socket文件中获取数据,也就是启用read()函数。这整个过程相当于接收客户端请求的数据信息,两者之间实际的通信关键点是由最底层的通信子网进行的。服务器加载客户端推回的请求消息格式后,解析请求,解析请求并构建响应消息格式,然后根据启用的write()函数将响应消息格式加载到socket文件中,并根据通信子网传输到客户端的socket文件中,这样客户端就可以根据这个socket文件获得服务器的响应消息格式。如此循环系统重复数次,直到客户端请求断开(一般是客户端主动请求断开,服务器在应用保活接口模式时也可能主动请求断开)。


一旦客户端请求断开连接,TCP服务器愿意通过启用read()函数,根据加载到socket文件中的断开连接请求数据信息断开连接。




欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/777667.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-03
下一篇 2022-05-03

发表评论

登录后才能评论

评论列表(0条)

保存