【VS开发】【DSP开发】TCP和UDP数据包结构
TCP (Transport Control Protocol)传输控制协议:
1、TCP数据包的分组格式:
A,源端口:标识源端应用进程。
B, 目的端口:标识目的端应用进程。
C, 序号:在SYN标志未置位时,该字段指示了用户数据区中第一个字节的序号;在SYN标志置位时,该字段指示的是初始发送的序列号。
D,确认号:用来确认本端TCP实体已经接收到的数据,其值表示期待对端发送的下一个字节的序号,实际上告诉对方,在这个序号减1以前的字节已正确接收。
E, 数据偏移:表示以32位字为单位的TCP分组头的总长度,用于确定用户数据区的起始位置。
F, URG:紧急指针字段有效。
G,ACK:确认好有效。
H,PSH:Push操作。TCP分组长度不定,为提高传输速率,往往要收集到足够的数据后才发送。这种方式不适合实时性要求很高的应用,因此,TCP提供“Push”操作,以强迫传输当前的数据,不必等待缓冲区满才传输。
I, RST:连接复位,重新连接。
J, SYN:同步序号,该比特置位表示连接建立分组。
K,FIN:字符串发送完毕,没有其它数据需要发送,该比特置位表示连接确认分组。
L, 窗口:单位是字节,指明该分组的发送端愿意接收的从确认字段中的值开始的字节数量。
M, 校验和:对TCP分组的头部和数据进行校验。
N,紧急指针:指出窗口中紧急数据的位置(从分组序号开始的正向位移,指向紧急数据的最后一个字节),这些紧急数据应优先于其它的数据进行传输。
O,任选项:用于处理一些特殊情况。目前被正式使用的选项字段可用于定义通信过程中的最大分组长度,只能在连接建立时使用。
P, 填充:用于保证任选项为32bit的整数倍。

2、TCP三次握手、四次断开的机制:
三次握手:
第一次握手:客户端发送一个SYN(包含有同步序列号的标志位的数据段和通信请求)给服务器,然后等待服务器的回发确认信息
第二次握手:服务器发送一个SYN-ACK给客户端,确认已经收到客户端发来的信息
第三次握手:客户端接收到服务器发来的确认信息后,再回馈一个ACK给服务器,此时就可与服务器建立可靠的连接
ACK:TCP数据包首部中的确认标志,对已接收到的TCP报文进行确认。
SYN:SYN是TCP/IP建立连接时使用的握手信号。
四次断开:
因为TCP/IP的连接是全双工的,所以每个方向都要单独进行关闭。
每当TCP单方向上的数据传输过后,都会再送一个FIN过去,告诉对方我这方向上的数据将要关闭了,请你做好准备哦。当对方接到FIN后就会通知应用层TCP连接已经终止了这一方向上的数据的传输。发送FIN通常是应用层进行关闭的结果。
第一次:客户端向服务器发送数据后,将FIN置1,告诉它我将要关闭这一方向上的数据连接。
第二次:服务器接受到FIN后,关闭该方向上的数据的连接。将ACK置1,告诉客户端我已经接收到你的信息并以处理。
第三次:向客户端申请反方向上的数据连接的断开。将FIN置1。
第四次:客户端接到服务器发来的申请,将ACK置1,双方同时关闭连接。
UDP(User Datagram Protocol)用户数据报协议:
UDP首部字段由4个部分组成,其中两个是可选的。各16bit的来源端口和目的端口用来标记发送和接受的应用进程。因为UDP不需要应答,所以来源端口是可选的,如果来源端口不用,那么置为零。在目的端口后面是长度固定的以字节为单位的长度域,用来指定UDP数据报包括数据部分的长度,长度最小值为8byte。首部剩下地16bit是用来对首部和数据部分一起做校验和(Checksum)的,这部分是可选的,但在实际应用中一般都使用这一功能。

3、与TCP包的不同之处:
无需三次握手四次断开,传输速度相对于TCP极快,不确定性,甚至可以不需要应答,没有TCP数据包的安全性,有丢包现象。

UDP数据报格式有首部和数据两个部分。首部很简单,共8字节。包括:
◆源端口(Source Port):2字节,源端口号。
◆目的端口(Destination Port ):2字节,目的端口号。
◆长度(Length):2字节,UDP用户数据报的总长度,以字节为单位。
◆检验和(Checksum):2字节,用于校验UDP数据报的数字段和包含UDP数据报首部的“伪首部”。其校验方法同IP分组首部中的首部校验和。
伪首部,又称为伪包头(Pseudo Header):是指在TCP的分段或UDP的数据报格式中,在数据报首部前面增加源IP地址、目的IP地址、IP分组的协议字段、TCP或UDP数据报的总长度等共12字节,所构成的扩展首部结构。此伪首部是一个临时的结构,它既不向上也不向下传递,仅仅只是为了保证可以校验套接字的正确性。

