懂得TCP/IP协议(二)

作者:珠峰架构课学员日期:2018-04-15 19:37:55 点击:530

五¶••⊿TCP报文

数据包

IP 数据包在以太网数据包的负载里面,TCP数据包在IP数据包的负载里••。

TCP 首部各字段的意义和作用

TCP首部最小为20字节,这20字节分为5行,每行4个字节也就是32个位••。

源端口和目标端口 Port

  • 源端口号:16位的源端口中包含初始化通信的端口••。源端口和源IP地址的作用是标识报文的返回地址••。
  • 目标端口号:16位的目标端口域定义传输的目标••。这个端口指明报文吸收盘算机上的利用程序地址接口••。盘算机通过端口号辨认访问哪个服务,比如http服务或ftp服务,发送方端口号是进行随机端口,目标端口号决定了吸收方哪个程序来吸收 分辨占用16位,也就是端口号最大是2^16,所以端口号的领域是0~65536

端口号的分配:

  • 著名端口号一般位于:1 — 255 之间
  • 256 — 1023的端口号,通常是由Unix系统占用(系统占用)
  • 1024 —5000 是大多数TCP¶••⊿IP实现的临时分配
  • 大于5000的一般是给其他服务预留的(Internet上并不常用的服务)

序号 Sequence Number

TCP用序列号对数据包进行标记,以便在达到目标地后重新重装,假设当前的序列号为 s,发送数据长度为 l,则下次发送数据时的序列号为 s + l••。在建立连接时通常由盘算机生成一个随机数作为序列号的初始值••。

确认号 Acknowledgemt Number

占 4 个字节,表现期望收到对方下一个报文段的序号值••。 TCP 的可靠性,是建立在「每一个数据报文都需要确认收到」的基础之上的••。

就是说,通信的任何一方在收到对方的一个报文之后,都要发送一个相对应的「确认报文」,来表达确认收到••。 那么,确认报文,就会包含确认号••。 例如,通信的一方收到了第一个 25kb 的报文,该报文的 序号值=0,那么就需要回复一个确认报文,其中的确认号 = 25600.

数据偏移 Offset

占 0.5 个字节 (4 位)••。 这个字段实际上是指出了 TCP 报文段的首部长度 ,它指出了 TCP报文段的数据起始处 距离 TCP报文的起始处 有多远••。(注意 数据起始处 和 报文起始处 的意思)

一个数据偏移量 = 4 byte,由于 4 位二进制数能表现的最大十进制数字是 15,因此数据偏移的最大值是 60 byte,这也侧面限制了 TCP 首部的最大长度••。

保存 Reserved

占 0.75 个字节 (6 位)••。 保存为今后应用,但目前应置为 0••。

标记位 TCP Flags

标记位,一共有 6 个,分辨占 1 位,共 6 位 ••。 每一位的值只有 0 和 1,分辨表达不批准思••。

  • ACK:确认序号有效
  • RST:重置连接
  • SYN:发起了一个新连接
  • FIN:释放一个连接

确认 ACK (Acknowlegemt)

当 ACK = 1 的时候,确认号(Acknowledgemt Number)有效••。 一般称携带 ACK 标记的 TCP 报文段为「确认报文段」••。为0表现数据段不包含确认信息,确认号被疏忽••。

TCP 规定,在连接建立后所有传送的报文段都必须把 ACK 设置为 1••。

推送 PSH (Push)

当 PSH = 1 的时候,表现该报文段高优先级,吸收方 TCP 应当尽快推送给吸收利用程序,而不用等到全部 TCP 缓存都填满了后再交付••。

复位 RST (Reset)

当 RST = 1 的时候,表现 TCP 连接中涌现严重毛病,需要释放并重新建立连接••。 一般称携带 RST 标记的 TCP 报文段为「复位报文段」••。

同步 SYN (SYNchronization)

当 SYN = 1 的时候,表明这是一个恳求连接报文段••。 一般称携带 SYN 标记的 TCP 报文段为「同步报文段」••。 在 TCP 三次握手中的第一个报文就是同步报文段,在连接建立时用来同步序号••。

对方若批准建立连接,则应在响应的报文段中使 SYN = 1 和 ACK = 1••。

终止 FIN (Finis)

当 FIN = 1 时,表现此报文段的发送方的数据已经发送完毕,并请求释放 TCP 连接••。

一般称携带 FIN 的报文段为「结束报文段」••。

在 TCP 四次挥手释放连接的时候,就会用到该标记••。

窗口大小 Window Size

占 2 字节••。

该字段明确指出了现在容许对方发送的数据量,它告诉对方本端的 TCP 吸收缓冲区还能容纳多少字节的数据,这样对方就可以把持发送数据的速度••。 窗口大小的值是指,从本报文段首部中的确认号算起,吸收方目前容许对方发送的数据量••。

例如,假如确认号是 701 ,窗口字段是 1000••。这就表明,从 701 号算起,发送此报文段的一方还有吸收 1000 (字节序号是 701 ~ 1700) 个字节的数据的吸收缓存空间••。

