您的位置:首页 > 理论基础 > 计算机网络

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

2018-03-26 16:11 597 查看
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 Number和Acknowledgment Number,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了;(2)第二次挥手:主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment Number为Sequence 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连接。如果要正确的理解四次分手的原理,就需要了解四次分手过程中的状态变化。
 
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: