HTTP、TCP、IP以及socket之间关系
要说这几个之间的关系,就不得不说网络七层协议(OSI),它是一个开放性的通信系统互连参考模型。OSI模型有7层结构,每层都可以有几个子层。 OSI的7层从上到下分别是 7 应用层 6 表示层 5 会话层 4 传输层 3 网络层 2 数据链路层 1 物理层 ;其中高层(即7、6、5、4层)定义了应用程序的功能,下面3层(即3、2、1层)主要面向通过网络的端到端的数据流。
HTTP协议对应7应用层,TCP协议对应4传输层,IP协议对应3网络层,而socket是对TCP/IP协议的封装和应用。socket本身并不是协议,而是一个调用接口(API),它起到了应用层与传输层之间桥梁的作用,通过它我们才能使用TCP/IP协议。因此我们从客户端请求服务器上的资源时,大致经过了如下图1流程。
在任意时刻,计算机都可以有几条TCP连接处于打开状态。从图中可以看出,TCP是通过IP地址和端口号来保证连接(connect)正确的。IP地址可以将你连接到正确的计算机,而端口号则可以将你连接到正确的应用程序上去。因此TCP连接是通过4个值来识别的。<源IP地址、源端口号、目的IP地址、目的端口号>,这四个值一起唯一定义了一条连接。两条不同的TCP连接不能拥有4个完全相同的地址组件值。
TCP socket
通过上面的了解,实现TCP网络编程,其实质就是实现socket。
而socket之间的连接过程可以大致分为三个步骤:服务器监听,客户端请求,连接确认。
- 服务器监听:是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。
- 客户端请求:是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
- 连接确认:是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。
参考文章: