计算机网络 day11 tcpdump - 传输层 - netstat - socket - nc - TCP/UDP头部

目录

故障排查

tcpdump抓包工具

传输层(TCP和UDP协议)

传输层的作用

应用程序和端口号有什么关系?

传输层端对端连接实现拓扑图

如何查看自己的linux机器开放了哪些端口?

1、netstat(network   status 网络的状态)

netstat查看本机开放的端口:

socket 槽、套接字(接口)

2、ss命令:

3、lsof命令

如何查看其他机器开放了哪些端口?

nc、nmap命令

如何知道这个ip地址175.6.49.131(不是本机)对应的主机开放了哪些端口?

nc命令

nmap命令

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

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

TCP的封装格式

数据传输的过程:

UDP的封装格式:


故障排查

在进行网络故障排查时,需要有耐心和系统性地逐步排查根据具体情况,也可能需要使用其他工具和技术来帮助诊断和解决问题。

tcpdump抓包工具

tcpdump 进行网络诊断的时候的工具(类似于医院里的CT、B超、核磁共振)

tcpdump抓包命令: 

tcpdump  -i ens33  tcp  dst port 80 and src host 192.168.1.142
#抓取从ens33接口进来的数据包,协议是tcp协议  目的端口是80  同时 源ip地址是192.168.1.142

src host 192.168.1.142  源ip地址是192.168.1.142  source 源
dst port 80 目的端口是80

and  前面的条件和后面的条件都要满足
or  2个条件满足一个就可以了

tcpdump  -i ens33  arp
tcpdump  -i ens33  icmp
tcpdump  -i ens33  arp or icmp

ping 和 tcpdump 是网络诊断的2大神器。

传输层(TCP和UDP协议)

传输层的作用

(网络层)IP层提供点到点的连接,而传输层提供端到端的连接。

它主要负责在源主机和目标主机之间提供端到端的数据传输服务,并确保可靠、有序地传输数据。

应用程序和端口号有什么关系?

应用程序其实就是运行一个程序提供某个服务

一个应用程序 --》 背后就是一个服务 --》落实到进程来实现 --》进程会监听某个端口 

(可以理解为打开一个窗户或者一扇门(端口),这样别人(数据)就可以进来了)

QQ --》实现即时通信(聊天发消息)--》UDP协议

传输层端对端连接实现拓扑图

一台电脑里可以同时运行很多的应用程序

不同的程序不能占用相同的端口号

上图中的 应用程序 和 端口号 绑定了

我们不知道QQ的端口号,我们需要使用抓包工具(科莱),找到QQ的TCP包或者UDP包,从而获取QQ的端口号,IP地址和协议

qq server --》8007 --》UDP

如何查看自己的linux机器开放了哪些端口?

使用netstat、ss(不如netstat好用)、lsof等工具

1、netstat(network   status 网络的状态)

netstat可以查看本机开放了哪些端口

应用程序--》服务---》进程--》占用一个端口(监听某个端口)

下载netstat:

[root@sc-server ~]# yum   install net-tools -y

netstat查看本机开放的端口:

[root@sc-server ~]# netstat -anplut

-a  all
-n  --numeric 数字的形式显示
-p  --program
 [--tcp|-t]   tcp信息
 [--udp|-u]   udp信息
 [--listening|-l]  处于监听状态的信息
[root@sc-server ~]# netstat -anplut
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:23              0.0.0.0:*               LISTEN      967/sshd            
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1677/sendmail: acce 
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      1257/mysqld         
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1670/nginx: master  
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      1670/nginx: master  
tcp        0     36 192.168.50.1:23         192.168.50.9:60013      ESTABLISHED 3845/sshd: root@pts 
tcp6       0      0 :::23                   :::*                    LISTEN      967/sshd            
tcp6       0      0 :::80                   :::*                    LISTEN      1670/nginx: master  
udp        0      0 127.0.0.1:323           0.0.0.0:*                           693/chronyd         
udp6       0      0 ::1:323                 :::*                                693/chronyd         

其中的名词解释:

ESTABLISHED  建立连接
LISTEN  听(监听) 监控某个端口看是否有人连接过来(监听)

Proto 代表使用的是什么协议

Recv-Q 接受数据的队列里有多少数据 receive queue   -->表示我们的应用程序还没有处理的数据
Send-Q 发送数据的队列里有多少数据  Send queue    -->我们发生出去的数据,远程主机没有确认的数据

Local Address 表示本地的IP地址和端口号

