百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

简单了解TCP三次握手的过程 tcp三次握手的过程以及举例

lipiwang 2024-10-25 15:50 15 浏览 0 评论

不是计算机专业的,工作几年,今年公司要倒闭了,准备准备面试了,看看面试题。今年工作好难找。年轻的找的都挺快的,年纪大点的公司好像都不想要了。

传输控制协议TCP简介

  1. 面向链接的,可靠的,基于字节流的传输层通信协议
  2. 将应用层的数据流分割成报文段并发送给目标节点的TCP层
  3. 数据包都有序号,对方收到则发送ACK确认,未收到则重传。
  4. 使用校验和来检验数据传输过程中是否有误



TCP报文头



1、端口号:在传输层中使用协议端口号 ip层的IP地址可以唯一标识主机,TCP协议和端口号可以标识主机中的唯一进程。这样可以用IP地址+端口号+协议标识网络中的一个进程,这种唯一标识的方式也称为套接字。也叫socket。也就是说通信的重点是应用层但我们只要把报文传递到某一个端口,剩下的就交给TCP来完成即可。

TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接。

2、序号:是TCP可靠传输的关键部分。序号是本报文段发送的数据组的第一个字节的序号,在TCP传送的字节流中每个字节是按照顺序编号的,例如一段报文中序号字节是100,报文数据共有200个字节,则下一个报文的序号为300,所以序号确保了传输的有序性

3、确认序号:即ACK,指明下一个期待收到的字节序号,表明序号之前的所有数据已经正确无误的收到,例如B接收到A序号为100长度为200的报文,那么确认序号就为301,表示之前的数据已经成功收到。

4、数据偏移/首部长度:4bits。由于首部可能含有可选项内容,因此TCP报头的长度是不确定的,报头不包含任何任选字段则长度为20字节,4为首部长度字段所能表示的最大值为1111,转化为10进制为15,15*32/8 = 60,故报头最大长度为60字节。首部长度也叫数据偏移,是因为首部长度实际上指示了数据区在报文段中的起始偏移值。

5、保留:为将来定义新的用途保留,现在一般置0。

6、控制位:URG ACK PSH RST SYN FIN,共6个,每一个标志位表示一个控制功能。

1)URG:紧急指针标志,为1是表示紧急指针有效,为0则忽略紧急指针。

2)ACK:确认序号标志,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段。

3)PSH:push标志,为1表示是带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队。

4)RST:重置连接标志,用于重置由于主机崩溃或其他原因而出现错误的连接。或者用于拒绝非法的报文段和拒绝连接请求。

5)SYN:同步序号,用于建立连接过程,在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1。

6)FIN:finish标志,用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本方数据流。

7、窗口:滑动窗口大小,用来告知发送端接收端的缓存大小,以此控制发送端发送数据的速率,从而达到流量控制。窗口大小时一个16bit字段,因而窗口大小最大为65535。

8、校验和:奇偶校验,此校验和是对整个的 TCP 报文段,包括 TCP 头部和 TCP 数据,以 16 位字进行计算所得。由发送端计算和存储,并由接收端进行验证。

9、紧急指针:只有当 URG 标志置 1 时紧急指针才有效。紧急指针是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号。 TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。

10、选项和填充:最常见的可选字段是最长报文大小,又称为MSS(Maximum Segment Size),每个连接方通常都在通信的第一个报文段(为建立连接而设置SYN标志为1的那个段)中指明这个选项,它表示本端所能接受的最大报文段的长度。选项长度不一定是32位的整数倍,所以要加填充位,即在这个字段中加入额外的零,以保证TCP头是32的整数倍。

10、数据部分: TCP 报文段中的数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段仅有 TCP 首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,也会发送不带任何数据的报文段。




TCP三次握手

当一个应用程序想要与另外一个应用程序想要通讯时会发送一个通讯请求。这个请求必须被发送一个确切的地址,在握手之后TCP会建立一个全双工的通讯。



这里客户端为A 服务器为B 一般服务器都是打开端口进行监听的。

握手之前主动打开连接的客户端结束CLOSED阶段,被动打开的服务器端也结束CLOSED阶段,并进入LISTEN阶段。随后开始“三次握手”:

  1. 标记位SYN=1表示 A现在请求建立新连接,接着初始化序号为X(一个整数,一般为1),然后客户端进入了SYN-SENT阶段(对服务端喊话,我想建立连接)
  2. 服务器收到了来自客户端的TCP报文后,结束了LISTEN阶段。并返回一段TCP报文,标志位SYN和ACK,表示确认客户端的报文seq序号有效,服务器能正常接收客户端发送的数据,并同意创建新连接(回复客户端,服务器收到了数据) 然后 服务器返回序号seq=y,确认号ACK=x+1表示收到客户端的序号,并将其值加1作为自己的确认号ACK的值,然后服务器进入SYN-RCVD阶段
  3. 客户端收到了服务端返回的确认收到数据的TCP报文后,明确了从客户端到服务器的数据时正常传输的,结束SYN-SESNT阶段,并返回最后一段TCP报文,其中,标志为ACK 表示确认收到服务器同意连接的信号(客户端通知服务器,你发的数据我也收到了),序号为seq=x+1 ,表示收到服务器段的确认号ACK,并将ACK作为自己的序号值,确认号ack=y+1,表示收到服务器端序号seq,并将值加1作为自己的确认号ACK的值,随后客户端进入ESTABLISHED阶段

服务器端收到客户端传输的TCP报文后,明确了从服务器到客户端的数据传输是正常的,结束SYN-SENT阶段,进入ESTABLISHED阶段

