TCP连接过程解析

TCP客户端和服务器之间建立连接的过程称为3次握手过程。握手过程由客户端程序首先发起,整个过程要经历下面3个步骤:

1、客户端发送一个SYN标志置1的TCP报文段,报文段首部指明自己的端口号及期望连接的服务器端口好。在报文段中,客户端需要通告自己的初始序号ISN,除此之外,这个报文中还可以携带一些选项字段,例如最大报文段大小、窗口扩大因子,选项将客户端的一些连接属性通告给服务器。本报文段中ACK标志为0,因此它的确认号字段和通告窗口大小字段都会被视为无效。

00 E0 66 78 3A 84 E2 BB BC 41 4F 5A 08 00 45 00 00 3C 55 24 40 00 40 06 5B B6 C0 A8 03 77 C0 A8 05 1A E2 9E 1F 99 BE B1 91 02 00 00 00 00 A0 02 39 08 6F 08 00 00 02 04 05 B4 04 02 08 0A FF FF C4 26 00 00 00 00 01 03 03 02

00 E0 66 78 3A 84-以太网目的地址

E2 BB BC 41 4F 5A -以太网源地址

0800-帧类型,IP数据包

后面的为IP数据包

45-4表示使用IPV4版本,5*4=20字节,表示IP首部长度是20字节

00-TOS,描述当前IP数据报急需的服务类型,如最小延时,最大吞吐量,最高可靠性,最小费用等。路由器在转发数据报时,可以根据这个字段的值来为数据报选择最合理的路由路径。

003C-总长度,表示整个IP数据报(IP首部和数据区)的总字节数。总共60字节。

5524-16位标识字段,用于标识IP层发送出去的每一份IP数据报,每发送一份报文,该值加1,数据包被分片时,该字段会被复制到每一个分片中,在接收端,会使用这个字段值来组装所有分片为一个完整的数据报。

4000-3位标志字段和13位分片偏移量。高3位为010,第1位保留为今后使用,第2位是不分片位,此处为1,表示不分片。当该位为0时,IP层将在需要的时候对数据报进行分片处理。第3位表示更多分片位,此处为0,表示该分片是数据报的最后一个分片或者是唯一的分片,如果为1,说明该分片不是数据报的最后一个分片,后面还有分片的数据包。

13位偏移字段表示当前分片所携带的数据在整个数据报中的相对位置(以8字节为单位)。目的站必须收到从0偏移量到最高偏移量的所有分片,才能将分片重装成一个完整的数据报。每个分片在网络中断单独传输,它们到达终点的顺序可能会不相同,但在目的端,将按照分片的偏移量来顺序组织各个分片。

40-生存时间TTL。描述该IP数据报最多能被转发的次数,每经过一次转发,该值会减1,当该值为0时,路由器会丢弃掉分组,同时一个ICMP差错报文会被返回至源主机。

06-协议字段,1-表示ICMP协议,2-表示IGMP协议,6-表示TCP协议,17-表示UDP协议。

5BB6-首部校验和

C0A80377-源IP地址

C0A8051A -目的IP地址

后面位TCP报文

E29E-源端口号,58014

1F99-目的端口号,8089

BEB19102-32位序号,表示从TCP发送端到TCP接收端的数据字节编号,它的值为当前报文段中的第一个数据的字节序号。当建立一个新连接时,握手报文首部中的SYN标志置1,此时,序号字段包含由发送方随机选择的初始序号ISN。建立连接的报文SYN将占用一个数据编号,因此发送方随后将要发送数据的第一个字节序号为ISN+1.

00000000-32位确认序号,只有ACK标志为1时才有效,它包含了本机所期望收到的下一个数据序号,确认常常和反向数据一起捎带发送。确认序号应当是上次已成功收到数据字节序号加1,即如果接收方成功接收了对方发送的数据序号A,则返回的确认应为A+1.当一个TCP连接被正确建立后,报文首部中的ACK字段总是被设置为1.

A002-A*4=40,表示TCP首部长度为40字节,接下来的6bit保留字段暂时没用,接下来是6个标志bit。

