tcp 网络通信及抓包工具的使用

news2024/9/20 18:47:49

tcp网络通信

本地回环(Loopback)的概念

本地回环地址是一个特殊的IP地址,用于指向计算机本身的网络接口。在IPv4中,最常见的本地回环地址是127.0.0.1,而在IPv6中则是::1。这个地址用于测试网络软件,确保网络协议栈在本地计算机上正确运行,而不涉及实际的网络硬件。本地回环地址通常与一个虚拟的网络接口关联,在Linux系统中这个接口被称为lo。

本地回环的作用和重要性

本地回环接口允许在同一台计算机上运行的不同程序之间进行网络通信。这对于开发和测试网络应用程序非常有用,因为它提供了一个安全、可靠的环境来模拟网络交互,而无需实际的网络连接。

粘包问题的原因

TCP协议是面向流的,它不保证发送的数据包边界与接收端的数据包边界一致。这意味着,发送端发送的多个数据包可能会在接收端合并成一个大的数据包(接收端粘包),或者一个大的数据包在接收端被拆分成多个小包(发送端粘包)。粘包问题通常发生在以下情况:
  1.发送端发送数据时,TCP协议可能会根据网络状况和优化算法(如Nagle算法)合并多个数据包,以提高网络利用率。
  2.接收端应用程序处理数据的速度跟不上数据的接收速度,导致接收缓冲区中的数据累积,从而出现粘包现象。

解决粘包问题的方法

为了解决TCP粘包问题,可以采取以下几种方法:
  1.消息边界标记:在发送的消息中加入特定的边界标记(如换行符\n),接收端根据这些标记来分割数据。
  2.固定长度消息:确保每个消息都有固定的长度,接收端根据固定长度来接收数据。
  3.消息头包含长度信息:在每个消息前添加一个固定长度的消息头,包含消息的实际长度信息,接收端先读取消息头,再根据长度信息读取相应长度的数据。

recv函数

recv函数是网络编程中用于从套接字接收数据的系统调用。在C语言中,recv函数的原型通常如下:
ssize_t recv(int sockfd, void *buf, size_t len, int flags);

  1.sockfd:表示要从中接收数据的套接字描述符。
  2.buf:指向缓冲区的指针,用于存放接收到的数据。
  3.len:缓冲区的大小,即buf可以存储的最大字节数。
  4.flags:指定接收操作的行为,常用的标志包括0(正常接收)、MSG_PEEK(窥视接收的数据,不从接收缓冲区中移除数据)、MSG_WAITALL(等待直到接收到指定长度的数据)等。
recv函数在成功接收数据时返回实际接收的字节数,该值可能小于请求的长度。如果连接已关闭,recv返回0。如果发生错误,recv返回-1,并设置errno以指示错误类型。在非阻塞模式下,如果没有数据可读,recv可能立即返回-1,并设置errno为EAGAIN或EWOULDBLOCK.

 send函数

send函数是网络编程中用于向套接字发送数据的系统调用。在C语言中,send函数的原型通常如下:
ssize_t send(int sockfd, const void *buf, size_t len, int flags);

  1.sockfd:表示要发送数据的套接字描述符。
  2.buf:指向要发送数据的缓冲区的指针。
  3.len:要发送的数据的长度(以字节为单位)。
  4.flags:指定发送操作的标志,可以影响发送的行为,如MSG_NOSIGNAL(发送数据时忽略SIGPIPE信号)、MSG_DONTWAIT(设置为非阻塞模式)等。
send函数在成功发送数据时返回发送的字节数,如果发送失败则返回-1,并设置errno以指示错误类型.

wireshark抓包工具

Wireshark 简介

Wireshark 是一款开源的网络协议分析工具,广泛用于网络故障诊断、安全分析、软件和网络开发的调试。它能够捕获和详细显示网络上传输的数据包,支持数百种网络协议,并提供强大的过滤和搜索功能,帮助用户快速定位问题。

使用 Wireshark 抓包

1.启动 Wireshark:运行 Wireshark 应用程序,选择要监控的网络接口。
  2.开始捕获:选择网络接口后,点击“开始捕获”按钮,Wireshark 将开始捕获经过该接口的数据包。
  3.停止捕获:捕获数据包后,点击“停止捕获”按钮。
  4.数据包过滤:使用 Wireshark 的过滤功能,可以在捕获数据包时或捕获后过滤出特定的数据包,以便更精确地分析。
  5.数据包分析:双击数据包列表中的任何数据包,可以在详细面板中查看数据包的内容和协议结构。
  6.保存捕获文件:可以将捕获的数据包保存为 pcap 文件,以便后续分析或与其他人共享。
高级功能

TCP(Transmission Control Protocol,传输控制协议)

