三次握手
置位概念:根据 tcp 的包头字段,存在 3 个重要的标识 ack、syn、fin
ack:表示验证字段 syn:位数置 1,表示建立 tcp 连接 fin:位数置 1,表示断开 tcp 连接
三次握手过程说明:
1. 由客户端发送建立 tcp 连接的请求报文,其中报文中包含 seq 序列号,是由发送端随机生成的,并且将报文中的 syn 字段置为 1,表示需要建立 tcp 连接。(syn=1,seq=x,x 为随机生成数值)2. 由服务端回复客户端发送的 tcp 连接请求报文,其中包含 seq 序列号,是由回复端随机生成的,并且将 syn 置为 1,而且会产生 ack 字段,ack 字段数值是在客户端发送过来的序列号 seq 的基础上加 1 进行回复,以便客户端收到信息时,知晓自己的 tcp 建立请求已得到验证。(syn=1,ack=x+1,seq=y,y 为随机生成数值)这里的 ack 加 1 可以理解为是确认和谁建立连接。3. 客户端收到服务端发送的 tcp 建立验证请求后,会使自己的序列号加 1 表示,并且再次回复 ack 验证请求,在服务端发过来的 seq 上加 1 进行回复。(syn=1,ack=y+1,seq=x+1)
四次挥手
四次挥手过程说明:
1. 客户端发送断开 tcp 连接请求的报文,其中报文中包含 seq 序列号,是由发送端随机生成的,并且还将报文中的 fin 字段置为 1,表示需要断开 tcp 连接。(fin=1,seq=x,x 由客户端随机生成)2. 服务端会回复客户端发送的 tcp 断开请求报文,其包含 seq 序列号,是由回复端随机生成的,而且会产生 ack 字段,ack 字段数值是在客户端发过来的 seq 序列号基础上加 1 进行回复,以便客户端收到信息时,知晓自己的 tcp 断开请求已经得到验证。(fin=1,ack=x+1,seq=y,y 由服务端随机生成)3. 服务端在回复完客户端的 tcp 断开请求后,不会马上进行 tcp 连接的断开,服务端会先确保断开前,所有传输到 a 的数据是否已经传输完毕,一旦确认传输数据完毕,就会将回复报文的 fin 字段置 1,并且产生随机 seq 序列号。(fin=1,ack=x+1,seq=z,z 由服务端随机生成)4. 客户端收到服务端的 tcp 断开请求后,会回复服务端的断开请求,包含随机生成的 seq 字段和 ack 字段,ack 字段会在服务端的 tcp 断开请求的 seq 基础上加 1,从而完成服务端请求的验证回复。(fin=1,ack=z+1,seq=h,h 为客户端随机生成)
至此 tcp 断开的 4 次挥手过程完毕
11 种状态
1. 一开始,建立连接之前服务器和客户端的状态都为 closed;2. 服务器创建 socket 后开始监听,变为 listen 状态;3. 客户端请求建立连接,向服务器发送 syn 报文,客户端的状态变味 syn_sent;4. 服务器收到客户端的报文后向客户端发送 ack 和 syn 报文,此时服务器的状态变为 syn_rcvd;5. 然后,客户端收到 ack、syn,就向服务器发送 ack,客户端状态变为 established;6. 服务器端收到客户端的 ack 后变为 established。此时 3 次握手完成,连接建立!
由于 tcp 连接是全双工的,断开连接会比建立连接麻烦一点点。
1. 客户端先向服务器发送 fin 报文,请求断开连接,其状态变为 fin_wait1;2. 服务器收到 fin 后向客户端发送 ack,服务器的状态围边 close_wait;3. 客户端收到 ack 后就进入 fin_wait2 状态,此时连接已经断开了一半了。如果服务器还有数据要发送给客户端,就会继续发送;4. 直到发完数据,就会发送 fin 报文,此时服务器进入 last_ack 状态;5. 客户端收到服务器的 fin 后,马上发送 ack 给服务器,此时客户端进入 time_wait 状态;6. 再过了 2msl 长的时间后进入 closed 状态。服务器收到客户端的 ack 就进入 closed 状态。
至此,还有一个状态没有出来:closing 状态。
closing 状态表示: 客户端发送了 fin,但是没有收到服务器的 ack,却收到了服务器的 fin,这种情况发生在服务器发送的 ack 丢包的时候,因为网络传输有时会有意外。
•listen:等待从任何远端 tcp 和端口的连接请求。•syn_sent:发送完一个连接请求后等待一个匹配的连接请求。•syn_received:发送连接请求并且接收到匹配的连接请求以后等待连接请求确认。•established:表示一个打开的连接,接收到的数据可以被投递给用户。连接的数据传输阶段的正常状态。•fin_wait_1:等待远端 tcp 的连接终止请求,或者等待之前发送的连接终止请求的确认。•fin_wait_2:等待远端 tcp 的连接终止请求。•close_wait:等待本地用户的连接终止请求。•closing:等待远端 tcp 的连接终止请求确认。•last_ack:等待先前发送给远端 tcp 的连接终止请求的确认(包括它字节的连接终止请求的确认)•time_wait:等待足够的时间过去以确保远端 tcp 接收到它的连接终止请求的确认。•time_wait 两个存在的理由:•可靠的实现 tcp 全双工连接的终止;•允许老的重复分节在网络中消逝。•closed:不在连接状态(这是为方便描述假想的状态,实际不存在)
单相三速电机和三相三速电机的接线图
使用NVIDIA TensorRT部署实时深度学习应用程序
区块链有潜力重塑金融业内部定义的流程
基于EFR32BG22 SoC 系列的低功耗蓝牙无线电子系统
Moku:Pro测试测量与控制一体化解决方案
TCP三次握手过程及四次挥手过程说明
通用型与达林顿型光耦的区别
737 Max飞机停飞之后 波音又暂时停产14天
快恢复二极管
如何利用英飞凌最新一代1200V TRENCHSTOP™IGBT6单管设计400ADC三相便携式逆变焊机
70亿厦门通富微电子项目一期顺利封顶 二季度末试产
OPPO推出经典音频产品的合集,秒杀一大波的回忆
显示器保险丝损坏的判断方法
美国研究人员开发出首个含半导体元件的微型机器人
Mentor面向线束设计环境推出Capital Harness TVM工具
多措并举推进党建和业务工作深度融合
TCL么么哒3N高清图赏
投资者开发无人售货机解决方案30天净赚1.7个亿?低调富豪手把手教你如何步步为赢?
科学性发明新型高能超薄太阳能电池板
BGA返修台的应用场景