TCP三次握手,四次挥手

TCP三次握手

TCP协议 :

1。源端口 :当前的进程端口,2字节

2。目的端口:对方的端口 ,2字节

3。序号:客户端或者服务器端生成的随机数

4.确认序号:确认上一次发送给数据对方有没有收到

5.标志位

SYN:请求和对方建立连接

ACK:确认没问题 OK

FIN :请求端开连接

6.窗口大小 :接收端通知发送端 缓存剩余的容量,如果为0,发送端阻塞

三次握手的过程

1.服务器端启动监听 →listen();

2.客户端:发起连接→connect();

三次握手的发起端必须是客户端;

第一次握手:

客户端 :

1.将标志位SYN设为1 (其实发送的是整个块)

2 . 生成一个随机序号,int (32位);

服务器端:

1.收到了客户端的TCP协议解析

  SYN=1

  得到了随机序号, J

第二次握手:*客户端和服务器连接建立了

服务器端:

1.回复ACK,表示同意建立连接

2.ack=J+1,告诉客户端,你发送给我的一个字节的数据已经收到了,1字节代表连接请求;

3.服务器将TCP协议中的SYN=1,向客户端发送请求

4.服务器端也生成了一个随机序号,K;

客户端:

1.接受服务器回复的数据

  ACK 同意了客户端的连接请求

  SYN:服务器请求的客户端建立连接

  服务器端收到的数据字节数:ack-J=J+1 -J=1;

第三次握手:服务器和客户端建立了连接

客户端:

1。在TCP协议中将ACK设置为1 ,同意服务端连接请求

2.ack=K+1,告诉服务器,你给我发送的一个字节的数据收到了,1字节代表连接请求

服务器:

接受数据,解析TCP协议

  ACK=1;客户端同意了连接请求

  客户端收到的字节数:ack -K=K+1-K=1;

四次挥手的过程

//断开链接的过程,四次挥手完成之后,双向连接被双向断开

//断开连接的请求可以由客户端发起,也可以有服务器发起

//需要用到的标志位:FIN,ACK

  1. 图中是客户端先断开连接,其实服务器端先断开也可以

  2. 在程序中怎么断开连接

    调用close (通信的文件描述符)函数,连接断开

    在程序中服务器端和客户端程序都调用了close()函数,四次挥手就完成了

过程:

第一次挥手:

主动断开的连接的一方:

1.将TCP中的FIN标志位为设置为1

被动断开链接的一方:

1.接受对方请求,解析TCP协议

  FIN=1;

第二次挥手:**单向断开(断开方与被断开方断开)

被断开的一方:

1.同意对方的断开链接的请求,ACK =1;

2 确认序号:在对方发送的序号基础加一

主动断开链接的一方:

接受TCP协议解析

  检测是否ACK是否为1;

  检测发送对方的1字节数是否收到了

第三次挥手:

被断开的一方:

.将TCP中的FIN标志位为设置为1

发送序号K

主动断开的一方:

接受数据,解析TCP协议

FIN=1

第四次挥手:被断开的一方 与主动断开的一方 断开链接

主动断开链接的一方:

同意对方链接的请求 TCP 的ACK =1

计算确认序号,发送给对方

被动断开的一方:

接受TCP协议解析

  检测ACK==1

  检测发送给对方的1字节数是否收到了
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值