作为后端开发人员,您应该详细了解TCP、HTTP、Socket和Socket连接池


浏览:428 次

前言:作为开发人员,我们经常听到HTTP协议、TCP/IP协议、UDP协议、套接字、套接字长连接、套接字连接池等词汇。然而,并不是每个人都能理解它们之间的关系、区别和原理。本文从网络协议基础到套接字连接池,一步一步地解释它们之间的关系。

这篇文章很长。我建议你收集一些点赞并观看。文章结尾有惊喜~~

七层网络模型

首先,让我们从网络通信的分层模型开始:七层模型,也称为OSI(开放系统互连)模型。从下至上,它分为物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。所有与通信相关的问题都离不开它。下图介绍了与每个层相对应的一些协议和硬件。

从上图中,我知道IP协议对应于网络层,TCP和UDP协议对应于传输层,HTTP协议对应于应用层。OSI没有套接字,那么什么是套接字?稍后我们将结合代码详细介绍它。

TCP和UDP连接

至于传输层TCP和UDP协议,我们在平时可能会遇到很多问题。有人说TCP是安全的,UDP不安全,UDP传输比TCP更快。为什么?让我们从TCP连接建立的过程开始,然后解释UDP和TCP之间的区别。

TCP的三次握手和四次中断

我们知道,建立TCP连接需要三次握手,而断开连接需要四次断开。三次握手和四次分手是怎么做的。

第一次握手:建立连接。客户端发送连接请求消息段,将SYN位置设置为1,将序列号设置为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;

第二次握手:服务器从客户端接收SYN消息段,需要确认SYN消息,并将确认号设置为x+1(序列号+1);同时,您还需要发送SYN请求信息,将SYN位置设置为1,序列号设置为y;服务器将所有上述信息放入一个消息段(即SYN+ACK消息段)并将其发送给客户端。此时,服务器进入SYN_ RECV状态;

第三次握手:客户端从服务器接收SYN+ACK消息段。然后将确认号设置为y+1,并将ACK消息段发送到服务器。发送此消息段后,客户端和服务器都进入建立状态,并完成三次TCP握手。

三次握手后,客户端和服务器可以开始传输数据。以上是TCP三重握手的一般介绍。通信后,客户端和服务器将断开连接,这需要四次中断确认。

第一次拆分:主机1(客户端或服务器),设置序列号和确认号,并向主机2发送FIN消息段;此时,主机1进入FIN_ WAIT_1状态;这意味着主机1没有要发送给主机2的数据;

第二次中断:主机2接收主机1发送的FIN消息段,并向主机1返回ACK消息段。确认号为序号加1;主机1进入FIN_ WAIT_ 2状态;主机2告诉主机1我“同意”您的关机请求;

第三次中断:主机2向主机1发送FIN消息段,请求关闭连接,主机2同时进入LAST ACK状态;

第四次中断:主机1接收主机2发送的FIN消息段,向主机2发送ACK消息段,然后主机1进入TIME_ WAIT状态;主机2在接收到主机1的ACK消息段后关闭连接;此时,主机1在等待2MSL后仍然没有收到回复,这表明服务器已正常关闭。主机1也可以关闭连接。

可以看出,tcp请求的建立和关闭至少进行了7次通信,这不包括数据通信,而UDP不需要三次握手和四次中断。

分享更多关于Linux后端开发网络的基本原理的知识,学习、改进和点击获取,并改进技术堆栈。知识点包括Linux、Nginx、ZeroMQ、MySQL、Redis、线程池、MongoDB、ZK、Linux内核、CDN、P2P、epoll、Docker、TCP/IP、协程、DPDK等。

相关资讯:
APP项目开发流程

APP项目开发流程

查看
软件外包开发过程

软件外包开发过程

查看
软件外包项目开发过程

软件外包项目开发过程

查看
如何找到一家满意的软件项目外包公司

如何找到一家满意的软件项目外包公司

查看
寻找优质APP外包公司

寻找优质APP外包公司

查看