07-网络篇-抓包分析TCP

为了抓包方便一些,我在ubuntu虚拟机运行服务端程序,而在windows运行客户端程序,关于客户端与服务端程序如下。
##1.程序
客户端:
vs_client.cpp

#include "stdafx.h"
#include <iostream>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")
using namespace std;
int main(){WSADATA wsaData;if(WSAStartup(MAKEWORD(2,2),&wsaData)){cout<<"WinSock不能被初始化";WSACleanup();return 0;}SOCKET sockCli;sockCli=socket(AF_INET,SOCK_STREAM,0);SOCKADDR_IN addrSer;addrSer.sin_family=AF_INET;addrSer.sin_port=htons(8899);addrSer.sin_addr.S_un.S_addr=inet_addr("192.168.6.139");int res=connect(sockCli,(SOCKADDR *)&addrSer,sizeof(SOCKADDR));if(res){cout<<"客户端连接服务器失败"<<endl;return -1;}else{cout<<"客户端连接服务器成功"<<endl;}//3.向服务端发送消息char send_buf[256] = "hello server===>>>";char recv_buf[512];send(sockCli,send_buf,sizeof(send_buf),0);//4.接收服务端发来的消息int len = recv(sockCli,recv_buf,sizeof(recv_buf)-1,0);recv_buf[len] = '\0';printf("收到服务端的返回:%s\n",recv_buf);Sleep(100);closesocket(sockCli);WSACleanup();while(1){Sleep(100);}return 0;
}

服务端:
sever.c

#include <unistd.h>
#include <sys/types.h>         
#include <sys/socket.h>
#include <arpa/inet.h>
#include <string.h>
#include <stdio.h>int main()
{//1.创建一个socket文件,也就是打开一个网络通讯端口int serv_sock = socket(AF_INET, SOCK_STREAM,0);//2.绑定服务器ip和端口到这个socketstruct sockaddr_in serv_addr;memset(&serv_addr, 0, sizeof(serv_addr));//先清空一下初始的值,写上地址和端口号serv_addr.sin_family = AF_INET;serv_addr.sin_addr.s_addr = inet_addr("192.168.6.139");//本机ipserv_addr.sin_port = htons(8899);//随意选了一个端口8899bind(serv_sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));//3.将socket设置为监听状态listen(serv_sock,128);//设置最大连接数为128//4.准备接收客户端的请求连接,这里的步骤可以重复进行,接收多个客户端的请求while(1){//接收客户端的请求连接后,返回一个新的socket(clnt_sock)用于和对应的客户端进行通信struct sockaddr_in clnt_addr;socklen_t clnt_addr_size = sizeof(clnt_addr);int clnt_sock = accept(serv_sock, (struct sockaddr*)&clnt_addr, &clnt_addr_size);//5.读取客户端发送来的数据char recv_buf[256];char send_buf[512]="hello client";int len = read(clnt_sock,recv_buf,sizeof(recv_buf)-1);recv_buf[len] = '\0';//字符串以“\0”结尾//6.打印出客户端发来的消息printf("recv client:%s\n",recv_buf);write(clnt_sock,send_buf,sizeof(send_buf));sleep(3);//8.关闭客户端连接close(clnt_sock);sleep(2);break;}//9.关闭服务端监听的socketclose(serv_sock);return 0;
}

在Ubuntu上,我们可以通过ifconfig命令,查看到系统的IP地址。

$ ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500inet 192.168.6.139  netmask 255.255.255.0  broadcast 192.168.6.255inet6 fe80::8bc1:6df8:a7f2:95c5  prefixlen 64  scopeid 0x20<link>ether 00:0c:29:4a:43:e6  txqueuelen 1000  (Ethernet)RX packets 11886  bytes 3135825 (3.1 MB)RX errors 0  dropped 0  overruns 0  frame 0TX packets 13969  bytes 11893886 (11.8 MB)TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

##2.抓包
关于windows平台的抓包,这里不描述,本次测试抓的是服务端的包。
首先在线安装抓包软件:我们用是是tcpdump,此软件可以在网上找到开源代码,假如用于嵌入式环境抓包,大家可以自己在网上下载源码后交叉编译
sudo apt-get install tcpdump
运行下面命令持续抓包,每一个包抓60秒。 可以自己调节-G后面参数设置每一个包的抓包时长:
sudo tcpdump -i ens33 -s0 -G 60 -w %Y_%m%d_%H%M_%S.pcap

得到抓包图如下
抓包
##3.根据抓包分析Tcp
这里通过分析Ack和Seq号,让大家了解Tcp为什么是可靠传输

Seq(Sequence Number):
32bits,表示这个tcp包的序列号。tcp协议拼凑接收到的数据包时,根据seq来确定顺序,并且能够确定是否有数据包丢失。

Ack(Acknowledgment Number):
32bits,表示这个包的确认号。首先意味着已经收到对方了多少字节数据,其次告诉对方接下来的包的seq要从ack确定的数值继续接力
len:表示tcp携带的数据长度,不包括tcp头部信息的长度

