建立与断开连接详细过程
TCP 协议连接建立时 3 次握手的过程。
简述 TCP 协议连接建立时 3 次握手的过程。
根据 TCP 头部,说明下列 3 个包在连接建立过程中的次序.
002000 50 83 aa 46 49 3e dd 33 96 37 a3 a0 12...P..FI>.3.7...
003016 a0 c4 c0 00 00 02 04 05 b4 04 02 08 0a d7 9b................
004062 b7 00 56 4a 2a 01 03 03 02b..VJ*....(1)
002083 aa 00 50 33 96 37 a2 00 00 00 00 a0 02.....P3.7.......
003016 d0 84 1d 00 00 02 04 05 b4 04 02 08 0a 00 56...............V
00404a 2a 00 00 00 00 01 03 03 00J*........(2)
002083 aa 00 50 33 96 37 a3 46 49 3e de 80 10.....P3.7.FI>...
003016 d0 f3 4b 00 00 01 01 08 0a 00 56 4a 36 d7 9b...K.......VJ6..
004062 b7b. (3)
解:
在 TCP/IP 协议中,TCP 协议提供可靠的连接服务,采用三次握手建立一个连接。
1)是第二次握手,flags 位上为 12,二进制是 0001 0010,即表示有 syn 和 ack.
2)是第一次握手,flags 位上为 02,二进制是 0000 0010,即表示有 syn 没有 ack。
3)是第三次握手,flags 位上为 10,二进制是 0001 0000,即表示有 ack 没有 syn。
该连接访问的是 80 端口,是为 HTTP(HyperText Transport Protocol,超文本传输协议)开放的,
第一次握手:建立连接时,客户端发送 syn 包(syn=j)到服务器,并进入 SYN_SEND 状态,等待服务器确认;
第二次握手:服务器收到 syn 包,必须确认客户的 SYN(ack=j+1),同时自己也发送一个 SYN 包(syn=k),即
SYN+ACK 包,此时服务器进入 SYN_RECV 状态;
第三次握手:客户端收到服务器的 SYN+ACK 包,向服务器发送确认包 ACK(ack=k+1),此包发送完毕,客户端和服务
器进入 ESTABLISHED 状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据。
tcp-断开连接:
主要部分,四次握手:
断开连接其实从我的角度看不区分客户端和服务器端,任何一方都可以调用 close(or closesocket)之类
的函数开始主动终止一个连接。这里先暂时说正常情况。当调用 close 函数断开一个连接时,主动断开的
一方发送 FIN(finish 报文给对方。有了之前的经验,我想你应该明白我说的 FIN 报文时什么东西。也就是
一个设置了 FIN 标志位的报文段。FIN 报文也可能附加用户数据,如果这一方还有数据要发送时,将数据附
加到这个 FIN 报文时完全正常的。之后你会看到,这种附加报文还会有很多,例如 ACK 报文。我们所要把握
的原则是,TCP 肯定会力所能及地达到最大效率,所以你能够想到的优化方法,我想 TCP 都会想到。
当被动关闭的一方收到 FIN 报文时,它会发送 ACK 确认报文(对于 ACK 这个东西你应该很熟悉了)。这里有个
东西要注意,因为 TCP 是双工的,也就是说,你可以想象一对 TCP 连接上有两条数据通路。当发送 FIN 报文