TCP 连接管理机制(一)——TCP三次握手详解 + 为什么要有三次握手

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

TCP是面向连接的协议,在通信之前需要先建立连接,其本质就是打开一个socket文件,这个文件有自己的缓冲区,如果要发送数据,上层把数据拷贝到发送缓冲区;如果是接收数据,OS直接把来自网络的数据拷贝到接收缓冲区里。

那么三次握手期间,Server和Client都做了哪些工作?以及为什么要有三次?不可以是一次?两次?四次?


目录

一、握手之前的准备工作

1、Server端

2、Client端

二、TCP三次握手

1、第一次握手

2、第二次握手

3、第三次握手

三、为什么需要三次握手?

1、原因一:三次是确认对方主机状态及收发能力的最小次数

2、原因二:降低被攻击的风险的最小次数

(1) 如果只有一次握手

(2) 如果只有两次握手

(3)如果是三次握手


一、握手之前的准备工作

三次握手开始的时刻就是,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(连接请求已发送)

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值