校验和 TCP Checksum

占 2 个字节••。 由发送端填充,吸收端对 TCP 报文段履行 CRC 算法,以检验 TCP 报文段在传输过程中是否损坏,如果损坏这丢弃••。

检验领域包含首部和数据两部分,这也是 TCP 可靠传输的一个重要保障••。

紧急指针 Urgent Pointer

占 2 个字节••。 仅在 URG = 1 时才有意义,它指出本报文段中的紧急数据的字节数••。 当 URG = 1 时,发送方 TCP 就把紧急数据插入到本报文段数据的最前面,而在紧急数据后面的数据仍是普通数据••。

因此,紧急指针指出了紧急数据的末尾在报文段中的地位••。

六¶••⊿三次握手,四次挥手

需要懂得的信息:

  • ACK : TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1
  • SYN(SYNchronization) : 在连接建立时用来同步序号••。当SYN=1而ACK=0时,表明这是一个连接恳求报文••。对方若批准建立连接,则应在响应报文中使SYN=1和ACK=1. 因此, SYN置1就表现这是一个连接恳求或连接吸收报文••。
  • FIN (finis)即完,终结的意思, 用来释放一个连接••。当 FIN = 1 时,表明此报文段的发送方的数据已经发送完毕,并请求释放连接••。

三次握手 建立连接

TCP(Transmission Control Protocol,传输把持协议)是 面向连接的协议,也就是说在收发数据之前,必须先和对方建立连接

一个TCP连接必需要经过三次“对话”才干建立起来,其中的过程非常复杂,只简略的 描写下这三次对话的简略过程:主机A向主机B发出连接恳求数据包:“我想给你发数据,可以吗?”,这是第一次对话;主机B向主机A发送批准连接和请求同步 (同步就是两台主机一个在发送,一个在吸收,和谐工作)的数据包:“可以,你什么时候发?”,这是第二次对话;主机A再发出一个数据包确认主机B的请求同 步:“我现在就发,你接着吧!”,这是第三次对话••。三次“对话”的目标是使数据包的发送和吸收同步,经过三次“对话”之后,主机A才向主机B正式发送数 据••。

首先由Client发出恳求连接即 SYN=1 ACK=0 (请看头字段的介绍), TCP规定SYN=1时不能携带数据,但要耗费一个序号,因此声明自己的32位序号是 seq=x,然后 Server 进行回复确认,即 SYN=1 ACK=1 seq=y, ack=x+1, 再然后 Client 再进行一次确认,但不用SYN 了,这时即为 ACK=1, seq=x+1, ack=y+1.

四次挥手 释放连接

当客户A 没有东西要发送时就要释放 A 这边的连接,A会发送一个报文(没有数据),其中 FIN 设置为1, 服务器B收到后会给利用程序一个信,这时A那边的连接已经关闭,即A不再发送信息(但仍可吸收信息)••。 A收到B的确认落后入等候状态,等候B恳求释放连接, B数据发送完成后就向A恳求连接释放,也是用FIN=1 表现, 并且用 ack = u+1(如图), A收到后回复一个确认信息,并进入 TIME_WAIT 状态, 等候 2MSL 时间••。

关于 TIME_WAIT 过渡到 CLOSED 状态阐明: 从 TIME_WAIT 进入 CLOSED 需要经过 2MSL,其中 MSL 就叫做 最长报文段寿命(Maxinum Segment Lifetime),根据 RFC 793 建议该值这是为 2 分钟,也就是说需要经过 4 分钟,才进入 CLOSED 状态••。

为什么要等候呢?

为了这种情况: B向A发送 FIN = 1 的释放连接恳求,但这个报文丧失了, A没有接到不会发送确认信息, B 超时会重传,这时A在 WAIT_TIME 还能够吸收到这个恳求,这时再回复一个确认就行了••。(A收到 FIN = 1 的恳求后 WAIT_TIME会重新记时)

另外服务器B存在一个保活状态,即如果A突然故障逝世机了,那B那边的连接资源什么时候能释放呢? 就是保活时间到了后,B会发送探测信息, 以决定是否释放连接

为什么连接的时候是三次握手,关闭的时候却是四次握手?

答:因为当Server端收到Client端的SYN连接恳求报文后,可以直接发送SYN+ACK报文••。其中ACK报文是用来应答的,SYN报文是用来同步的••。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,”你发的FIN报文我收到了”••。只有等到我Server端所有的报文都发送完了,我才干发送FIN报文,因此不能一起发送••。故需要四步握手••。

上一篇: 懂得TCP/IP协议(一)

下一篇: 返回列表

快速飞艇在线投注 艾米彩票平台 红韵彩票注册平台 彩世界彩票首页 红宝石彩票手机app 重庆幸运农场如投注 澳洲赛车在线投注 75秒赛车网上开户 彩559开奖走势图 澳洲赛车官网开奖