下面根据上面抓包来说明:关于包的序号,我在抓包图中已标明
(1)三次握手
(客户端)1号包:我能和你建立连接
seq=0,表客户端第一条数据
没有ack,因为前面没有收到数据,所以不用确认已收到
Len=0。

(服务端)2号包:我收到了请求
seq=0,表此连接中,服务端第一条数据
ack=1 表示收到了客户端的seq=0的连接请求,告诉客户端接下来请从seq=1开始传输数据
Len=0,没有负载数据。

(客户端)3号包:连接建立。
seq=1,响应2号包
ack=1,收到服务器seq=0同意连接,告诉服务端从seq=1传输数据
Len=0

(2)数据传输
(客户端) 4号包:传256字节给服务端
seq=1,上次没有传输数据,seq号不变,也就是3号包的seq=1,len=0
ack=1,告诉服务端你要是发送数据,从seq=1开始
len=256,表示我这次传输的数据字节数

(服务端)5号包:响应。
seq=1,4号包的ack所要求的
ack=257,ack=(4号包的seq)+(4号包的len) = 1+256=257;下次客户端seq=257开始
len=0

(服务端)6号包:发512字节数据给客户端
5、6号均为服务端发送的包,在这期间没有接收到包,所以,5、6号包的seq、ack是一样的。
seq=1
ack=257
len=512,数据的长度

(客户端)7号包:响应
seq=257,5号包让从这个序列发
ack=513,ack=(6号包的seq)+(6号包的len)=1+512=513
len=0

(3)总结一下
3次握手的过程:
(1).起始包的seq都等于0
(2).三次握手中的ack=对方上一个的seq+1
(3).seq等于对方上次的ack号

数据发送过程:
(1).发送方的包包括seq和len,接收方通过ack=发送方的seq+发送方的len。
(2).三次握手时,客户端、服务端握手时,len=0,对方ack=seq+1。
而数据传输过程时,len=0,对方ack=seq+0

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

洛谷【入门6】函数与结构体-P5735 【深基7.例1】距离函数

## 题目描述 给出平面坐标上不在一条直线上三个点坐标 (x1​,y1​),(x2​,y2​),(x3​,y3​)&#xff0c;坐标值是实数&#xff0c;且绝对值不超过 100.00&#xff0c;求围成的三角形周长。保留两位小数。 对于平面上的两个点 (x1​,y1​),(x2​,y2​)&#xff0c;则这两个点…

7 使用Docker容器管理的tomcat容器中的项目连接mysql数据库

1、查看容器的IP 1&#xff09;进入容器 docker exec -it mysql-test /bin/bash 2&#xff09;显示hosts文件内容 cat /etc/hosts 这里容器的ip为172.17.0.2 除了上面的方法外&#xff0c;也可以在容器外使用docker inspect查看容器的IP docker inspect mysql-test 以下为…

Kafka 开启SASL/SCRAM认证 及 ACL授权(三)验证

Kafka 开启SASL/SCRAM认证 及 ACL授权(三)验证。 官网地址:https://kafka.apache.org/ 本文说明如何做client验证ACL是否生效,我们之前开启了无acl信息不允许访问的配置。涉及的client有以下几个场景:shell脚本、python脚本、java应用、flink流。 kafka shell script验证…

UGUI交互组件ScrollView

一.ScrollView的结构 对象说明Scroll View挂有Scroll Rect组件的主体对象Viewport滚动显示区域&#xff0c;有Image和mask组件Content显示内容的父节点&#xff0c;只有个Rect Transform组件Scrollbar Horizontal水平滚动条Scrollbar Vertical垂直滚动条 二.Scroll Rect组件的属…

基于SSM的失物招领信息交互平台

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

14.4 Socket 双向数据通信

所谓双向数据传输指的是客户端与服务端之间可以无差异的实现数据交互&#xff0c;此类功能实现的核心原理是通过创建CreateThread()函数多线程分别接收和发送数据包&#xff0c;这样一旦套接字被建立则两者都可以异步发送消息&#xff0c;本章将实现简单的双向交互功能。 首先…

视频美颜SDK,提升企业视频通话质量与形象

在今天的数字时代&#xff0c;视频通话已经成为企业与客户、员工之间不可或缺的沟通方式。然而&#xff0c;由于网络环境、设备性能等因素的影响&#xff0c;视频通话中的画面质量往往难以达到预期效果。为了提升视频通话的质量与形象&#xff0c;美摄美颜SDK应运而生&#xff…

C#,数值计算——数据建模Plog的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { public class Plog { private int ndat { get; set; } private double[] dat { get; set; } private double[] stau { get; set; } private double[] slogtau { get; set; …

如何使用Net2FTP搭建免费web文件管理器打造个人网盘

