TCP/IP及Socket工作原理简单理解

TCP/IP及Socket工作原理简单理解

今天就来说一下socket通信的基本原理。

一、 TCP/IP

从字面意思来看TCP/IP是TCP和IP协议的合称,但实际上TCP/IP协议是指因特网整个TCP/IP协议族。不同于ISO模型的七个分层,TCP/IP协议参考模型把所有的TCP/IP系列协议归类到四个抽象层中

每一层名字 协议名称
应用层: TFTP,HTTP,SNMP,FTP,SMTP,DNS,Telnet 等等
传输层: TCP,UDP
网络层: IP,ICMP,OSPF,EIGRP,IGMP
数据链路层: SLIP,CSLIP,PPP,MTU

TCP/IP及Socket工作原理简单理解
TCP/IP及Socket工作原理简单理解

二、 socket通信流程

socket是"打开—读/写—关闭"模式的实现,以使用TCP协议通讯的socket为例,其交互流程大概是这样子的:
TCP/IP及Socket工作原理简单理解
服务器根据地址类型(ipv4,ipv6)、socket类型、协议创建socket

1、服务器为socket绑定ip地址和端口号

2、服务器socket监听端口号请求,随时准备接收客户端发来的连接,这时候服务器的socket并没有被打开

3、客户端创建socket,客户端打开socket,根据服务器ip地址和端口号试图连接服务器socket

4、服务器socket接收到客户端socket请求,被动打开,开始接收客户端请求,直到客户端返回连接信息。这时候socket进入阻塞状态,所谓阻塞即accept()方法一直到客户端返回连接信息后才返回,开始接收下一个客户端谅解请求

5、客户端连接成功,向服务器发送连接状态信息

6、服务器accept方法返回,连接成功

7、服务器端和客户端分别建立输入输出流,进行数据交流

8、客户端关闭,服务器端关闭

三、HTTP链接的特点

1.1什么是HTTP

HTTP协议即超文本传送协议(Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种应用。

HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响应,在请求结束后,会主动释放连接。从建立连接到关闭连接的过程称为“一次连接”。
  HTTP协议永远都是客户端发起请求,服务器回送响应。见下图:
 TCP/IP及Socket工作原理简单理解
这样就限制了使用HTTP协议,无法实现在客户端没有发起请求的时候,服务器将消息推送给客户端。

HTTP协议是一个无状态的协议,同一个客户端的这次请求和上次请求是没有对应关系。

1.2工作流程

一次HTTP操作称为一个事务,其工作过程可分为四步:

1)首先确保服务器端待命的状态下(server端运行中),客户端向服务器端发送请求,只要单击某个超级链接,HTTP的工作开始。

2)建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。

3)服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。

4)客户端接收服务器所返回的信息(H5页面)通过浏览器显示在用户的显示屏上,然后客户机与服务器断开连接

如果在以上过程中的某一步出现错误,那么产生错误的信息将返回到客户端,有显示屏输出(比如404错误,服务器错误)(有些网站页面一直显示不出来,或者显示防火墙……可以试试其他浏览器,或者开发环境的内部自带浏览器再重新访问)。对于用户来说,这些过程是由HTTP自己完成的,用户只要用鼠标点击,等待信息显示就可以了。

1.3三次握手

在TCP/IP协议中,TCP协议通过三次握手建立一个可靠的连接

第一次握手:客户端尝试连接服务器,向服务器发送syn包(同步序列编号Synchronize Sequence Numbers),syn=j,客户端进入SYN_SEND状态等待服务器确认

第二次握手:服务器接收客户端syn包并确认(ack=j+1),同时向客户端发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态

第三次握手:第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手

定睛一看,服务器socket与客户端socket建立连接的部分其实就是大名鼎鼎的三次握手
TCP/IP及Socket工作原理简单理解
如果想继续深入了解HTTP协议,可以阅读下方链接:
https://www.cnblogs.com/chenliyang/p/6558756.html