开发者学堂课程【Linux网络进阶 - TCP/IP协议及OSI七层模型:CCNP 必备:Linux 网络抓包和 TCP 的三次握手】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/552/detail/7628
CCNP 必备:Linux 网络抓包和 TCP 的三次握手(一)
内容介绍:
一、三次握手
二、有限状态机 FSM:Finite State Machine
三、TCP包头结构
四、映射第四层到应用程序
五、有限状态机
六、客户端的典型状态转移
七、TCP 超时重传
八、拥塞控制
九、UDP 特性
回顾:六个重要的标记位分别为:urg、ack、psh、rsp、sin、fin
两个主机通讯之前,只要进行tcp协议,必须进行三次握手。三次握手通讯过程,如果A与B进行通讯,A给B发一个同步消息,把syn的标记设为1,回应的数据包都标记为1。
只要有tcp协议的,都可以看到三次握手。网络中有很多软件应用来进行通讯都是进行tcp的,例如:ssh可以进行tcp通讯(ssh192.168.30.128)。
前三次tcp就是三次握手,例如:
Arp是协议
后面的就是已经建立连接之后是sshv2协议。100兆128是第一个,第二个是从128到100的,第三次握手从100又回到128.(syn→syn ack →ack)
Tcp协议的完整名称为:transmission control protocol.
Source port为原端口56250(随机的)对应db ba
Destination port为目标端口22对应16
Segment number为序号0(0为相对编号)对应b0 40 9f 43(为绝对编号)。
Acknowledgment number 为确认编号为0(0代表无法确认)
fiags为标记。
syn为第一个包。
建立连接需要三次握手,主要标记了ack和syn
怎么确认三次握手的第一次握手?
看所有位中是否只有syn是1,其它位都是0.
此图为客户端主动发出断开请求,实则客户端和服务端都可发出断开请求。
主动提出断开连接的,提出标记位是FIN(finish)=1,数据包假设为u,状态切换为FIN-WAIT-1。
对方收到断开连接的请求之后会立即响应,ACK=1;从ESTAB-LISHED切换成为CLOSE-WAIT,之后进行残留数据传送;
对方收到信息后从wait1切换到wait2;
Fin=1为服务器同意断开,将残留数据传输完毕之后,客户端切换到time-wait阶段,此阶段将持续两倍MSL时间(消息的最大生存期),时间结束之后为closed。
为什么要等两倍MSL时间?
数据可能先发后到,需要等待数据彻底收到。
一、TCP三次握手
上图包含了5种状态分别为:CLOSED,SYN-SENT,ESTAB-LISHED,LISTEN,SYN-RCVD;
只要采用tcp协议,就要采用三次握手
a给b发送同步消息,第一次握手把标记位设为1,b回应的数据包把syn和ack都设为1,第三次握手ack为1
Header Length头部长度 Source Port 源端口
Destination Length 目标端口
如何知道是否为三次握手?
SYN为1,其余全为0
tcp程序发送时每个程序都有自己的端口号,tcp协议的第一个首部就是目标程序和源程序的端口号,第三个字段叫做序列号,即数据包的编号,第四个字段是确认的编号,还有六个重要标记类,
ssh 192.168.30.128基于tcp协议通讯
二、有限状态机 FSM:Finite State Machine
- CLOSED 没有任何连接状态。
- LISTEN 侦听状态,等待来自远方 TCP 端口的连接请求。
- SYN-SENT 在发送连接请求后,等待对方确认。
- SYN-RECEIVED 在收到和发送一个连接请求后,等待对方确认。
- ESTABLISHED 代表传输连接建立,双方进入数据传送状态。
- FIN-WAIT-1 主动关闭,主机已发送关闭连接请求,等待对方确认。
- FIN-WAIT-2 主动关闭,主机已收到对方关闭传输连接确认,等待对方发送关闭传输连接请求。
- TIME-WAIT 完成双向传输连接关闭,等待所有分组消失。
- CLOSE-WAIT 被动关闭,收到对方发来的关闭连接请求,并已确认。
- LAST-ACK 被动关闭,等待最后一个关闭传输连接确认,并等待所有分组消失。
- CLOSING 双方同时尝试关闭传输连接,等待对方确认。(同时发出分手)。