TCP结构解析以及三次握手协议和四次挥手协议

1.协议层模型

从上到下分别是:

(1) 应用层:针对特定应用的协议,就是匹配不同厂家设备,不同应用之间通信的统一规定,比如电子邮件协议(SMTP)、超文本传输协议(HTTP)、远程登录协议(TELNET)、文本传输协议(FTP),域名解析协议(DNS)。

(2) 传输层:管理两个节点之间数据的传输,包括传输通道的建立、是否可靠传输等工作

(3) 网络层:地址管理和路由选择。

(4) 物理层:数据传输的物理基础,也称作传输介质。

2.TCP协议

(1)报文格式:

①源端口:2字节,表明报文来源端口号,和IP源地址共同构成返回地址

②目的端口:2字节,表明报文传输目的端口号,和IP目的地址共同构成传输目的地址

③序号:4字节,是报文所发送数据的第一个字节的序号。如第一个字节序号为1,这个报文的序号就是1,假设这个报文数据一共一百个字节,那下一个报文的序号就是101.

④确认序号:4字节,是期望收到对方下次发送数据的第一个字节的序号。比如刚刚那个例子,若第一个报文序号为1,那么确认序号报文就是101。

注意:比如发送方发送了一个报文段序号为 301 的 TCP 段,这个段携带了 100 字节数据,则接收方应当回复的确认号是 401,它表示接收方已经收到了字节序号为 [0, 400] 的数据,现在期望你发送字节序号为 401 以及以后的数据。

⑤数据偏移:4bit,是报文首部的长度

⑥保留位:6bit,供往后使用,今朝置为0

⑦特殊位

㈠紧急比特位:URG:URG=1的时候,说明此报文应该尽快传送,而不要按照本来排列次序传送,紧急指针指向该报文的最后一个字节的序号,使接管方可以知道紧急数据共有多长。

㈡确认比特位:ACK:只有当ACK=1时,确认序号段才有意义。

㈢急迫比特位:PSH:告诉TCP将此报文段立刻传输给其应用层,而不要等到缓存满了再向上交付。

㈣复位比特位:RST:当RST=1时出现严重错误,需要断开连接,重新建立传输连接通道。

㈤同步比特位SYN:在建立连接的时候,SYN=1 ACK=0,注解这是一个连接请求报文段,若对方同意连接,则发还一个SYN=1ACK=1的报文段。

㈥终止比特位FIN:当FIN=1的时候,注解与发送的字节已经发送完毕,请求开释传输连接。

校验和:检查数据正确性

(2)三次握手协议(建立连接)

1)第一次握手:
Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。

(2)第二次握手:
Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。

(3)第三次握手:
Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

注意:seq是序号,ack是确认序号,不同于ACK标志位

(3)四次挥手协议(终止连接)


(1)第一次挥手:主机1(可以使客户端,也可以是服务器端),设置Sequence NumberAcknowledgment Number,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了;

(2)第二次挥手:主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment NumberSequence Number加1;主机1进入FIN_WAIT_2状态;主机2告诉主机1,我“同意”你的关闭请求;

(3)第三次挥手:主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入LAST_ACK状态;

(4)第四次挥手:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。

(4)四次挥手的原因

那四次分手又是为何呢?TCP协议是一种面向连接的、可靠的、基于字节流的运输层通信协议。TCP是全双工模式,这就意味着,当主机1发出FIN报文段时,只是表示主机1已经没有数据要发送了,主机1告诉主机2,它的数据已经全部发送完毕了;但是,这个时候主机1还是可以接受来自主机2的数据;当主机2返回ACK报文段时,表示它已经知道主机1没有数据发送了,但是主机2还是可以发送数据到主机1的;当主机2也发送了FIN报文段时,这个时候就表示主机2也没有数据要发送了,就会告诉主机1,我也没有数据要发送了,之后彼此就会愉快的中断这次TCP连接。如果要正确的理解四次分手的原理,就需要了解四次分手过程中的状态变化。


猜你喜欢

转载自blog.csdn.net/zzy296753977/article/details/79699522