首部是TCP报文段的固定部分,它包含了用于建立、维护和终止TCP连接的控制信息。TCP首部的结构如下:
  1.源端口(Source Port):占2字节,标识发送应用程序的端口。
  2.目的端口(Destination Port):占2字节,标识接收应用程序的端口。
  3.序号(Sequence Number):占4字节,用于标识报文段中第一个字节的序号。
  4.确认号(Acknowledgment Number):占4字节,用于确认已成功接收的字节序号。
  5.数据偏移(Data Offset):占4位,指示TCP首部的长度,以32位字为单位。
  6.保留(Reserved):占6位,当前保留,必须设置为0。
  7.控制位(Control Flags):占6位,包含多个标志位,如SYN(同步序列编号)、ACK(确认)、PSH(推送)、RST(重置)、FIN(结束)等。
  8.窗口大小(Window Size):占2字节,指示接收窗口的大小,用于流量控制。
  9.校验和(Checksum):占2字节,用于检测首部和数据在传输过程中的错误。
  10.紧急指针(Urgent Pointer):占2字节,仅在URG控制位为1时有效,指示紧急数据的偏移量。
  11.选项(Options):长度可变,最长可达40字节,用于支持各种扩展功能。
  12.填充(Padding):用于确保首部的总长度是4字节的整数倍。
TCP首部的长度可变,但至少为20字节,这是因为首部的前20个字节是固定的,而选项字段是可选的,可以根据需要增加首部的长度.

UDP(User Datagram Protocol,用户数据报协议)

首部结构相对简单,包含以下几个字段:
  1.源端口(Source Port):占2字节,标识发送方的端口号。如果连接是无连接的,这个字段可以设置为0。
  2.目的端口(Destination Port):占2字节,标识接收方的端口号。
  3.长度(Length):占2字节,表示UDP数据报的总长度,包括首部和数据部分。
  4.校验和(Checksum):占2字节,用于检测UDP数据报在传输过程中是否发生错误。校验和字段是可选的,但在实际应用中通常会使用。
UDP首部不包含序列号、确认号、流量控制或拥塞控制等信息,因为UDP是一种无连接的协议,它不提供像TCP那样的可靠传输服务.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2070353.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【IoT】路由器/linux系统,如何使用shell查看系统硬件配置,传感器CPU温度,资源占用率等信息(以红米AX6000为例)

【IoT】路由器/linux系统,如何使用shell查看硬件配置,传感器CPU温度,系统资源占用率等信息(以红米AX6000为例) 文章目录 1、路由器拆机与测评(Redmi AX6000)2、通过telnet获得SSH3、linux系统信…

SpringBoot集成kafka接收消息

SpringBoot集成kafka接收消息 1、SpringBoot集成kafka接收消息2、Payload注解接收消息体内容3、Header注解接收消息头内容4、接收消息所有内容 1、SpringBoot集成kafka接收消息 生产者 package com.power.producer;import org.springframework.kafka.core.KafkaTemplate; imp…

【自动化】考试答题自动化完成答案,如何实现100%正确呢

一、科目仿真考试不能自动答题 我的答案是可以的,电脑程序可以模拟人的操作完成所有的答题并提交结束考试 二、分析页面内容 完成一个题目,包括判断题,对与错2选1答案,单选题ABCD4选1答案,多选题大家想一想 F12查看按…

基于机器学习的糖尿病数据分析与风险评估系统

B站视频及代码下载:基于机器学习的糖尿病数据分析与风险评估系统_哔哩哔哩_bilibili 1. 项目简介 糖尿病,作为一种在全球范围内广泛流行的慢性疾病,已经影响了数以百万计的人们的生活,给全球公共健康带来了严重的挑战。因此&#…

uni-app的示例项目--简单的登陆页面及列表页面

uni-app的示例项目--简单的登陆页面及列表页面 文章说明核心代码效果展示源码下载 文章说明 随着移动端使用占比升高,手机端的App、小程序也成了一些场景下的首选;采用uni-pp开发此类应用具有很多优势,它可以直接使用vue3进行开发&#xff0c…

集合论与位运算之间的转换

集合可以用二进制表示,二进制从低到高第 i 位为 1 表示 i 在集合中,为 0 表示 i 不在集合中。例如集合 {0,2,3} 可以用二进制数 1101(2)​ 表示;反过来,二进制数 1101(2)​ 就对应着集合 {0,2,3}。 例如集合 {0,2,3} 可以压缩成 …

干货|软件测试简历的编写以及注意事项

一、个人信息 1.年龄超过30岁的,就不体现年龄; 2.学历是本科的,以及专业是计算机的可以加上学历、专业2个标签,大专的则可以不体现; 3.英语过了四六级的可以加1个英语的标签; 4.如果你的户籍和面试城市…

Python入门级 序列全集 [ 继上篇 进阶版 持续更新中哞哞哞!!! ]例题较多

