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

TCP系列相关内容

一、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字节。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • AI作曲工具真的这么神奇?新手也能出音乐!
  • 多指标用于评估文本生成模型的性能
  • zdppy+vue3+onlyoffice文档管理系统实战 20240823上课笔记 zdppy_cache框架的低代码实现
  • 计量自动化终端上行通信规约
  • Vue3 自定义指令
  • 【网络安全】服务基础第一阶段——第二节:网络测试与用户
  • 学习记录:js算法(十三):移动零、验证回文串
  • 考研备考是选择电子学习工具无纸化学习?还是纸质版训练考感?
  • 《javaEE篇》--线程池
  • C++ 适配器 priority_queue(优先级队列)
  • Aiseesoft Mac Video Converter Ultimate:高效多能的视频转换与编辑工具
  • 【教程】Leetcode 必知必会常用函数(C 语言版)
  • C# 时间日期运算
  • HarmonyOS NEXT 地图服务中‘我的位置’功能全解析
  • 基于机器学习的二手房房价数据分析与价格预测模型
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • ComponentOne 2017 V2版本正式发布
  • Effective Java 笔记(一)
  • ES6语法详解(一)
  • ES学习笔记(12)--Symbol
  • HashMap剖析之内部结构
  • JS变量作用域
  • LeetCode18.四数之和 JavaScript
  • leetcode-27. Remove Element
  • Web Storage相关
  • 初识MongoDB分片
  • 基于Android乐音识别(2)
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 解析带emoji和链接的聊天系统消息
  • 利用DataURL技术在网页上显示图片
  • 模型微调
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 想写好前端,先练好内功
  • 小而合理的前端理论:rscss和rsjs
  • PostgreSQL之连接数修改
  • 格斗健身潮牌24KiCK获近千万Pre-A轮融资,用户留存高达9个月 ...
  • 选择阿里云数据库HBase版十大理由
  • #QT项目实战(天气预报)
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (五)关系数据库标准语言SQL
  • (一)RocketMQ初步认识
  • (一)u-boot-nand.bin的下载
  • (转)全文检索技术学习(三)——Lucene支持中文分词
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .mp4格式的视频为何不能通过video标签在chrome浏览器中播放?
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .netcore如何运行环境安装到Linux服务器
  • .NET建议使用的大小写命名原则
  • .net开发日常笔记(持续更新)
  • .考试倒计时43天!来提分啦!
  • /proc/vmstat 详解