前言
基于C/S架构。
Web Service:应用层协议。(http,https)
解决某类具体应用,借助应用空间的某类应用程序来负责完成。
客户端:浏览器 -->应用层协议:http-->web服务端(基于套接字进行通信)
========================================分割线=============================================
网络之间的通信过程需要依靠套接字文件(IP/PORT)进行通信,应用层中的应用程序希望通过套接字方式与网络中其他非本机的进程通信时,应用程序需要进行系统调用将内核空间的功能提供给应用程序,从而应用程序就能通过内核空间的传输层、网络层、数据链路层从而到达目标主机的服务器。
如图:
BSD Socket(套接字):IPC的一种实现,允许位于不同主机(也可以是同一主机)上的进程之间进行通信;
Socket API(封装了内核中的socket通信相关的系统调用)
根据套接字的协议分类:
SOCK_STREAM: tcp套接字
SOCK_DGRAM: UDP套接字
SOCK_RAW:raw套按字
根据套按字所使用的地址格式分类,Socket Domain:
AF_INET:Address Family,IPv4
AF_INET6:ipv6
AF_UNIX:同一主机上的不同进程间基于socket套接字通信使用的一种地址Unix_SOCK
在通信过程中服务器端也会事先通过层层的系统调用从内核中调用某个众所周知的端口,并进入监听状态等待客户端与之建立连接。
如图:
这里就会涉及到客户端与服务端连接时的三次握手以及断开连接时的四次断开。
三次握手:
①客户端发送请求给服务端,服务器端接收请求并响应,此为第一次握手。
②服务器端响应请求并发送给客户端,此为第二次握手。
③客户端接收到服务器端的请求并响应给服务端,此为第三次握手。
三次握手后客户端和服务器端就建立了连接,可以进行多次通信过程。
(注:我们可以认为客户端向服务端发送请求以及服务端向客户端发送请求并不在一条传输链路上,当然,这只是一种逻辑概念,并不代表真的存在这两条链路,这样理解也能帮助我们理解四次断开的过程。)
如图
四次断开:
①客户端发送断开请求,服务器端接收请求,此为第一次断开。
②服务器端响应请求并发送断开请求给客户端,此为第二次断开。
③客户端收到服务器端断开请求,此为第三次断开。
④客户端再响应给服务器端,此为四次断开。
(我们可以将断开过程理解为客户端与服务器端断开,以及服务器端与客户端断开连接,如上文提到的断开的两次不同的传输链路)
如图
TCP协议的特性:
建立连接:三次握手;
将数据打包成段:校验和(CRC32)
确认、重传及超时;
排序:逻辑序号;
流量控制:滑动窗口算法;
拥塞控制:慢启动和拥塞避免算法
TCP FSM(TCP 的有限状态机制): CLOSED, LISTEN,SYN_SENT, SYN_RECV, ESTABLISHED, FIN_WAIT1, CLOSE_WAIT, FIN_WAIT2, LAST_ACK, TIMEWAIT,