SYN=1,表示此包发起连接。

3908-窗口大小字段。无效。

6F08-校验和

0000-紧急指针,只有当紧急标志位URG置位时才有效。

后面是TCP选项,总共20字节

02 04 05 B4 – 最大报文长度0X05B4,1460字节

04 02 08 0A FF FF C4 26 00 00 00 00 01 03 03 02

这个数据报TCP只有首部,没有数据。本报文段中ACK标志为0,因此它的确认号字段和通告窗口大小字段都会被视为无效。

2、当服务器接收到该报文并解析后,返回一个SYN和ACK标志都置1的报文段作为应答。ACK为1表示该报文段包含了有效的确认号,这个值应该是客户端初始序列号加1,另一方面,SYN标志为1表示服务器响应连接,并在回应报文中包含服务器自身选定的初始序号ISN,服务器可以在这个报文段中加上选项字段,告诉客户端自己的连接属性,同时报文首部中的窗口大小也有效,它向客户端指明自己的接收窗口大小。

E2 BB BC 41 4F 5A 00 E0 66 78 3A 84 08 00 45 00 00 3C 2D 0F 40 00 40 06 00 00 C0 A8 05 1A C0 A8 03 77 1F 99 E2 9E CE 35 1D 1F BE B1 91 03 A0 12 20 00 8A 10 00 00 02 04 05 B4 01 03 03 08 04 02 08 0A 00 27 08 55 FF FF C4 26

E2 BB BC 41 4F 5A-以太网目的地址

00 E0 66 78 3A 84–以太网源地址

08 00-帧类型,IP数据包

后面的为IP数据包

45-4表示使用IPV4版本,5*4=20字节,表示IP首部长度是20字节

00-TOS,描述当前IP数据报急需的服务类型,如最小延时,最大吞吐量,最高可靠性,最小费用等。路由器在转发数据报时,可以根据这个字段的值来为数据报选择最合理的路由路径。

003C-总长度,表示整个IP数据报(IP首部和数据区)的总字节数。总共60字节。

2D0F-16位标识字段,用于标识IP层发送出去的每一份IP数据报,每发送一份报文,该值加1,数据包被分片时,该字段会被复制到每一个分片中,在接收端,会使用这个字段值来组装所有分片为一个完整的数据报。

4000-3位标志字段和13位分片偏移量。高3位为010,第1位保留为今后使用,第2位是不分片位,此处为1,表示不分片。当该位为0时,IP层将在需要的时候对数据报进行分片处理。第3位表示更多分片位,此处为0,表示该分片是数据报的最后一个分片或者是唯一的分片,如果为1,说明该分片不是数据报的最后一个分片,后面还有分片的数据包。

13位偏移字段表示当前分片所携带的数据在整个数据报中的相对位置(以8字节为单位)。目的站必须收到从0偏移量到最高偏移量的所有分片,才能将分片重装成一个完整的数据报。每个分片在网络中断单独传输,它们到达终点的顺序可能会不相同,但在目的端,将按照分片的偏移量来顺序组织各个分片。

40-生存时间TTL。描述该IP数据报最多能被转发的次数,每经过一次转发,该值会减1,当该值为0时,路由器会丢弃掉分组,同时一个ICMP差错报文会被返回至源主机。

06-协议字段,1-表示ICMP协议,2-表示IGMP协议,6-表示TCP协议,17-表示UDP协议。

0000-首部校验和

C0A8051A -源IP地址

C0A80377-目的IP地址

后面位TCP报文

1F99-源端口号,8089

E29E -目的端口号,58014

CE351D1F-32位序号,表示从TCP发送端到TCP接收端的数据字节编号,它的值为当前报文段中的第一个数据的字节序号。当建立一个新连接时,握手报文首部中的SYN标志置1,此时,序号字段包含由发送方随机选择的初始序号ISN。建立连接的报文SYN将占用一个数据编号,因此发送方随后将要发送数据的第一个字节序号为ISN+1.

BEB19103-32位确认序号,是上一个数据报的位序号加1.

A012-A*4=40,表示TCP首部长度为40字节,接下来的6bit保留字段暂时没用,接下来是6个标志bit。

