首页 > 其他分享 >TCP/UDP/IP协议 自述

TCP/UDP/IP协议 自述

时间:2024-03-24 12:34:04浏览次数:27  
标签:UDP ACK IP 确认 TCP server client 服务端 客户端

TCP包协议格式

SYN—为1表示这是连接请求或是连接接受请求,用于创建连接和使顺序号同步
ACK—为1表示确认号字段有效

TCP协议三次握手流程主要就是 SYN 和ACK字段。

服务器开始属于监听 状态。
1、 客户端发送连接请求。SYN置为1. 序列号 为1234
2、 服务器收到请求。ACK置为1, 确认号码就是收到的包序列号+1. 1234 + 1 = 1235 。然后发送给客户端。
3、 客户端收到服务端,然后确认号码为 ACK+1. 1235 + 1 = 1236. 发送给客户端。
四次挥手

抓包分析


123 包是三次握手
4567是数据传输确认
8、9、 10、11是四次挥手。
注意:客户端和服务端都可以主动发起挥手。

  • 第一次握手+第二次握手

Flags:只有syn为1. 源端口是系统分配。目标端口是固定的12346 seq也是操作系统自己分配。
服务端和客户端自己的序列号是不一样的。

  • 第三次握手

  • 客户端开始发送实际的应用数据

  • 服务端确认 收到消息
    疑问。为啥这里的确认号不是客户端序列号+1了
    4010677602 -> 4010677616

  • 服务端给客户端发送消息

    发现 服务端发送的俩个 包序列号和确认号一致

  • 客户端回复确认收到消息

  • 服务端准备断开连接开始挥手。第一次挥手

    FIN置为1

  • 客户端确认收到服务端要断开的连接。

  • 客户端也告诉服务端,要断开连接,

  • 服务端确认收到客户端断开连接。并确认

    服务器收到ACK应答报文段后,服务器就进入CLOSE(关闭)状态
    客户端处于TIME_WAIT状态时,此时的TCP还未释放掉,需要等待2MSL后,客户端才进入CLOSE状态。

表格展示

功能 发送方 接收方 序列号 确认号 Flag
握手1 client server 4010677601 0 SYN
握手2 server client 3905876082 4010677602 SYN,ACK
握手3 client server 4010677602 3905876083 ACK
客户端发送消息 client server 4010677602 3905876083 ACK,PUSH
服务端确认收到消息 server client 3905876083 4010677616 ACK
服务端发送消息 server client 3905876083 4010677616 ACK,PUSH
客户端确认收到消息 client server 4010677616 3905876097 ACK
服务端确认并开始请求断开 server client 3905876097 4010677616 ACK,FIN
客户端收到断开的请求,确认 client server 4010677616 3905876098 ACK
客户端页请求断开 client server 4010677616 3905876098 ACK,FIN
服务端收到客户端断开的请求,确认 server client 3905876098 4010677617 ACK

希望得到的 ACK 是自己上次的SEQ+data的数据长度字节数。 4010677602 +14(Hello, Server!) = 4010677616

标签:UDP,ACK,IP,确认,TCP,server,client,服务端,客户端
From: https://www.cnblogs.com/clllll/p/18092252

相关文章

  • Lecture 08 Shading 2 (Shading, Pipeline and Texture Mapping)
    Lecture08Shading2(Shading,PipelineandTextureMapping)ShadingfrequenciesP1每个面着色一次P2每个顶点着色一次,每个三角面内插值P3每个像素着色一次FlatShading(逐三角形)每个三角面是一个平面,只有一个法线在光滑表面效果不好Gouraudshading(逐顶点)每个......
  • P1002 [NOIP2002 普及组] 过河卒(动态规划)
    #include<bits/stdc++.h>usingnamespacestd;longlongdp[30][30];boolm[30][30];intmain(){ intAx,Ay,Mx,My; cin>>Ax>>Ay>>Mx>>My; Ax+=2;Ay+=2;Mx+=2;My+=2; dp[2][1]=1; m[Mx][My]=1; m[Mx-2][My-1]......
  • iPhone 15 Pro尺寸及处理器详解:长宽高具体参数与先进芯片技术
    iPhone15Pro采用了A17Pro芯片,这极大地增强了手机的性能,使得使用体验更为流畅。无论是玩游戏、观看视频还是进行办公室工作,这款芯片的出色性能都能确保iPhone15Pro轻松处理各种任务,带来极佳的使用体验。iPhone15pro活动爆降太给力了机会不容错过:Phone15pro活动在电池续......
  • 量化交易入门(十六)Backtrader、Zipline、PyAlgoTrade对比分析
    量化交易发展这么多年,有很多优秀的前辈为我们提供了各种开源的交易回测系统,我将对常用的Backtrader、Zipline、PyAlgoTrade这三个量化交易回测平台进行详细介绍,并进行对比分析。一、Backtrader概述:Backtrader是一个Python的事件驱动型回测框架,由社区驱动开发,功能全面且灵......
  • 【Linux网络】ip route 命令
    1.iproute命令1.1ip查看已有路由iproutelist#列出默认路由表,和下面这句结果相同iprouteshowtablemain结果(以Ubuntu为例):zx@ubuntu:~/Desktop/codes/muduo/build/release-cpp11/bin$ifconfigens33:flags=4163<UP,BROADCAST,RUNNING,MULTICAST>mt......
  • Linux环境下使用Eclipse Paho C 实现(MQTT Client)同步模式发布和订阅Message
    目录概述1同步模式和异步模式1.1同步模式1.2异步模式2下载和安装paho.mqtt.c3同步方式发布和订阅消息功能实现3.1MQTTClient参数配置3.2初始化MQTTClient3.3发布消息功能3.4订阅消息功能3.5解析订阅的信息4编译和测试4.1编译代码4.2运行5验证MQ......
  • 08-JavaScript事件监听
     <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>JS-事件-事件绑定</title></head><body><!--点击按钮,在控制台打印相关信息--><inputtype="button"......
  • `ij_javascript_spaces_within_imports = true` 这个设置表示在 JavaScript 代码的
    #http://editorconfig.orgroot=true[*]#表示所有文件适用charset=utf-8#设置文件字符集为utf-8indent_style=tab#缩进风格(tab|space)indent_size=4#缩进大小end_of_line=lf#控制换行类型(lf|cr|crlf)trim_trailing_whitespace=true#去除......
  • C# 压缩文件 GZipStream
    //官方文档:https://learn.microsoft.com/zh-cn/dotnet/api/system.io.compression.gzipstream?view=net-8.0/*GZipStream介绍*此类表示gzip数据格式,该格式使用行业标准算法进行无损文件压缩和解压缩。格式包括用于检测数据损坏的循环冗余检查值。gzip数据格式使用与......
  • 一文弄懂Javascript中的深拷贝和浅拷贝
    目录一文弄懂Javascript深拷贝与浅拷贝1Javascript数据存储规则2浅拷贝3部分深拷贝3.1Object.assign3.2slice()3.3concat()3.4拓展运算符4完全深拷贝4.1_.cloneDeep()4.2结构化拷贝4.3json.stringify()4.4循环递归4.5jQuery.extend()5总结一文弄懂J......