Foreign Address 表示外部机器的IP地址和端口号

State  代表现在连接处于什么状态

PID/Program PID代表进程号 Program代表程序名字

0.0.0.0  代表任意ip地址

127.0.0.1:35  代表只是在127.0.0.1这个ip上开放35号端口  --》代表只能自己访问
0.0.0.0:*   代表任意ip地址和任意端口号 *代表任意端口号

杀死进程:

[root@sc-server ~]# kill -9 1677  强制杀死pid是1677进程
-9 表示告诉linux内核强制杀死某个进程
9) SIGKILL	  本质上属于一种信号signal kill

状态解释: 

   Recv-Q
       Established:  The  count  of  bytes not copied by the user program connected to this socket.  Listening: Since
       Kernel 2.6.18 this column contains the current syn backlog.

   Send-Q
       Established: The count of bytes not acknowledged by the remote host.  Listening: Since Kernel 2.6.18 this col‐
       umn contains the maximum size of the syn backlog.

   Local Address
       Address  and  port  number of the local end of the socket.  Unless the --numeric (-n) option is specified, the
       socket address is resolved to its canonical host name (FQDN), and the port number is translated into the  cor‐
       responding service name.

   Foreign Address
       Address and port number of the remote end of the socket.  Analogous to "Local Address."

       State
       The  state of the socket. Since there are no states in raw mode and usually no states used in UDP and UDPLite,
       this column may be left blank. Normally this can be one of several values:

       ESTABLISHED
              The socket has an established connection.

       SYN_SENT
              The socket is actively attempting to establish a connection.

       SYN_RECV
              A connection request has been received from the network.

       FIN_WAIT1
              The socket is closed, and the connection is shutting down.

       FIN_WAIT2
              Connection is closed, and the socket is waiting for a shutdown from the remote end.

       TIME_WAIT
              The socket is waiting after close to handle packets still in the network.

Recv-Q
Established:连接到此套接字的用户程序未复制的字节数。聆听:自
内核2.6.18本列包含当前的syn积压。

Send-Q
Established:未被远程主机确认的字节数。监听:自内核2.6.18起,此参数为0
Umn包含syn积压的最大大小。

Local Address
socket本端地址和端口号。除非指定了——numeric (-n)选项
socket地址被解析为它的规范主机名(FQDN),端口号被转换成响应的服务名称。

Foreign Address
套接字远端地址和端口号。类似于“本地地址”。

State
socket的状态。由于在原始模式下没有状态,通常在UDP和UDPLite中没有使用状态,
这一栏可以留空。通常,这可以是以下几个值之一:

ESTABLISHED
socket已建立连接。

SYN_SENT
socket正在积极尝试建立连接。

SYN_RECV
已从网络接收到连接请求。

FIN_WAIT1
socket已关闭,连接正在关闭。

FIN_WAIT2
连接已关闭,socket正在等待远程端关闭。

TIME_WAIT
socket在关闭后等待处理仍在网络中的数据包。

socket 槽、套接字(接口)

socket  = ip+port --》接口

Socket(套接字)是计算机网络编程中的一种编程接口,用于实现网络通信

它提供了一种机制,使不同计算机之间或同一计算机上的不同进程之间可以进行数据交换和通信。

它基于网络协议栈(如TCP/IP协议栈)实现了数据传输的底层细节。

2、ss命令:

[root@sc-server ~]# ss -anptul
Netid State      Recv-Q Send-Q             Local Address:Port                            Peer Address:Port              
udp   UNCONN     0      0                      127.0.0.1:323                                        *:*                   users:(("chronyd",pid=693,fd=5))
udp   UNCONN     0      0                          [::1]:323                                     [::]:*                   users:(("chronyd",pid=693,fd=6))
tcp   LISTEN     0      128                            *:23                                         *:*                   users:(("sshd",pid=967,fd=3))
tcp   LISTEN     0      128                            *:80                                         *:*                   users:(("nginx",pid=1672,fd=8),("nginx",pid=1671,fd=8),("nginx",pid=1670,fd=8))
tcp   LISTEN     0      128                            *:8080                                       *:*                   users:(("nginx",pid=1672,fd=7),("nginx",pid=1671,fd=7),("nginx",pid=1670,fd=7))
tcp   LISTEN     0      128                         [::]:23                                      [::]:*                   users:(("sshd",pid=967,fd=4))
tcp   LISTEN     0      128                         [::]:80                                      [::]:*                   users:(("nginx",pid=1672,fd=9),("nginx",pid=1671,fd=9),("nginx",pid=1670,fd=9))
[root@sc-server ~]# 