SYN=1,ACK=1。表示该报文段包含了有效的确认号。

2000-窗口大小字段,告诉客户端服务器的接收窗口大小。

8A10-校验和

0000-紧急指针,只有当紧急标志位URG置位时才有效。

后面是TCP选项,总共20字节

02 04 05 B4 – 最大报文长度0X05B4,1460字节

01 03 03 08 04 02 08 0A 00 27 08 55 FF FF C4 26

这个数据报TCP只有首部,没有数据。

3、当客户端接收到服务器的SYN应答报文后,会再次产生ACK置位的报文段,该报文段包含了对服务器SYN报文段的有效确认号,该值为服务器发送的ISN加1,同时,该报文段中还包含了有效的窗口大小,用来向服务器指明客服端的接收窗口大小。

00 E0 66 78 3A 84 E2 BB BC 41 4F 5A 08 00 45 00 00 34 55 25 40 00 40 06 5B BD C0 A8 03 77 C0 A8 05 1A E2 9E 1F 99 BE B1 91 03 CE 35 1D 20 80 10 0E 42 D4 B3 00 00 01 01 08 0A FF FF C4 26 00 27 08 55

00 E0 66 78 3A 84-以太网目的地址

E2 BB BC 41 4F 5A -以太网源地址

0800-帧类型,IP数据包

后面的为IP数据包

45-4表示使用IPV4版本,5*4=20字节,表示IP首部长度是20字节

00-TOS,描述当前IP数据报急需的服务类型,如最小延时,最大吞吐量,最高可靠性,最小费用等。路由器在转发数据报时,可以根据这个字段的值来为数据报选择最合理的路由路径。

0034-总长度,表示整个IP数据报(IP首部和数据区)的总字节数。总共52字节。

5525-16位标识字段,是第一个数据包的标识字段加1.

4000-3位标志字段和13位分片偏移量。高3位为010,第1位保留为今后使用,第2位是不分片位,此处为1,表示不分片。当该位为0时,IP层将在需要的时候对数据报进行分片处理。第3位表示更多分片位,此处为0,表示该分片是数据报的最后一个分片或者是唯一的分片,如果为1,说明该分片不是数据报的最后一个分片,后面还有分片的数据包。

13位偏移字段表示当前分片所携带的数据在整个数据报中的相对位置(以8字节为单位)。目的站必须收到从0偏移量到最高偏移量的所有分片,才能将分片重装成一个完整的数据报。每个分片在网络中断单独传输,它们到达终点的顺序可能会不相同,但在目的端,将按照分片的偏移量来顺序组织各个分片。

40-生存时间TTL。描述该IP数据报最多能被转发的次数,每经过一次转发,该值会减1,当该值为0时,路由器会丢弃掉分组,同时一个ICMP差错报文会被返回至源主机。

06-协议字段,1-表示ICMP协议,2-表示IGMP协议,6-表示TCP协议,17-表示UDP协议。

5BBD-首部校验和

C0A80377-源IP地址

C0A8051A -目的IP地址

后面位TCP报文

E29E-源端口号,58014

1F99-目的端口号,8089

BEB19103-32位序号,等于第二个数据报的位确认序号。

CE351D20-32位确认序号,等于第二个数据包的位序号加1.

8010-8*4=32,表示TCP首部长度为32字节,接下来的6bit保留字段暂时没用,接下来是6个标志bit。

ACK=1,表示该报文段包含有效的确认号。SYN=0。

0E42-窗口大小字段,向服务器指明客户端的接收窗口大小是3650字节。

D4B3-校验和

0000-紧急指针,只有当紧急标志位URG置位时才有效。

后面是TCP选项,总共12字节

01 01 08 0A FF FF C4 26 00 27 08 55

这个数据报TCP只有首部,没有数据。

当服务器接收到3中的这个ACK报文后,服务器和客服端之间的连接就建立起来了,它们双方都获得彼此的窗口大小、初始序列号、最大报文段等信息。

发表评论

电子邮件地址不会被公开。 必填项已用*标注