• 售前

  • 售后

热门帖子
入门百科

TCP协议:头部结构、三次握手与四次挥手

[复制链接]
阿威来自山西 显示全部楼层 发表于 2022-1-16 15:44:40 |阅读模式 打印 上一主题 下一主题
目次
一、TCP报文段
二、TCP的连继承理
三次握手(毗连的创建)
四次挥手(毗连的开释)

一、TCP报文段

TCP传送的数据单元称为报文段。一个TCP报文段分为TCP首部和TCP数据两部分,整个TC段作为IP数据报的数据部分封装在IP数据报中,如图5-6所示。其首部的前20字节是固定的。TCP报文段的首部最短为20字节,反面有4N字节是根据须要而增长的选项,通常长度为4字节的整数倍。
TCP报文段既可以用来运载数据,也可以用来创建毗连、开释毗连和应答。



1、源端口和目的端口字段  各占2字节。端口是运输层与应用层的服务接口。运输层的复用和分勤劳能都要通过端谈锋气实现。

2、序号字段  占4字节。TCP是面向字节流的(就是说TCP传送时是按照一个一个字节来传送的),以是TCP 毗连中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
比方:一报文段的序号字段值是301,而携带的数据共有100字节,这就表明本报文段的数据的末了一个字节的序号是400,故下一个报文段的数据序号应从401开始。

3、确认号字段  占4字节,是渴望收到对方的下一个报文段的数据的第一个字节的序号若确认号-N,则表明到序号N-1为止的全部数据都已精确收到。
比方:B精确收到了A发送过来的一个报文段,其序号字段是指501,而数据长度是200字节(序501~700),这表明B精确收到了A发送的到序号700为止的数据。因此B渴望收到A的下一个数据序号是701,于是B在发送给A简直认报文段中把确认号置为701。

4、数据偏移(即首部长度)占4位,这里不是IP数据报分片的谁人数据偏移,而是表现首部长度,它指出TCP报文段的数据起始处隔断TCP报文段的起始处有多远。
“数据偏移”的单元是32位(以4字节为盘算单元)。因此当此字段的值为15时,到达TCP首部的最大长度60字节。

5、生存字段  占6位,生存为以后利用,但现在应置为0,该字段可以忽略不计。
6、告急位URG  当URG=1时,表明告急指针字段有用。它告诉体系此报文段中有告急数据,应尽快传送(相称于高优先级的数据)。但是URG须要和告急指针配套利用,也就是说数据从第一个字节到告急指针所指字节就是告急数据。

7、确认位ACK  只有当ACK=1时确认号字段才有用。当ACK=0时,确认号无效。TCP规定,在毗连创建后全部传送的报文段都必须把 ACK置1。

8、推送位PSH (Push)  吸取TCP收到PSH=1的报文段,就尽快地交付吸取应用进程,而再比及整个缓存都填满了后再向上交付。

9、复位位RST (Reset))当RST=1时,表明TCP毗连中出现严肃不对(如由于主机瓦解或其他缘故原由),必须开释毗连,然后再重新创建运输毗连。

10、同步位SYN  同步SYN=1表现这是一个毗连哀求或毗连吸取报文。
当SYN=1,ACK=0时,表明这是一个毗连哀求报文,对方若同意创建毗连,则在相应报文中利用SYN=1,ACK=1。即,SYN=1就表现这是一个毗连哀求或毗连吸取报文。

11、克制位FIN (Finish) 用来开释一个毗连。FIN=1表明此报文段的发送方的数据已发送完毕,并要求开释传输毗连。

12、窗口字段  占2字节。它指出了现在允许对方发送的数据量,吸取方的数据缓存空间是有限的,故用窗口值作为吸取方让发送方设置其发送窗口的依据,单元为字节。
比方:设确认号是701,窗口字段是1000。这就表明,从701号算起,发送此报文段的一方尚有吸取1000字节数据(字节序号是701~1700)的吸取缓存空间。

13、查验和  占2字节。查验和字段查验的范围包罗首部和数据这两部分。在盘算查验和时,和UDP一样,要在TCP报文段的前面加上12字节的伪首部(只需将UDP伪首部的第4个字段,即协议字段的17改成6,其他的和UDP一样)。

14、告急指针字段  占16位,指出在本报文段中告急数据共有多少个字节(告急数据放在本报文段数据的最前面)。

15、选项字段  长度可变。TCP最初只规定了一种选项,即最大报文段长度(MaximumSegment Size,MSS)。MSS是 TCP报文段中的数据字段的最大长度。

16、添补字段  这是为了使整个首部长度是4字节的整数倍。

二、TCP的连继承理

TCP是面向毗连的协议。因此每一个TCP毗连都有三个阶段:毗连创建、数据传送和毗连开释。TCP毗连的管理就是使运输毗连的创建和开释都能正常举行。

三次握手(毗连的创建)


毗连的创建履历以下3个步调,通常称为“三次握手”。
第一步:客户机的TCP起首向服务器的TCP发送一个毗连哀求报文段。这个特殊的报文段中不含应用层数据,其首部中的SYN标记位被置为1.别的,客户机遇随机选择一个起始序号seq=x (毗连哀求报文不携带数据,但要斲丧掉一个序号)。


第二步:服务器的TCP收到毗连哀求报文段后,犹如意创建毗连,就向客户机发回确认,并为该TCP 毗连分配TCP缓存和变量。在确认报文段中,SYN和ACK位都被置为1,确认号字段的值为x+1,而且服务器随机产生起始序号 seq=y(确认报文不携带数据,但也要斲丧掉一个序号)。确认报文段同样不包罗应用层数据。
第三步:当客户机收到确认报文段后,还要向服务器给出确认,而且也要给该毗连分配缓存和变量。这个报文段的ACK标记位被置1,序号字段为x+1,确认号字段ack=y+1。该报文段可以携带数据,假如不携带数据则不斲丧序号。


四次挥手(毗连的开释)

第一步:客户机操持关闭毗连,就向其TCP发送一个毗连开释报文段,并克制再发送数据,自动关闭TCP毗连,该报文段的FIN标记位被置1,seq=u,它便是前面已传送过的数据的末了一个字节的序号加1 (FIN报文段纵然不携带数据,也要斲丧掉一个序号)。TCP是全双工的,即可以想象成是一条TCP毗连上有两条数据通路。当发送 FIN报文时,发送FIN 的一端就不能再发送数据,也就是关闭了此中一条数据通路,但对方还可以发送数据。


 第二步:服务器收到毗连开释报文段后即发出确认,确认号是ack=u+1,而这个报文段自的序号是v,便是它前面已传送过的数据的末了一个字节的序号加1。此时,从客户机到服务这个方向的毗连就开释了,TCP毗连处于半关闭状态。但服务器若发送数据,客户机仍要吸取,即从服务器到客户机这个方向的毗连并未关闭。
第三步:若服务器已经没有要向客户机发送的数据,就关照TCP开释毗连,此时其发出 FIN=1的毗连开释报文段。
第四步:客户机收到毗连开释报文段后,必须发出确认。在确认报文段中,ACK字段被置为1,确认号ack=w+1,序号 seq=u+1。此时TCP 毗连还没有开释掉,必须颠末时间等候计时器设置的时间2MSL后,A才进入到毗连关闭状态。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作