3、lsof命令

查看单个端口是否被占据了:使用lsof命令:

下载lsof:

[root@sc-server ~]# yum  install lsof  net-tools -y

 lsof的使用:

[root@sc-server ~]# lsof -i:80  查看80端口被那个进程占用了
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   1670  root    8u  IPv4  21644      0t0  TCP *:http (LISTEN)
nginx   1670  root    9u  IPv6  21645      0t0  TCP *:http (LISTEN)
nginx   1671 nginx    8u  IPv4  21644      0t0  TCP *:http (LISTEN)
nginx   1671 nginx    9u  IPv6  21645      0t0  TCP *:http (LISTEN)
nginx   1672 nginx    8u  IPv4  21644      0t0  TCP *:http (LISTEN)
nginx   1672 nginx    9u  IPv6  21645      0t0  TCP *:http (LISTEN)
[root@sc-server ~]# lsof -i:22
[root@sc-server ~]# lsof -i:23
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd     967 root    3u  IPv4  20037      0t0  TCP *:telnet (LISTEN)
sshd     967 root    4u  IPv6  20039      0t0  TCP *:telnet (LISTEN)
sshd    3845 root    3u  IPv4  72900      0t0  TCP sc-server:telnet->192.168.50.9:60013 (ESTABLISHED)
[root@sc-server ~]# 

如何查看其他机器开放了哪些端口?

nc、nmap命令

如何知道这个ip地址175.6.49.131(不是本机)对应的主机开放了哪些端口?

下载nc 和 namp:

[root@sc-server ~]# yum install nc  nmap -y

nc命令

nc(netcat)是一个强大的网络工具,可以在命令行下进行网络连接、数据传输和端口扫描等操作

  1. 连接到指定主机和端口:

    nc <host> <port>

    示例:连接到主机 example.com 的 80 端口

    nc example.com 80
  2. 等待连接并监听指定端口:

    nc -l <port>

    示例:监听本地主机的 12345 端口

    nc -l 12345
  3. 发送文件:

    nc -w <timeout> <host> <port> < <file>

    示例:将本地文件 example.txt 发送到远程主机的 12345 端口

    nc -w 3 example.com 12345 < example.txt
  4. 接收文件:

    nc -l <port> > <file>

    示例:接收来自远程主机的文件并保存为 example.txt

    nc -l 12345 > example.txt
  5. 端口扫描:

    nc -zv <host> <start-port>-<end-port>

    示例:扫描 example.com 主机的 1 到 1000 端口

    nc -zv example.com 1-1000

 -z 表示没有返回值,但是我们可以通过echo $?来判断该机器的端口是否打开了

nmap命令

nmap 会对某个ip地址进行常用端口号的扫描,一个一个端口去试是否开放 0~1024+常用端口(对该台机器的端口进行遍历查询)
端口号的范围: 0~65535