【VS开发】【DSP开发】TCP和UDP数据包结构的更多相关文章
- [转]SOCKET通信中TCP、UDP数据包大小的确定
TCP.UDP数据包大小的确定 UDP和TCP协议利用端口号实现多项应用同时发送和接收数据.数据通过源端口发送出去,通过目标端口接收.有的网络应用只能使用预留或注册的静态端口:而另外一些网络应用则可以 ...
- [转]TCP、UDP数据包大小的确定
TCP.UDP数据包大小的确定 http://blog.163.com/jianlizhao%40126/blog/static/1732511632013410101827640/ U ...
- TCP、UDP数据包大小的限制(UDP数据包一次发送多大为好)——数据帧的物理特性决定的,每层都有一个自己的数据头,层层递减
1.概述 首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层. 其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或UDP中的数据(Da ...
- TCP、UDP数据包大小的限制
版权声明:本文为灿哥哥http://blog.csdn.net/caoshangpa 原创文章,转载请标明出处. https://blog.csdn.net/caoshangpa/article/de ...
- 【转】TCP、UDP数据包大小的限制
来自:https://blog.csdn.net/caoshangpa/article/details/51530685 1.概述 首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层 ...
- TCP和UDP数据包大小限制
1.概述 首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层. 其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或UDP中的数据(Da ...
- TCP/IP各种数据包结构体
下面这些TCP/IP数据包是我在进行Socket及Wipcap网络编程过程中曾经用到过的数据包结构体, 这些东西平时看起来不起眼,真正用到的时候就会觉得非常有用...... 以太帧头格式结构体,共14 ...
- 【VS开发】浅谈UDP(数据包长度,收包能力,丢包及进程结构选择)
UDP数据包长度 UDP数据包的理论长度 udp数据包的理论长度是多少,合适的udp数据包应该是多少呢?从TCP-IP详解卷一第11章的udp数据包的包头可以看出,udp的最大包长度是2^16-1的个 ...
- 以太网,IP,TCP,UDP数据包分析【转】
原文地址:http://www.cnblogs.com/feitian629/archive/2012/11/16/2774065.html 1.ISO开放系统有以下几层: 7 应用层 6 表示层 5 ...
随机推荐
- ML paper 导图笔记.md
<Learning Structured Representation for Text Classification via Reinforcement Learning> <基于 ...
- 自己封装的Java excel数据读取方法
package org.webdriver.autotest.data; import jxl.Workbook; import jxl.Sheet; import jxl.Cell; import ...
- 【CUDA 基础】3.2 理解线程束执行的本质(Part I)
title: [CUDA 基础]3.2 理解线程束执行的本质(Part I) categories: CUDA Freshman tags: 线程束分化 CUDA分支 toc: true date: ...
- Makefile简单编写实例
介绍一下Makefile的简单编写例子. 编写Makefile的规则就是: 目标文件:依赖文件 (tab)编译规则 现在我有一个文件目录结构为: 解释一下这几个文件.首先我创建makefile目录,底 ...
- Linux之防火墙iptables
一.检查iptables服务状态 1.首先检查iptables服务的状态 [root@bogon ~]# service iptables status iptables: Firewall is n ...
- PHP-windows下安装
下载 Apache下载地址:http://httpd.apache.org/download.cgi PHP下载地址:http://php.net/downloads.php 解压 解压到安装路径下H ...
- Vue2实践computed监听Vuex中state对象中的对象属性时发生的一些有趣经历
今天想实现一个功能,在全局中随时改变用户的部分信息.这时候就想到了用Vuex状态控制器来存储用户信息,在页面中使用computed来监听用户这个对象.看似一个很简单的逻辑,就体现了我基本功的不扎实呀. ...
- JavaScript 高级系列之节流 [throttle] 与防抖 [debounce]
一.概念 这两个东西都是为了项目优化而出现的,官方是没有具体定义的,他们的出现主要是为了解决一些短时间内连续执行的事件带来性能上的不佳和内存的消耗巨大等问题:像这类事件一般像 scroll keyup ...
- EFI/UEFI BIOS 入门
我们已经使用BIOS超过了二十年.可是直到今天还有许多朋友不知道BIOS到底是什么,以及它主要做些什么事情,它在整个个人计算机之中所处的地位如何.事实上,BIOS是整个计算机系统中最重要的底层系统软件 ...
- HighCharts 动态设置 series
var series = new Array(); var map = response.extend.map; $.each(map, function (key,values) { series. ...