在客户端与服务器端传输的TCP报文中,双方的确认号Ack和序号Seq的值,都是在彼此Ack和Seq值的基础上进行计算的,这样做保证了TCP报文传输的连贯性。一旦出现某一方发出的TCP报文丢失,便无法继续"握手",以此确保了"三次握手"的顺利完成。

此后客户端和服务器端进行正常的数据传输。这就是“三次握手”的过程。

三次握手”的通俗理解

男孩喜欢女孩,一天,男孩给女孩写封信,我喜欢你,咱们谈恋爱吧,然后把信寄了出去,男孩在家焦急的等着回信,

女孩收到了男孩的信,心花怒放,原来你也喜欢我,然后立刻写信给男孩,你的信我收到了,我也喜欢你,我们交往吧。女孩把信寄给了男孩。女孩在家焦急的等待着。

男孩收到女孩的信,内心欢喜从回信中得知,自己的信女孩收到了,并且女孩也喜欢自己。哈哈,还愿意和自己交往,然后写了一封信给女孩,你的信我收到了。我们交往把。

女孩收到了回信后,知道发送的情书男孩收到了从此以后男孩女孩过上了没羞没早的日子了。这就是通俗的三次握手,期间一同三封信,也就是三次握手双方都互相了解了对方的想法。正式开始交往了。

三次握手可以保证服务器开启的连接是有效的,可以过了掉服务器的一些无用连接,减少服务器的开销,又能防止一些已经失效的连接的请求报文,忽然传到了服务端,从而缠手了粗欧文

相关推荐

前端入门——css 网格轨道详细介绍

上篇前端入门——cssGrid网格基础知识整体大概介绍了cssgrid的基本概念及使用方法,本文将介绍创建网格容器时会发生什么?以及在网格容器上使用行、列属性如何定位元素。在本文中,将介绍:...

Islands Architecture(孤岛架构)在携程新版首页的实践

一、项目背景2022,携程PC版首页终于迎来了首次改版,完成了用户体验与技术栈的全面升级。作为与用户连接的重要入口,旧版PC首页已经陪伴携程走过了22年,承担着重要使命的同时,也遇到了很多问题:维护/...

HTML中script标签中的那些属性

HTML中的<script>标签详解在HTML中,<script>标签用于包含或引用JavaScript代码,是前端开发中不可或缺的一部分。通过合理使用<scrip...

CSS 中各种居中你真的玩明白了么

页面布局中最常见的需求就是元素或者文字居中了,但是根据场景的不同,居中也有简单到复杂各种不同的实现方式,本篇就带大家一起了解下,各种场景下,该如何使用CSS实现居中前言页面布局中最常见的需求就是元...

CSS样式更改——列表、表格和轮廓

上篇文章主要介绍了CSS样式更改篇中的字体设置Font&边框Border设置,这篇文章分享列表、表格和轮廓,一起来看看吧。1.列表List1).列表的类型<ulstyle='list-...

一文吃透 CSS Flex 布局

原文链接:一文吃透CSSFlex布局教学游戏这里有两个小游戏,可用来练习flex布局。塔防游戏送小青蛙回家Flexbox概述Flexbox布局也叫Flex布局,弹性盒子布局。它决定了...

css实现多行文本的展开收起

背景在我们写需求时可能会遇到类似于这样的多行文本展开与收起的场景:那么,如何通过纯css实现这样的效果呢?实现的难点(1)位于多行文本右下角的展开收起按钮。(2)展开和收起两种状态的切换。(3)文本...

css 垂直居中的几种实现方式

前言设计是带有主观色彩的,同样网页设计中的css一样让人摸不头脑。网上列举的实现方式一大把,或许在这里你都看到过,但既然来到这里我希望这篇能让你看有所收获,毕竟这也是前端面试的基础。实现方式备注:...

WordPress固定链接设置

WordPress设置里的最后一项就是固定链接设置,固定链接设置是决定WordPress文章及静态页面URL的重要步骤,从站点的SEO角度来讲也是。固定链接设置决定网站URL,当页面数少的时候,可以一...

面试发愁!吃透 20 道 CSS 核心题,大厂 Offer 轻松拿

前端小伙伴们,是不是一想到面试里的CSS布局题就发愁?写代码时布局总是对不齐,面试官追问兼容性就卡壳,想跳槽却总被“多列等高”“响应式布局”这些问题难住——别担心!从今天起,咱们每天拆解一...

3种CSS清除浮动的方法

今天这篇文章给大家介绍3种CSS清除浮动的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。首先,这里就不讲为什么我们要清楚浮动,反正不清除浮动事多多。下面我就讲3种常用清除浮动的...

2025 年 CSS 终于要支持强大的自定义函数了?

大家好,很高兴又见面了,我是"高级前端进阶",由我带着大家一起关注前端前沿、深入前端底层技术,大家一起进步,也欢迎大家关注、点赞、收藏、转发!1.什么是CSS自定义属性CSS自...

css3属性(transform)的一个css3动画小应用

闲言碎语不多讲,咱们说说css3的transform属性:先上效果:效果说明:当鼠标移到a标签的时候,从右上角滑出二维码。实现方法:HTML代码如下:需要说明的一点是,a链接的跳转需要用javasc...

CSS基础知识(七)CSS背景

一、CSS背景属性1.背景颜色(background-color)属性值:transparent(透明的)或color(颜色)2.背景图片(background-image)属性值:none(没有)...

CSS 水平居中方式二

<divid="parent"><!--定义子级元素--><divid="child">居中布局</div>...

取消回复欢迎 发表评论: