TCP系列相关内容

devtools/2024/9/23 21:18:45/

一、TCP上传文件

loop——本地回环测试地址。

void *memset(void *s,int c,size_t n)——给一个变量设定一个值。

1、“粘包”问题

两次分别发送的数据,被一起接收形成该现象。

原因:TCP流式套接字,数据与数据间没有边界,导致多次的数据粘到一起。

解决“粘包”:①规定一些数据与数据之间的间隔符。

                ②可以指定要发送的数据的长度。

                ③自己将数据打包(如struct结构体形式)。

2、“分/拆包”问题

一次发送的数据,被分为两次/多次接收形成该现象。

原因:①TCP中socket缓冲区限制;②TCP以字节流形式发送。

注:UDP没有粘包问题;本身就是以数据报形式,打包发出,相互独立。

例如:-------客户端-------上传文件-------

--------服务器端-------接收文件---------

专门用在网络中的读写:

ssize_t recv(int sockfd , void *buf , size_t len , int flags);  //读(read)

ssize_t send(int sockfd , const void *buf , size_t len , int flags)    //写(write)

二、网络工具

wireshark   抓包工具——抓取网络上数据。

安装:sudo apt install wireshark

打开运行:sudo wireshark

封包:

1、TCP报文段的首部格式

        TCP虽然是面向字节流的,但TCP传送的数据单元却是报文段。一个TCP报文段分为
首部和数据两部分,而TCP的全部功能都体现在它首部中各字段的作用。

        TCP首部的最小长度是20字节。

(1)源端口和目的端口:各占2个字节,分别写入源端口号和目的端口号。

(2)序号:占4字节。在一个TCP连接中传送的字节流中的每一个字节都按顺序编号。也称“报文段序号”

(3)确认号:占4字节,是期望收到对方下一个报文段的第一个数据字节的序号。

(4)数据偏移:占4位,它指出TCP报文段的数据起始处距离TCP报文段的起始处有多远。这个字段实际上是指出TCP报文段的首部长度。数据偏移最大值为60字节。

(5)保留:占6位,保留为今后使用,但目前应置为0。

(6)6个控制位

紧急URG(URGent):为1有效;高优先级数据。与紧急指针字段配合使用。

确认ACK (ACKnowl egment):1有效,0无效。建立连接后,所有ACK都置1。

推送PSH (PuSH):为1时发送方创建一个报文段发出,接收方收到PSH=1的报文段,就尽快交付给应用进程,不用等待缓存填满后再交付。

复位RST (ReSeT) :当RST = 1时, 表明 TCP连接中出现严重差错(如由千主机崩溃或其他原因),必须释放连接, 然后再重新建立运输连接。 RST詈1还用来拒绝一个非法的报文段或拒绝打开一个连接。 RST也可称为重建位或重置位。

同步SYN (SYNchronization) :在连接 建立时用来同步序号。 当SYN= 1而ACK
= 0时, 表明这 是一个连接请求报文段。 对方若同意建立连接, 则应在响应的报文段中使
SYN= 1和ACK= 1。 因此, SYN置为1就表示这是一个连接请求或连接接受报文。

终止FIN (FINis, 意思是 “ 完 "、"终 " ): 用来释放一个连接。 当FIN= 1时, 表明此报文段的发送方的数据已发送完毕, 并要求释放运输连接。

窗口:占2字节。是指接收方窗口。窗口字段明确指出了现在允许对方发送的数据量。 窗口值是经常在动态变化着。之所以要有这个限制, 是因为接收方的数据缓存空间是有限的。 窗口值作为接收方让发送方设置其发送窗口的依据。

(7)检验和:占2字节。检验和字段检验的范围包括首部和数据这两部分。

(8)紧急指针:占2字节。1有效。

(9)选项:长度可变, 最长可达40字节。 当没有使用选项时, TCP的首部长度是 20字节。


http://www.ppmy.cn/devtools/99981.html

相关文章

探索结直肠癌的免疫逃逸机制:单细胞分析揭示患者分层

探索结直肠癌的免疫逃逸机制:单细胞分析揭示患者分层 在最新的科学研究中,结直肠癌(CRC)的复杂性和异质性一直是研究者们关注的重点。近期,一篇题为《Integrative single-cell analysis of human colorectal cancer r…

智云-一个抓取web流量的轻量级蜜罐docker一键启动

智云-一个抓取web流量的轻量级蜜罐docker安装教程 github地址 https://github.com/xiaoxiaoranxxx/POT-ZHIYUN docker快速启动(v1.4) git clone https://github.com/xiaoxiaoranxxx/POT-ZHIYUN.git cd POT-ZHIYUN docker-compose up -d默认映射到80和8080端口 mysql不对外开放…

「对比评测」标准WPF DataGrid与DevExpress WPF GridControl有何不同?(一)

DevExpress WPF拥有120个控件和库,将帮助您交付满足甚至超出企业需求的高性能业务应用程序。通过DevExpress WPF能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。 无论是Office办公软件…

牛客小白月赛99

文章目录 A.材料打印B. %%%C.迷宫又是一年毕业季题目链接 A.材料打印 签到题&#xff0c;直接按照题意输出就行。赛时写的有点慢了&#xff0c;这种题应该一分钟之内写完的 void solve () {int n;cin>>n;for (int i1;i<n;i) {int a,b,c,d;cin>>a>>b>…

npm install常见错误以及解决办法

在使用 Node.js 开发项目时&#xff0c;npm install 是开发者经常使用的命令&#xff0c;用于安装项目依赖库。然而&#xff0c;由于环境配置、网络问题或者包的版本兼容性等问题&#xff0c;npm install 有时会遇到一些常见错误。本文将总结几种常见错误及其解决方法&#xff…

ffmpeg.exe命令行参数的简单介绍

关于ffmpeg.exe ffmpeg.exe 是一个开源的多媒体处理工具&#xff0c;广泛应用于音视频的录制、转换、流媒体处理等领域。它由FFmpeg项目开发&#xff0c;支持多种音视频格式&#xff0c;并提供了丰富的命令行选项&#xff0c;使其功能强大且灵活。 功能应用 格式转换&#x…

JS中Object.prototype.toString方法解读

Object.prototype.toString 是 JavaScript 中一个非常重要的方法&#xff0c;用于获取对象的类型信息。它的主要功能是返回一个表示对象类型的字符串。 1. 基本用法 Object.prototype.toString 是 Object 原型链上的一个方法&#xff0c;所有对象都可以访问它。默认情况下&am…

Array List 练习(添加手机对象并返回要求的数据)

package ArrayListDemo;import java.util.ArrayList;public class ArrayListDemo7 {public static void main(String[] args) {//1.创建集合对象ArrayList<Phone> list new ArrayList<Phone>();//2.创建手机对象Phone ph1 new Phone("小米",1000);Pho…