沾包问题,wireshark和netstat的使用

ops/2024/10/18 22:33:40/

一.沾包

TCP是一个面向字节流的传输层协议。“流” 意味着 TCP 所传输的数据是没有边界的。这不同于 UDP 协议提供的是面向消息的传输服务,其传输的数据是有边界的。TCP 的发送方无法保证对方每次收到的都是一个完整的数据包。于是就有了粘包、拆包问题的出现。粘包、拆包问题只发生在TCP协议中。

TCP协议是面向字节流的协议,接收方不知道消息的界限,不知道一次提取多少数据,这就造成了粘包问题。

粘包问题出现的原因: 

     1. 发送端:需要等缓冲区满时才发送出去,造成粘包;

     2. 接收端:不及时的接收缓冲区内的包,造成多个包接收。

 避免粘包问题的方法:

     1. 对于定长的包,保证每次都按固定大小读取即可;//  结构体

     2. 对于变长的包,还可以在包和包之间使用明确的分隔符,这个分隔符是由程序员自己来定的,只要保证分隔符不和正文冲突即可。


     
TCP报文头

    标志位:
    1. URG: 紧急指针标志, 为1时表示紧急指针有效, 该报文应该优先传送。
    2. ACK: 确认应答标志
    3. PSH:  表示发送数据,提示接收端从TCP接收缓冲区中读走数据,为接收后续数据腾出空间
    4. RST: 重置连接标志
    5. SYN: 表示请求建立一个连接
    6. FIN: finish标志, 表示释放连接

TCP的机制

TCP复杂是因为它既要保证可靠性,同时又要尽可能的提高性能。

    可靠性:

        (1)三次握手和四次挥手机制
        
         (2) 确认应答:TCP将每个字节的数据都进行了编号,即为序列号。每一个ACK都带有对应的确认序列号,保证数据不丢失的按序到达

        (3)超时重传:当发送端发送的数据在网络中丢失时,在一定时间内没有收到接收端的ACK,则发送端会重新发送丢失数据。

        (4)流量控制:按照ACK中“窗口大小”字段控制发送端的发送速度

二.wireshark抓包工具

 

 

三.# ubuntu开启telnet服务
sudo apt-get install openbsd-inetd
sudo apt-get install telnetd
sudo /etc/init.d/openbsd-inetd restart
注意:
安装之前,确保ubuntu能上网
ping www.baidu.com
# 查看 telnet服务是否开启
sudo netstat -a | grep telnet 

四.netstat

 


http://www.ppmy.cn/ops/102446.html

相关文章

一个初始化的服务器,需要配置的相关软件以及环境(cuda、torch、conda)

文章目录 一个刚初始化的服务器需要下载的应用google chromeghelp 解压安装包解压大型zip文件 更新nvidia的驱动pycharm设置conda相关下载condaconda换源 torch相关安装torch包,浏览器下载包安装pytorch常用包安装 导包的方法 一个刚初始化的服务器需要下载的应用 …

企业网站必选HTTPS证书——OV证书(申请教程)

相对于个人网站来说,企业网站指部署HTTPS证书时,需要考虑的方面更多,一般的DV类型证书已经满足不了企业网站的基础需求,企业网站在选择HTTPS整肃时,应更倾向于OV类型证书。OV证书(组织验证证书)…

Flink窗口API使用教程

引言 已经了解了 Flink 中窗口的概念和分类,接下来我们就要看看在代码中怎样使用了。 窗口 API 概览 按键分区(Keyed)和非按键分区(Non-Keyed) 在定义窗口操作之前,首先需要确定,到底是基于按键分区(Keyed)的数据流 KeyedStream来开窗,还是直接在没有按键分区的 Da…

【随记】开源 AI(Open source AI)

开源 AI(Open source AI) 1. 开源AI的重要性 2. 主要开源AI框架和工具 3. 开源AI项目的典型应用 4. 参与开源AI社区的好处 5. 开源AI的挑战与风险 6. 未来展望 🎈边走、边悟🎈迟早会好 开源人工智能(Open Source AI)指的是…

基于SpringBoot的在线答疑管理系统

基于SpringBootVue的在线答疑管理系统【附源码文档】、前后端分离 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/Ecilpse、Navicat、Maven 系统展示 摘要 基于SpringBoot的在线答疑管理系…

OpenCV绘图函数(7)从一个椭圆定义中提取出多边形的顶点坐标函数ellipse2Poly()的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 近似一个椭圆弧为一个多边形线。 函数 ellipse2Poly 计算近似指定椭圆弧的多边形线的顶点。它被 ellipse 函数所使用。如果 arcStart 大于 arcEn…

监控摄像头和电脑监控软件如何选择?它们有什么区别吗?保姆式详细解析,你不容错过!

在信息化时代,无论是家庭安全还是企业管理,监控设备都扮演着至关重要的角色。然而,面对监控摄像头和电脑监控软件这两种选择,你是否曾感到困惑?它们究竟有何不同?又该如何根据自身需求做出最佳选择呢&#…

第七章 rust中的生命周期详解

注意 本系列文章已升级、转移至我的自建站点中,本章原文为:rust中的生命周期注解 目录 注意一、前言二、生命周期注解三、注解省略四、静态生命周期一、前言 如果你学过任何一门编程语言,我相信你对生命周期都应该是不陌生的,不理解的可以先看一看:常量与变量。 这个概…