当前位置: 首页 > article >正文

【传输层协议】 TCP UDP协议 解析(一)

文章目录

    • TCP UDP 协议
    • TCP协议报文解析
      • 报文格式
      • TCP会话的建立-三次握手
      • TCP会话的确认
      • TCP会话的断开-四次挥手


TCP UDP 协议

TCP(Transmission control protocol) 传输控制协议是可靠的、面向连接的协议,但传输效率低,类似于打电话。
UDP(User datagram protocol) 用户数据报协议是不可靠、无连接的服务,但传输效率高,类似于群聊。

TCP在通信前需要建立关系 来确认之间状态图一
UDP在通信前不需要建立关系 来确认之间的状态
图二


TCP协议报文解析

报文格式

图三
TCP报文由首部和数据两部分组成。首部一般由20-60字节(Byte)构成,长度可变。其中前20B格式固定,后40B为可选。

结合Wireshark抓包分析TCP
图四

报文字段名称描述当前参数备注
Source Port源端口443长度为16位,指明发送数据的进程。
Destination Port目标端口63569长度为16位,指明目的主机接收数据的进程。
Sequence Number (raw)序列号2013525370也称为序列号,长度为32位,序号用来标识从TCP发送端向接入端发送的数据字节流进行编号,可以理解成对字节流的计数。
Acknowledgment number (raw)确认号67128956长度为32位,确认号包含发送确认的一端所期望收到的下一个序号。确认号只有在ACK标志为1时才有效。
Header Length头部长度(20 字节) 0101 .... 长度为4位,用于表示TCP报文首部的长度。用4位(bit)表示,十进制值就是[0,15],一个TCP报文前20个字节是必有的,后40个字节根据情况可能有可能没有。如果TCP报文首部是20个字节,则该位应是20/4=5。
Flags标志 0x010 长度为6位,在TCP报文中不管是握手还是挥手还是传数据等,这6位标志都很重要。
Reserved 预留000. .... ....(Not Set)
Accurate ECN ...0 .... .... (Not Set)
Congestion Window Reduced 窗口位.... 0... .... (Not Set)
ECN-Echo 阻塞位.... .0.. .... (Not Set)
Urgent 紧急指针位.... ..0. .... (Not Set) 紧急标志位,说明紧急指针有效;
Acknowledgment确认位.... ...1 .... 确认标志位,多数情况下空,说明确认序号有效;
Push上推功能.... .... 0... (Not Set) 推标志位,置位时表示接收方应立即请求将报文交给应用层;
Reset重置连接位.... .... .0.. (Not Set) 复位标志,用于重建一个已经混乱的连接;
Syn同步序列号.... .... ..0. (Not Set) 同步标志,该标志仅在三次握手建立TCP连接时有效
Fin终止位.... .... ...0(Not Set) 结束标志,带该标志位的数据包用于结束一个TCP会话。
Window窗口大小1077长度为16位,TCP流量控制由连接的每一端通过声明的窗口大小来提供。
Checksum校验和0x6eb5 (未经认证)长度为16位,该字段覆盖整个TCP报文端,是个强制性的字段,是由发送端计算和存储,到接收端后,由接收端进行验证。
Urgent Pointer紧急指针0长度为16位,指向数据中优先部分的最后一个字节,通知接收方紧急数据的长度,该字段在URG标志置位时有效。

TCP会话的建立-三次握手

拓扑图
在这里插入图片描述
**三次握手机制类似打电话 **
第一次握手:你是小王?在这里插入图片描述
第二次握手:我是小王,你是小刘?
在这里插入图片描述
第三次握手:好的,我知道了
在这里插入图片描述
结合报文信息,总结通信流程
在这里插入图片描述


TCP会话的确认

对每个数据包都会进行确认,这并不意味着客户端发几次数据,服务端就会回几次确认信号具体如下
在这里插入图片描述
发送数据包1460字节:客户端 192.168.1.12:2071 ——> 服务端192.168.1.13:2058
在这里插入图片描述
发送数据包1460字节:客户端 192.168.1.12:2071 ——> 服务端192.168.1.13:2058
在这里插入图片描述
对前面客户端两次发送的数据进行确认,并回复:服务端192.168.1.13:2058 ——> 客户端 192.168.1.12:2071
在这里插入图片描述
总结这次的数据报文流程
在这里插入图片描述
接着再看一回合的数据,
发送数据包1460字节:客户端 192.168.1.12:2071 ——> 服务端192.168.1.13:2058
在这里插入图片描述
发送数据包1460字节:客户端 192.168.1.12:2071 ——> 服务端192.168.1.13:2058
在这里插入图片描述
发送数据包1460字节:客户端 192.168.1.12:2071 ——> 服务端192.168.1.13:2058
在这里插入图片描述
对前面客户端三次发送的数据进行确认,并分开两次回复:服务端192.168.1.13:2058 ——> 客户端 192.168.1.12:2071
在这里插入图片描述
在这里插入图片描述
结合之前会话传输报文信息,总结流程
在这里插入图片描述
如上面通讯分析:
客户端发送两组数据,服务端将这两组数据都确认号后回应一条ack信号
客户端发送三组数据,服务端收到数据后,分两次确认。对收到序列字段确认号之后发送两次的ack。

滑动窗口机制
窗口大小 决定了在收到确认前可以发送的字节数
在这传输期间会出现客户端或者服务端处理过快或者过慢的情况,这是使用滑动窗口(Win)大小来告知对方传输数据的数量。举例两个场景:
客户端发送Win:8192给服务器,是告诉服务器你可以发送最多8192个字节
服务器同样会发送Win:6732给客户端,是告诉客户端你可以发送最多6732个字节


TCP会话的断开-四次挥手

在这里插入图片描述
第一次挥手:我要挂电话咯
在这里插入图片描述
第二次挥手:好的
在这里插入图片描述
第三次挥手:我也要挂电话咯
在这里插入图片描述
第四挥手:好的
在这里插入图片描述
总结四次挥手机制流程
在这里插入图片描述
注:第一条报文包括传输的数据以及断开连接信号的确认

http://www.lryc.cn/news/2417779.html

相关文章:

  • FLOPs如何计算
  • 取拼音字头
  • VB 在Visio 2010 以编程方式创建子进程图
  • 根文件系统(二):busybox
  • 浅谈NBIOT
  • 全网最全python教程,从零到精通(学python有它就够必收藏)_python学习相关博客
  • 如何使用好google学术?
  • js刷新当前页面的5种方式
  • LNMP架构环境搭建(Linux+Nginx+Mysql+PHP)
  • 数组详细讲解
  • loki介绍
  • 正确配置安装和卸载Cygwin
  • Windows server 2016——SQL server 简介与安装
  • 都2023年了,Servlet还有必要学习吗?一文带你快速了解Servlet
  • Activiti入门及案例
  • window硬盘管理
  • 什么是UTF-8编码
  • spice新手学习手册
  • 我的docker随笔38:用 registry 搭建私有仓库
  • 常用概率分布的矩母函数、特征函数以及期望、方差的推导
  • ActiveMQ:消息的优先级与抢占机制
  • Tomcat下载及配置(IDEA)
  • Linux服务器JDK安装环境变量配置详细步骤
  • 【Java技术专题】「Guava技术系列」Guava-Collections实战使用相关Guava不一般的集合框架
  • CountDownLatch 和 CyclicBarrier 使用场景详解
  • 2024年安卓最全理解Android虚拟机体系结构,2024年最新Android高级工程师进阶学习
  • U盘启动盘怎么制作?
  • Regression算法之通俗讲解
  • UTF-8基础
  • 算法刷题笔记——动态规划篇