[root@sc-server ~]# nmap 120.24.223.108
Starting Nmap 6.40 ( http://nmap.org ) at 2023-07-19 15:17 CST
Nmap scan report for 120.24.223.108
Host is up (0.025s latency).
Not shown: 995 filtered ports
PORT     STATE  SERVICE
22/tcp   open   ssh
80/tcp   open   http
443/tcp  open   https
3306/tcp open   mysql
3389/tcp closed ms-wbt-server
Nmap done: 1 IP address (1 host up) scanned in 9.44 seconds
[root@sc-server ~]#

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

可靠的、面向连接的协议

传输效率低

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

不可靠的、无连接的服务

传输效率高

TCP的封装格式

源端口号发送TCP进程对应的端口号

目标端口号目标端接收进程的端口号

32位序列号:0 ~ 2^32-1范围内,数据段标记,用于到目的端对到达包的重组

32位确认号:0 ~ 2^32-1范围内,对发送端的确认信息,告诉发送端这个序号之前的数据段都收到了

6个控制位:(标志位:作用就是表达某个意思,双方沟通的时候使用)

        U R G:紧急指针有效位,与16位紧急指针配合使用(紧急指针位)

        A C K:确认序列号有效位,表明该数据包包含确认信息(确认位)

        P S H:通知接收端立即将数据提交给用户进程,不在缓存中停留,等待更多的数据(push上推位)

        R S T:为1时,请求重新建立TCP连接(重置连接位)

        S Y N:为1时,请求建立连接(同步序列号位)

        F  I N:为1时,数据发送完毕,请求断开连接(结束位、终止位)

16位窗口大小:滑动窗口的大小,指明本地可接收数据的字节数

16位校验和:用于验证数据的完整性检测传输过程中是否出现错误

16位紧急指针:与控制位U R G有关

TCP头部:20个字节

IP头部:20个字节

帧头部:18个字节

MTU:最大字节数为1500(包含了头部信息)

数据:1500-20-20=1460字节

抓包(TCP包) 

数据传输的过程:

NIC 网卡(network interface card)

DMA 直接内存访问(directly memory access):直接将网卡存储芯片里的数据复制到内存里 

UDP的封装格式:

16位源端口号:发送端的UDP进程端口号 

16位目标端口号:接收端的UDP进程端口号

16位UDP长度:包含数据的长度,可以算出数据的结束位置

16位UDP校验和:UDP的差错控制(可选)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

安卓APK反编译+修改+重打包+签名

目录 1.下载反编译工具包。2.将APK包&#xff0c;重命名为ZIP&#xff0c;解压。放到反编译根目录下。3.使用apktool反编译修改smail文件&#xff0c;进行重打包4.重新打包5.重签名 1.下载反编译工具包。 反编译工具包地址&#xff1a;百度网盘 提取码&#xff1a;dsu3 解压后…

传智教育成功入选教育部2023年产学合作协同育人项目

传智教育成功入选教育部2023年产学合作协同育人项目 近日&#xff0c;教育部产学合作协同育人项目专家组发布《关于公布教育部产学合作协同育人项目指南通过企业名单&#xff08;2023年5月&#xff09;的通知》&#xff0c;传智教育申报的“教学内容和课程体系改革项目 、师资…

标注工具Labelimg,正常运行显示,但是对图片点击Create RectBox画矩形框开始闪退

问题描述*&#xff1a;标注工具Labelimg&#xff0c;正常运行显示&#xff0c;但是对图片点击Create RectBox画矩形框开始闪退&#xff0c;闪退出现以下代码 File “C:\ProgramData\anaconda3\Lib\site-packages\libs\canvas.py”, line 530, in paintEvent p.drawLine(self.p…

一探究竟:人工智能、机器学习、深度学习

一、人工智能 1.1 人工智能是什么&#xff1f; 1956年在美国Dartmounth 大学举办的一场研讨会中提出了人工智能这一概念。人工智能&#xff08;Artificial Intelligence&#xff09;&#xff0c;简称AI&#xff0c;是计算机科学的一个分支&#xff0c;它企图了解智能的实质&am…

4. 设计(黑盒)测试用例 (一) 等价类 边界值 判定表

本篇文章我们将详细介绍如何来测试用例。 1. 设计测试用例的基本要素 1.1 测试用例概念 测试用例&#xff08;Test Case&#xff09;是为了实施测试而向被测试的系统提供的一组集合。 1.2 测试用例要素 测试环境、测试步骤、测试数据、预期结果。 1.3 测试用例的重要性 提…

异步fifo(1)

什么时异步fifo FIFO&#xff0c;即First In First Out &#xff0c;是一种先进先出的数据缓存器&#xff0c;异步FIFO 是指读写时钟不一致&#xff0c;读写时钟是互相独立的。数据从一个时钟域写入FIFO缓冲区&#xff0c;并从另一个时钟域的同一FIFO缓冲区中读取数据&#xf…

libevent:windows环境配置+QT使用

目录 libevent是什么 编译 QT使用 测试代码 libevent是什么 Fast portable non-blocking network programming with Libevent http://www.wangafu.net/~nickm/libevent-book/TOC.html 这篇文档讲的很清楚&#xff0c;尤其是Chapter 1: A tiny introduction to asynchro…

解决打开excel时报错 “不能使用对象链接和嵌入”

问题截图 打开excel文件或者插入对象时&#xff0c;直接弹出不能使用对象链接和嵌入报错信息。 解决方法 按 winr 组合快捷键&#xff0c;打开运行&#xff0c;输入 dcomcnfg.exe 按回车确定 此时进入到组件服务管理界面&#xff0c;依次选择 组件服务-计算机-我的电脑-DOCM…

JDK 下载 华为云镜像站 地址

通常去 Oracle 官网下载 JDK&#xff0c;速度很慢而且需要账号登入 Oracle 官网下载地址 https://www.oracle.com/cn/java/technologies/downloads/archive/ JDK 下载 华为云镜像站 地址 https://repo.huaweicloud.com/java/jdk/ 我们下期见&#xff0c;拜拜&#xff01;

LCD-STM32液晶显示中英文-(7.字模及显示原理)

目录 字模介绍 什么是字模 字模的构成 字模显示原理 字模制作 如何制作字模 字模寻址公式 存储字模文件 字模介绍 什么是字模 有了编码&#xff0c;我们就能在计算机中处理、存储字符了&#xff0c;但是如果计算机处理完字符后直接以编码的形式输出&#xff0c;人类将难…

位运算常见算法题

文章目录 前言191. 位1的个数338. 比特位计数461. 汉明距离136. 只出现一次的数字260. 只出现一次的数字 III面试题 01.01. 判定字符是否唯一268. 丢失的数字371. 两整数之和137. 只出现一次的数字 II面试题 17.19. 消失的两个数字 前言 本篇文章会涉及多道位运算题目&#xf…

Vue中的事件处理

一&#xff0c;基本使用 1.使用v-on:事件名或者事件名绑定事件 常见的事件有&#xff1a; onclick, 鼠标单击事件&#xff1b; ondblclick, 鼠标双击事件&#xff1b;onmousedown,鼠标按下去的事件&#xff1b;onmouseup,鼠标弹起事件&#xff1b; onmouseover,onmouseente…

【代码随想录 | Leetcode | 第六天】链表 | 反转链表 | 两两交换链表中的节点 | 删除链表的倒数第 N 个结点

前言 欢迎来到小K的Leetcode|代码随想录|专题化专栏&#xff0c;今天将为大家带来反转链表、两两交换链表中的节点和删除链表的倒数第N个节点的分享✨ 目录 前言206. 反转链表24. 两两交换链表中的节点19. 删除链表的倒数第 N 个结点总结 206. 反转链表 ✨题目链接点这里 给你…

【蓝图】p27开关门互动实现

p27开关门互动实现 创建一个门 添加初学者内容包 拖拽一个门到场景中 添加一个碰撞 创建盒体触发器 左侧模式->基础->盒体触发器&#xff0c;拖拽到门上&#xff0c;调整大小 开关门互动实现 做一个开门互动 要把开门逻辑写在关卡蓝图里 门设置为可移动 打开关卡蓝…

MySQL-DDL-表的结构-查询修改删除

DDL&#xff08;表操作&#xff09; 查询 查询当前数据库所有表&#xff1a;show tables 查询表结构&#xff1a;desc 表名 查询建表语句&#xff1a;show create table 表名 修改&#xff08;主要还是通过图形化界面进行操作&#xff09; 添加字段&#xff1a;alter table …

LayUi之手风琴的趣味案例

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于LayUi的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 一.手风琴是什么 二.手风琴在什么时候使用…

业务开发“银弹” ——低代码开发平台

一、现状 低代码开发平台要让每个人&#xff0c;包括开发者和普通业务人员&#xff0c;都能够成为企业数字化过程中的主导者和构建者&#xff01;让普通人更容易上手&#xff01; 基于这一目标&#xff0c;应用需求多的云服务商成为低代码投资的主要来源。一家云服务商如谷歌云…

AD从原理图到PCB超详细教程

AD超详细教程 前言一、建立一个工程模板二、原理图1.设计原理图。2.使用AD自带库和网上开源原理图库3.画原理图库4.编译原理图 三、PCB1.确定元器件尺寸大小2.绘制PCB Library①使用元器件向导绘制元件库②原理图与PCB的映射 3.绘制PCB①更新PCB②调整元件位置③布线④漏线检查…

代理模式【静态代理和动态代理实现业务功能扩展】

静态代理 我们在不修改业务的情况下想要给它增加一些功能&#xff0c;这就需要使用代理模式。我们不会在原有业务上直接修改&#xff0c;为了避免修改导致程序不可逆转的破坏。三种角色&#xff1a;抽象角色-接口、真实角色-实现类和代理角色-代理类。真实角色和代理角色继承的…

raid5故障导致上层文件系统不可用的服务器数据恢复案例

服务器数据恢复环境&#xff1a; 一台服务器上有两组分别由4块SAS硬盘组建的raid5磁盘阵列&#xff0c;这两组raid5阵列划分LUN并组成LVM结构&#xff0c;格式化为EXT3文件系统。 服务器故障&#xff1a; 一组raid5阵列上的一块硬盘未知原因离线&#xff0c;热备盘上线替换离线…