本文主要结合例题介绍了序列【常用函数、可迭代对象】,字典【函数、写法、定义、视图对象】,集合【常用函数】,运算符优先级。这几种数据集合在Python中也是蛮重要的,对于新手比较友好。 本文例题大多来自哔站up主鱼C-小甲鱼【Pyt…

系统编程 网络 http协议

http协议------应用层的协议 万维网&#xff1a;http解决万维网之间互联互通 计算机web端网络只能看到文字 1.如何在万维网中表示一个资源&#xff1f; url <协议>&#xff1a;//<主机>&#xff1a;<端口>/<路径> ------------------------------…

Adobe After Effects的插件--------CC Ball Action

CC Ball Action是粒子效果器,其将2D图层变为一个个由3D小球构成的图层。它是AE内置的3D插件。 使用条件 使用该插件的图层需是2D图层。 我们以一张图片素材为例: 给图片图层添加CC Ball Action效果控件,然后新建一个摄像机(利用摄像机旋转、平移、推拉工具,方便在各个角…

【LeetCode面试150】——36有效的数独

博客昵称&#xff1a;沈小农学编程 作者简介&#xff1a;一名在读硕士&#xff0c;定期更新相关算法面试题&#xff0c;欢迎关注小弟&#xff01; PS&#xff1a;哈喽&#xff01;各位CSDN的uu们&#xff0c;我是你的小弟沈小农&#xff0c;希望我的文章能帮助到你。欢迎大家在…

微服务基础与Spring Cloud框架

一、系统架构的演变 1.1单体应⽤架构 Web应⽤程序发展的早期&#xff0c;⼤部分web⼯程(包含前端⻚⾯,web层代码,service层代码,dao层代码)是将 所 有的功能模块,打包到⼀起并放在⼀个web容器中运⾏。 1.2 垂直应⽤架构 当访问量逐渐增⼤&#xff0c;单⼀应⽤增加机器带来的…

【Unity3D小技巧】Unity3D中实现FPS数值显示功能实现

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址QQ群&#xff1a;398291828 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 很简单也很使用的小技巧&#xff0c;就是在Unity…

PHP酒店宾馆民宿预订系统小程序源码

酒店宾馆民宿预订系统&#xff1a;一键解锁完美旅行住宿新体验 &#x1f31f; 开篇&#xff1a;告别繁琐&#xff0c;拥抱便捷预订新时代 在这个快节奏的时代&#xff0c;每一次旅行的规划都希望能尽可能高效与省心。想象一下&#xff0c;在规划一场说走就走的旅行时&#xf…

Nature | 小麦D基因组的起源和演化,野生近缘种对作物抗病改良具有重要潜力

image-20240815151428804 2024年8月14日沙特阿卜杜拉国王科技大学Brande B. H. Wulff 和 Simon G. Krattinger团队在Natue发表Origin and evolution of the bread wheat D genome研究论文&#xff0c;通过研究粗山羊草&#xff08;Aegilops tauschii&#xff0c;也被称为节节麦…

Ant-Design-Vue快速上手指南+排坑,操作详细步骤

Ant-Design-Vue是一款基于Vue.js的UI组件库&#xff0c;它不仅提供了丰富的高质量组件&#xff0c;还支持灵活的配置选项&#xff0c;使得开发者能够快速构建出既美观又功能强大的前端应用。下面将详细介绍Ant-Design-Vue的快速上手指南和排坑操作&#xff0c;帮助开发者顺利使…

Springboot整合mongodb和mysql两个数据库,mysql无法连接

一、问题 在日常开发中&#xff0c;难免需要用到mongodb和mysql数据库 当我在mongodb正常连接使用的时候&#xff0c;切换回mysql&#xff0c;发现无法连接 二、原因分析 1、端口查看被占用 winr打开命令提示符&#xff08;cmd&#xff09;&#xff0c;可以使用以下命令&…

html标签大合集一文入门

一、文档结构标签 <html>&#xff1a;网页的根标签 &#xff0c;嵌套包含所有标签。 <head>&#xff1a;头标签&#xff0c;包含文档的元数据用于编写网页的修饰内容&#xff0c;附加信息。 <body>&#xff1a;身体标签&#xff0c;用于编写展示内容&…

HTML5休闲小游戏《城市争夺战》源码,引流、刷广告利器

HTML5休闲小游戏《城市争夺战》源码&#xff0c;直接把源码上传到服务器就能使用了&#xff01; 下载链接&#xff1a;https://www.huzhan.com/code/goods468820.html

TCP Analysis Flags 之 TCP ACKed unseen segment

前言 默认情况下&#xff0c;Wireshark 的 TCP 解析器会跟踪每个 TCP 会话的状态&#xff0c;并在检测到问题或潜在问题时提供额外的信息。在第一次打开捕获文件时&#xff0c;会对每个 TCP 数据包进行一次分析&#xff0c;数据包按照它们在数据包列表中出现的顺序进行处理。可…