TCP是面向连接的协议,在通信之前需要先建立连接,其本质就是打开一个socket文件,这个文件有自己的缓冲区,如果要发送数据,上层把数据拷贝到发送缓冲区;如果是接收数据,OS直接把来自网络的数据拷贝到接收缓冲区里。
那么三次握手期间,Server和Client都做了哪些工作?以及为什么要有三次?不可以是一次?两次?四次?
目录
一、握手之前的准备工作
三次握手开始的时刻就是,Client端调用connect函数连接 Server端,此时需要有个前提条件就是Server端的套接字要处在监听状态。
1、Server端
第一步,调用Socket函数创建通信套接字。其本质就是打开用于通信的socket文件;
第二步,绑定服务器IP地址和端口号。其实就是将打开的socket文件与存放地址信息的sockaddr_in 结构体绑定,方便对方能够找到这个文件
第三步,调用listen函数将套接字设为监听状态。可以理解为设置文件的读写权限,即允许other读写;

2、Client端
站在客户端的角度其实是认为服务端是时刻准备好的,不然也不会主动发起连接。所以Client端只要调用Socket函数创建通信套接字,即打开用于通信的socket文件,随后就可以调用connect函数连接服务端了。

注意:作为主动连接别人的一方,必须要知道你要连谁,即对方的IP地址和端口号;但是你自己无需主动绑定IP地址和监听,因为客户端一般不会被其他主机连接。就好比你是送快递的,你要知道客户的住址;但是客户没必要知道你的住址。
二、TCP三次握手
1、第一次握手
客户端主动调用 connect函数的时候,就是发起第一次握手,表明Client端请求和Server端建立连接。发送的报文携带SYN标志位。
客户端状态 : SYN_SENT(连接请求已发送)


TCP的三次握手过程确保了连接的可靠建立,防止了恶意连接请求对服务器资源的消耗。在握手过程中,客户端和服务器分别确认对方的主机状态及收发能力,同时避免了同步洪水攻击。三次握手是最小次数的确认机制,既能保证连接的成功建立,又降低了被攻击的风险。
最低0.47元/天 解锁文章
2674





