前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试必备TCP三次握手

面试必备TCP三次握手

作者头像
沁溪源
发布2020-09-03 14:28:32
3750
发布2020-09-03 14:28:32
举报
文章被收录于专栏:沁溪源

目录

  • 概念
  • TCP三次握手

概念

在进入本篇文章正题之前,需要先了解一下关于TCP连接过程中使用的关键字含义。 序列号seq:标记数据段的顺序。 TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生; 给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。 确认号ack:期待收到对方下一个报文段的第一个数据字节的序号; 序列号表示报文段携带数据的第一个字节的编号;而确认号指的是期望接收到下一个字节的编号;因此当前报文段最后一个字节的编号+1即为确认号。 同步SYN:连接建立时用于同步序号。 当SYN=1,ACK=0时表示:这是一个连接请求报文段。若同意连接,则在响应报文段中使得SYN=1,ACK=1。 SYN=1表示这是一个连接请求,或连接接受报文。 SYN这个标志位只有在TCP建产连接时才会被置1,握手完成后SYN标志位被置0。 确认ACK:仅当ACK=1时,确认号字段才有效。ACK=0时,确认号无效。 终止FIN:表示释放一个连接。FIN=1,则表示发送方的报文段数据已经发送完毕,并请求断开连接。

TCP三次握手

在这里插入图片描述
在这里插入图片描述

第一次握手:客户端发送syn报文段;该报文段中不包含任何应用层数据,客户端将SYN置为1,随机产生报文段中第一个字节序列号seq=client_seq,并将该报文段封装到IP数据报中,发送到服务器,并进入SYN_SEND状态,等待服务器确认; 第二次握手:服务器收到syn数据报;从该IP数据中提取SYN报文段。服务器将SYN置为1,ACK=1;其次,服务器设置确认号ack=client_seq+1;最后,服务器随机产生自己的初始序列号seq=server_seq,即SYN+ACK包,此时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK数据报;客户端检查是否ack,ACK;如果正确,则客户端将ACK置为1,确认号ack=server_seq+1;序列号seq=client_seq+1;此时数据连接已经建立完成,将SYN=0;此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP连接都将被一直保持下去。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/06/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
  • 概念
  • TCP三次握手
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档