文章目录 1.前言2. Net2FTP网站搭建2.1. Net2FTP下载和安装2.2. Net2FTP网页测试 3. cpolar内网穿透3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1.前言 文件传输可以说是互联网最主要的应用之一&#xff0c;特别是智能设备的大面积使用&#xff0c;无论是个人…

2023年中国尾气净化催化材料产量、需求量及行业市场规模分析[图]

尾气处理催化单元系由催化剂厂商将以催化材料和活性组分物质为主要组成的催化剂涂覆在蜂窝陶瓷或金属等载体上而成&#xff0c;催化剂则起到处理尾气中有害物质的各类化学反应的关键催化作用&#xff0c;主要由稀土材料、氧化铝材料、贵金属材料等催化材料和增强催化材料性能的…

【论文阅读】面向抽取和理解基于Transformer的自动作文评分模型的隐式评价标准(实验结果部分)

方法 结果 在这一部分&#xff0c;我们展示对于每个模型比较的聚合的统计分析当涉及到计算特征和独立的特征组&#xff08;表格1&#xff09;&#xff0c;抽取功能组和对齐重要功能组&#xff08;表格2&#xff09;&#xff0c;并且最后&#xff0c;我们提供从模型比较&#x…

容器化应用程序管理与分发工具集 | 开源专题 No.34

kubernetes/kubernetes Stars: 101.7k License: Apache-2.0 Kubernetes 是一个开源系统&#xff0c;用于管理跨多个主机的容器化应用程序。它提供了部署、维护和扩展应用程序的基本机制。Kubernetes 借鉴了 Google 在大规模运行生产负载方面十五年的经验&#xff0c;并结合了社…

安装Docker(Linux:CentOS)

大家好我是苏麟今安装一下Docker. 安装Docker Docker 分为 CE 和 EE 两大版本。CE 即社区版&#xff08;免费&#xff0c;支持周期 7 个月&#xff09;&#xff0c;EE 即企业版&#xff0c;强调安全&#xff0c;付费使用&#xff0c;支持周期 24 个月。 Docker CE 分为 stab…

linux中单节点安装greenplum数据库

目录 一、安装包准备 二、关闭防火墙 三、安装greenplum依赖包 四、添加配置 五、新建greenplum用户 六、安装greenplum安装包 七、设置环境变量 八、权限互通 九、修改数据库配置文件 十、初始化数据库 十一、配置远程连接文件 十二、说明 一、安装包准备 下载准备…

【Pytorch】深度学习之损失函数

文章目录 二分类交叉熵损失函数交叉熵损失函数L1损失函数MSE损失函数平滑L1(Smooth L1)损失函数目标泊松分布的负对数似然损失KL散度MarginRankingLoss多标签边界损失函数二分类损失函数多分类的折页损失三元组损失HingEmbeddingLoss余弦相似度CTC损失函数参考资料 学习目标&am…

Excel往Word复制表格时删除空格

1.背景 在编写文档&#xff0c;经常需要从Excel往Word里复制表格 但是复制过去的表格前面会出现空格&#xff08;缩进&#xff09; 再WPS中试了很多方法&#xff0c;终于摆脱了挨个删除的困扰 2. WPS排版中删除 选择表格菜单栏-选在【开始】-【排版】选择【更多段落处理】-【段…

一文深入理解高并发服务器性能优化

我们现在已经搞定了 C10K并发连接问题 &#xff0c;升级一下&#xff0c;如何支持千万级的并发连接&#xff1f;你可能说&#xff0c;这不可能。你说错了&#xff0c;现在的系统可以支持千万级的并发连接&#xff0c;只不过所使用的那些激进的技术&#xff0c;并不为人所熟悉。…

2023年中国玉米深加工产能、市场规模、消费量及产品需求结构[图]

玉米深加工顾名思义就是将产业链延长,进而提升产品附加值,利用玉米提炼出酒精、玉米胚芽油、淀粉和饲料等大概两百余种玉米深加工产品。我国是玉米种植大国&#xff0c;也是玉米深加工大国&#xff0c;但是玉米加工行业却长时间处于产能过剩、开工率不足、利润率低下的境况&…

AOMEI PXE Boot Free

两台电脑网线直连&#xff0c;不用设置固定IP&#xff0c;该软件包含DHCP。 名称: 3H3AOMEIPXEBootFree.rar 大小: 13068734 字节 (12 MiB) SHA1: 1e606c8c1ee3badf8af9a87f61fdf2e332b773e6 名称: PXEBoot.exe 大小: 13124928 字节 (12 MiB) SHA1: 95286ac18e9b81c2a68412c40…

【docker - 安装】windows 10 专业版 安装docker,以及 WSL kernel version too low 解决方案

一、开启 Hyper-V 二、下载 docker 三、安装 docker 四、问题 Stage 1&#xff1a;打开 powershell&#xff0c;并执行 Stage 2&#xff1a;下载Linux内核更新包&#xff0c;并安装 Stage 3&#xff1a;将 WSL 2 设置为默认版本 Stage 4&#xff1a;安装所选的 Linux 分…