TCP建立连接的三次握手
TCP建立连接的三次握手
TCP头的构成
- TCP建立连接的过程就是三次握手,三次握手成功完成,TCP连接就建立了。在三次握手之前先看一下TCP报文中的TCP头由哪些部分组成。
上图中有几个字段需要重点说明一下:
1)源端口和目标端口:源端口是该包数据发送者的端口,目标端口是这包数据要发送到的目的端口。
2)(包)序号:当前数据包的包序号Seq序号,占4字节(32bit),用来标识从TCP源端向目的端已经发送了多少字节的数据,发起方发送数据时对此进行标记。包序号的最大值是65535,如果达到最大值,则会从0开始重新计数。
3)确认号:Ack序号,占4字节(32bit),只有ACK标志位为1时,该确认序号字段才有效。在TCP中,接收端收到发送端发来的 数据后会给客户端回一个ACK确认包,确认收到数据了,这就是TCP的ACK机制。
4)标志位:
共6个,即URG、ACK、PSH、RST、SYN、FIN等,用来标记该包的类型如下:
1、URG紧急:当 URG = 1 时,表明此报文段中有紧急数据,是高优先级的数据,应尽快发送,不用在缓存中排队。2、ACK确认:仅当 ACK = 1 时确认号字段才有效,当 ACK = 0 时确认号无效。TCP 规定,在连接建立后所有传送的报文段都必须把 ACK 置为 1。3、PSH推送:接收方收到 PSH = 1 的报文段时,就直接发送给应用进程,而不用等到整个缓冲区都填满了后再向上传送。4、RST复位:当 RST = 1 时,表明 TCP 连接中出现了严重错误(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立传输连接。5、SYN同步:SYN = 1 表示这是一个连接请求或连接接受报文。当 SYN = 1 而 ACK = 0 时,表明这是一个连接请求报文段。对方若同意建立连接,则应在响应的报文段中使 SYN = 1 且 ACK = 1。6、FIN终止:用来释放一个连接。当 FIN = 1时,表明此报文段的发送发的数据已发送完毕,并要求释放运输连接。
在我们使用wireshark抓包并分析数据包时,可以使用这些标记位作为过滤条件过滤出对应类型的包,比如使用tcp.syn1过滤出发起三次握手的SYN包,使用tcp.rst1过滤出RST包。
三次握手的流程
TCP三次握手,是指建立一个TCP连接时,客户端和服务器一共发送3个包完成连接的建立。三次握手的目的是连接服务器指定端口,建立TCP连接,并同步连接双方的序列号和确认号并交换 TCP 窗口大小等信息。在socket编程中,客户端执行connect接口去连接目标IP和端口,触发三次握手。
三次握手的示意图如下:
第一次握手:
客户端发送一个TCP的SYN标志位置1的包,指明客户打算连接的服务器的端口,并将包的序号设置1。
第二次握手:
服务器收到客户端发来的SYN包,给客户端回ACK确认包,包中的SYN标志位和ACK标志位设置为1,并将ACK确认号设置为1。
第三次握手:
户端收到服务器的ACK包,客户端给服务器发送一个ACK确认包,包中的SYN标志位设置为0,ACK标志位设置为1,并把包中的SEQ号设置为1,把ACK号设置为1。
TCP建立连接的三次握手相关推荐
- startupinfo为什么需要初始化_为什么 TCP 建立连接要三次握手
为什么这么设计(Why's THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点.对具体实现造成的影响 ...
- 为什么TCP建立连接需要三次握手
为什么TCP建立连接需要三次握手 很简单,因为TCP的目的是相对高效地建立可靠的连接. 虽然说2次握手,请求方就已经能够确认双方路径已经没有问题了.但是接受方这边接收到的信息却仅仅是,你发起了建立连接 ...
- mobaxterm为什么无法连接_为什么 TCP 建立连接需要三次握手
为什么这么设计(Why's THE Design)是一系列关于计算机领域中程序设计决策的文章,我们在这个系列的每一篇文章中都会提出一个具体的问题并从不同的角度讨论这种设计的优缺点.对具体实现造成的影响 ...
- TCP建立连接『三次握手』
三次握手 TCP建立连接 TCP 是面向连接的协议,所以使用 TCP 前必须先建立连接,而建立连接是通过三次握手而进行的. 面试回答: TCP/IP协议是传输层一个面向的连接的安全的协议,三次握手的协 ...
- TCP建立链接的三次握手
TCP建立链接的三次握手 TCP是面向链接的协议,该协议主要是为应用层服务的,比如说FTP,HTTP等. 而TCP建立链接使用了三次握手. TCP报文段的头部格式如下: www.2cto.com ...
- TCP建立连接三次握手及其断开过程
TCP是一个面向连接的服务,也就是在数据通信之前,发送端需要建立连接.等数据发送之后,就要断开连接. 1. TCP建立连接 TCP建立连接需要三次握手.建立的过程如下: 2. TCP断开连接 转载于: ...
- TCP连接,三次握手问题
参考引用 Waking-up--github 面向信仰编程 一.为什么TCP建立连接需要三次握手 什么是连接:用于保证可靠性和流控制机制的数据,包括 Socket.序列号以及窗口大小. 首要原因:为了 ...
- 唤醒手腕 TCP/IP 协议进行三次握手、四次挥手建立连接详细介绍
访问域名的 IP 地址,User-Agent(一般是指浏览器)会以一个随机端口(1024 < 端口 < 65535)向服务器的 WEB 程序(常用的有 Apache(httpd), ngi ...
- TCP的连接和释放连接(三次握手和四次挥手的过程)
参考文章: javascript - 看图理解TCP的三次握手和四次挥手_个人文章 - SegmentFault 思否 TCP'三次握手'和'四次挥手'(通俗易懂)_大黄的Java笔记的博客-CSDN ...
最新文章
- 数字电路中时钟抖动 Jitter 和 偏移 Skew
- 侧边栏配置_vscode入门:熟悉vscode和初级配置
- Android 四大组件之——Acitivity(一)
- 利用最小二乘法,用直线拟合点时,为什么计算竖直距离而非垂直距离?为什么在线性回归分析中,求的是距离平方和最小,而不是距离之和最小?
- 一行Java代码获取当前操作系统并进行不同操作
- 再谈 查询长期未登录AD的用户
- servlet上传文件接收工具
- 红黑树插入和删除的各种情况分析
- 判断拐点_一文教你“如何寻找拐点”——拐点判断,简单易懂,建议收藏
- vs2012 怎样解决 未能正确加载“Microsoft.VisualStudio.Editor.Implementation.EditorPackage”包的问题
- ai怎么做波普风圆点_AI绘画教程,绘画波普艺术风格人像
- SQL注入的严重危害之拖库实例
- 企业为什么需要EDI?
- 同步时序逻辑电路功能分析之同步五进制加法计数器
- java程序员面试简历注意事项
- 苹果开发者账号申请 App IDs(应用身份证)
- 屌丝经济”要突破的痛点在哪儿?
- 时间戳计算机网络,时间戳
- 辐射骚扰测试软件,电磁兼容EMC测试
- Mysql数据丢失分析与数据恢复