传输层 TCP、UDP 网络相关命令

传输层:4层-->负载均衡-->4层、7层

作用:提供端到端的连接

工作原理:TCP封装格式、TCP的连接与断开、流量控制、拥塞控制、差错控制、计时器、TCP的应用

TCP(Transmission Control Protocol)

传输控制协议,可靠的、面向连接的协议,传输效率低

端口号的范围:2^16=65536 0~65535

常见的端口 0~1023 被很多经典的服务占用了

确认号:告诉发送端这个序号之前的数据段都收到了

6个控制位:表示数据段的特殊含义(flag)

URG:紧急位 1

ACK:确认位,表示对别人给你发的数据的确认

PSH:急迫位,提醒接收端,赶紧处理发送过来的数据push

RST:重置位,重新建立连接reset

SYN:同步位,1表示发起连接了sync

FIN:终止位,断开连接finish

窗口值:表示本地可以接收多少数据,最大65536-->对双方进行流量控制

tcp的头部占20个字节,ip包头也占20个字节,1500-20-20=1460 是应用层封装的数据的最大值

TCP 三次握手

主要是为了在客户端和服务端之间建立可靠的连接

第一次:(客户端->服务端)客户端发送一个SYN包(同步信号),告诉服务端:"我想建立连接",并携带一个初始序列化seq=x,此时客户端进入syn-sent状态

第二次:(服务端->客户端)服务端收到后,回复一个SYN+ACK,意思是:"我收到你的请求,我也准备好连接了",确认号是ack=x+1,同时也带上自己的序列号seq=y,此时服务端进入syn-rcvd状态

第三次:(客户端->服务端)客户端收到后,再回复一个ACK包,确认号为ack=y+1,表示"好的,我也收到你的确认了",此时双方都进入ESTABLISHED(连接建立)状态,可以开始传数据了

为什么要三次

为了防止已失效的连接请求突然传到了服务器 ,导致错误建立连接,从而浪费资源

Recv&&Send
  1. Recv-Q 高 :通常是代码问题。程序读数据太慢,或者被阻塞了。
  2. Send-Q 高 :通常是网络问题对端问题。网络丢包严重,或者对方程序挂了/处理太慢,导致你的数据发过去石沉大海
四次挥手

释放资源 (进程、消耗cpu、内存、网络带宽等),客户端和服务端都可以提出断开

第一次挥手(A发起关闭请求):A主动想要关闭连接,向B发送一个FIN包(FIN=1),并携带序列号seq=u,但此时A虽然发了FIN,但还能接收数据

第二次挥手(B确认收到):B收到A的FIN包后,发送一个ACK包(ACK=1),确认号为ack=u+1,序列号为seq=v,B收到A的请求,但还有数据没发完,稍微等一下,还可以继续向A发送剩余的数据

第三次挥手(B也准备关闭):发送完剩余数据后,向A发送FIN包(FIN=1),同时带上ACK标志(ACK=1),我的数据发送完了,我也要关闭了

第四次挥手(A最后确认):客户端A收到B的FIN后,发送一个ACK 包(ACK=1),进入TIME-WAIT 状态,必须等待2MSL的时间,才能进入CLOSED状态,而B收到ACK后,直接进入CLOSED状态,连接彻底断开

计时器:1、重传计时器:防止数据在传输的过程中丢失,超时重传

2、时间等待计时器:连接终止期间使用的,在发送了最后一个ACK后,不立即关闭连接,而是等待一段时间,保证能接收到重复的FIN数据段-->MSL:最大报文段寿命

为什么要有TIME-WAIT状态?

1、保证A发送的最后一个ACK能到达B

2、防止"旧连接的报文"干扰新连接

服务器里查看网络状态发现大量time-wait,判断服务器出现了什么问题?

web服务器-->httpd服务->短连接 nginx->长连接64秒

长连接:三次握手成功建立连接后,传输数据完成后,不会立马进行四次断开,会等一段(64秒)时间,然后再进行四次断开

短连接 :三次握手成功建立连接后,传输数据完成后,立马进行四次断开

1、说明服务器有大量的访问-->正常、不正常(黑客攻击)

2、服务器主动断开

攻击方式
SYN泛洪攻击:

利用的是TCP三次握手机制,攻击端利用伪造的IP地址向被攻击端发出请求 ,而被攻击端发出的响应 报文永远发送不到目的地 ,那么被攻击端在等待关闭这个连接的过程中消耗了资源,如果有成千上万的这种连接,主机资源将被耗尽,从而达到攻击的目的。

防范措施:降低SYN timeout时间 ,使主机尽快释放半连接的占用;采用SYN cookie设置,如果短时间内连续收到某个IP的重复SYN请求,则认为受到了该IP的攻击

DOS拒绝服务攻击

已消耗完我们的资源为目的,导致我们没有能力为其他的用户提供服务了

防范措施:攻击工具:模拟1000个人访问 封一个IP

DDOS分布式拒绝服务攻击

dos升级版,分布的,协同的大规模攻击方式,借助数百、甚至数千台被入侵后安装了攻击进程的主机同时发起的集团行为

防范措施:加服务器,购买流量清洗服务(360、齐安信、天融信、深信服、启明星辰-->安全厂商)

CC(ChallengeCollapsar,挑战黑洞)

使用代理服务器向受害服务器发送大量貌似合法的请求

TCP的流控机制--滑动窗口

指明本地可接收数据的字节数

2^16/1024=64k

滑动窗口:本机缓存里能接收多少数据

通过滑动窗口的值来进行流量控制-->网络不堵的情况下

拥塞控制:中间的传输网络的带宽的反馈

TCP差错控制的3种方式
  1. 校验和
  2. 确认-->受损伤的数据段、丢失的数据段、重复的数据段、失序的数据段、确认的丢失
  3. 超时
TCP的计时器
  1. 重传计时器-为了控制丢失的数据段
  2. 坚持计时器 -为了防止零窗口死锁win=0,发送探测数据段,提醒接收端确认已丢失,如果没有 坚持计时器和探测数据段,ack丢失时,双方将会进入等待死锁的状态
  3. 保活计时器 -防止两个TCP之间的连接长时间的空闲**,** 发送探测数据段,如果发送了10个探测数据段,还没有响应,则断开连接
  4. 时间等待计时器 -连接终止期间使用,在发送了最后一个ACK后,不立即关闭连接,而是等待一段时间,保证能接收到重复的FIN数据段

UDP(User Datagram Protocol)

用户数据报协议不可靠 的、无连接的服务,传输效率高

UDP没有流控机制

只有校验和-提供->UDP的差错控制(需要上层协议来提供差错控制:如TFTP协议)

ntp:(Network time protocol)网络时间协议,在互联网上同步时间

复制代码
linux同步时间法一:
[root@xiaoyu ~]# date
2026年 04月 18日 星期六 11:16:44 CST
[root@xiaoyu ~]# date -s "2036-4-18"
2036年 04月 18日 星期五 00:00:00 CST
[root@xiaoyu ~]# date
2036年 04月 18日 星期五 00:00:01 CST
[root@xiaoyu ~]# service chronyd restart
Redirecting to /bin/systemctl restart chronyd.service
[root@xiaoyu ~]# date
2026年 04月 18日 星期六 11:17:30 CST

法二:使用utpdate命令去同步时间
yum install epel-release -y
yum install ntpsec -y
which ntpdate

网络相关的命令

1、netstat-->看自己开放了哪些端口,有哪些人和自己建立连接
2、nc和nmap-->扫描别人的机器开放了哪些端口
  • ping 使用的是 ICMP 协议 ,它只负责探测网络通断,不涉及端口。
  • nc 使用的是 TCP 协议 ,它必须指定端口才能建立连接

不是开放的端口越多越好,越多表示公开的服务多,容易受到攻击,还有消耗的cpu和内存就会多

2个角度去思考:安全性、资源消耗

root@xiaoyu nat\]# nc -z -w 1 www.baidu.com 8090 //-z 只是建立连接,不发送数据 -w 指定超时时间 ![](https://i-blog.csdnimg.cn/img_convert/788dbe43883e4fd9af75ac333408c90a.png) [root@xiaoyu nat]# cat port_scan.sh #!/bin/bash #端口号写死 #port="22 3306 80 443 67 68 110 25 143 53" #端口号从文件里获得 port_file="/nat/port.txt" #需要去扫描的服务器ip地址文件 server_ip="/nat/server_ip.txt" for ip in $(cat $serve_ip) do for i in $(cat $port_file) do echo $i if nc -w 1 -z $ip $i;then echo "$ip $i port is open"|tee -a server_open_port.txt else echo "$ip $i port is closed"|tee -a server_closed_port.txt fi done done [root@xiaoyu nat]# bash port_scan.sh 120.24.223.108 22 port is closed 120.24.223.108 3306 port is closed 120.24.223.108 80 port is open 120.24.223.108 443 port is open 120.24.223.108 67 port is closed vim里进入可视行模式(大写的V)--\>选中需要缩进的多行(**上下方向键**)--\>按shift+\> 右移 \[root@xiaoyu nat\]# echo "hello,world"\|**tee** -a hello.txt //屏幕上输出,同时写往文件 -a 追加 ![](https://i-blog.csdnimg.cn/img_convert/58d9418fe94e23505fd381478c0d23ca.png) python编写脚本 1、使用库,调用linux的命令 2、使用库,不调用linux的命令--\>推荐的方法 python里的哪个库可以调用linux命令?--\>import subprocess python/go里的哪个库可以实现扫描端口的功能?--\>python socket库 go net包来实现扫描端口的功能 库:别人写好的用来实现某些功能的.py结尾的文件--\>轮子 [root@xiaoyu nat]# cat port_scan.py #!/usr/bin/python import socket def port_scanner(host,start_port,end_port): open_ports = [] for port in range(start_port,end_port+1): #实例化对象sock sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #设置连接的超时时间 sock.settimeout(1) #真正的去发起连接 result = sock.connect_ex((host,port)) if result == 0: open_ports.append(port) sock.close() return open_ports host = 'localhost' start_port = 1 end_port = 30 open_ports = port_scanner(host,start_port,end_port) print(f"Open ports on {host} are:{open_ports}") [root@xiaoyu nat]# python3 port_scan.py Open ports on localhost are:[22] >>> import subprocess >>> result = subprocess.run("ip add",shell=True,check=True,stderr=subprocess.PIPE) 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 2: ens33: mtu 1500 qdisc fq_codel state UP group default qlen 1000 inet 192.168.110.254/24 scope global ens33 valid_lft forever preferred_lft forever -->简写 >>> result = subprocess.run("xiaoyu",shell=True,check=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE) >>> result.stderr b'/bin/sh: \xe8\xa1\x8c 1: xiaoyu: \xe6\x9c\xaa\xe6\x89\xbe\xe5\x88\xb0\xe5\x91\xbd\xe4\xbb\xa4\n' shell=True 可以执行的shell命令 check=False check值为True,且执行命令的进程以非0状态码退出,则会抛出一个CalledProcessError的异常, 且该异常对象会包含参数,退出状态码,以及stdout和stderr(如果被捕获) stderr 错误 ![](https://i-blog.csdnimg.cn/img_convert/3b5f2d117ace35b5a6f4f798c432ecec.png) ##### 3、lsof:看端口被哪个进程占用了 yum install lsof -y \[root@xiaoyu \~\]#**lsof -i:22** //没有输出表示没被占用 ![](https://i-blog.csdnimg.cn/img_convert/09c45e1452fee6391150a1b303df3d5b.png) \[root@xiaoyu \~\]# lsof -p 491690 //查看某个进程打开了哪些文件、加载库、依赖关系 \[root@xiaoyu \~\]# lsof /root/ //或者是哪个文件夹被哪个进程打开 ![](https://i-blog.csdnimg.cn/img_convert/62e6f146c5aa25feec712ca6bcc06cc6.png) ##### 4、tcpdump #抓icmp的响应包 tcpdump -i ens33 'icmp[icmptype] = icmp-echoreply' #抓icmp的请求包 tcpdump -i ens33 'icmp[icmptype] = icmp-echo' host 192.168.0.87 #捕获主机192.168.56.209和主机192.168.56.210或192.168.56.211的所有通信数据包 tcpdump -i ens33 host 192.168.56.209 and \(192.168.56.210 or 192.168.56.211\) a)关于数据类型的关键字:host、port、net 例:host 192.168.1.1表示这是一台主机,net 192.168.0.0表示这是一个网段 port 22指明端口号是22,如果没有指明类型,则默认的类型是host b)数据的传输方向:src、dst 例: 源地址:src 192.168.1.1 目的网络地址:dst net 192.168.0.0 默认监听本机和目标主机的所有数据 c)协议关键字 ip、arp、rarp、tcp、udp、icmp等 d)其他关键字:or、and、not、! 多个条件之间 yum install tcpdump -y 练习: 1、抓取访问本机的icmp报文或者arp报文 [root@xiaoyu nat]# tcpdump -i ens36 icmp or arp 16:39:14.635151 ARP, Request who-has xiaoyu (00:0c:29:3c:e1:64 (oui Unknown)) tell 192.168.1.1, length 46 16:39:14.635173 ARP, Reply xiaoyu is-at 00:0c:29:3c:e1:64 (oui Unknown), length 28 16:39:33.619930 ARP, Request who-has _gateway tell xiaoyu, length 28 16:39:33.620341 ARP, Reply _gateway is-at 00:50:56:fd:b4:c0 (oui Unknown), length 46 16:41:22.763457 IP xiaoyu > 110.242.69.21: ICMP echo request, id 4, seq 1, length 64 16:41:22.816449 IP 110.242.69.21 > xiaoyu: ICMP echo reply, id 4, seq 1, length 64 2、抓取源ip地址是192.168.1.*访问本机的tcp协议的80或者22端口的数据包 [root@xiaoyu nat]#tcpdump -i ens36 src net 192.168.1.0/24 and \(tcp dst port 80 or dst port 22\) 16:51:17.714204 IP 192.168.1.1.17109 > xiaoyu.ssh: Flags [.], ack 4085532057, win 255, length 0 16:51:30.276645 IP 192.168.1.1.17109 > xiaoyu.ssh: Flags [P.], seq 0:36, ack 1, win 255, length 36 16:51:37.784760 IP 192.168.1.1.17109 > xiaoyu.ssh: Flags [.], ack 273, win 254, length 0 16:51:37.878396 IP 192.168.1.1.17109 > xiaoyu.ssh: Flags [.], ack 397, win 253, length 0 3、抓取源ip是192.168.1.*,目的ip地址是114.114.114.114的udp的53号端口的数据包 [root@xiaoyu nat]#tcpdump -i ens36 src net 192.168.1.0/24 and dst host 114.114.114.114 and udp port 53 17:09:51.615631 IP xiaoyu.38132 > public1.114dns.com.domain: 56060+ A? xiaoyu. (24) 17:09:51.615698 IP xiaoyu.38132 > public1.114dns.com.domain: 11517+ AAAA? xiaoyu. (24) 17:09:51.717083 IP xiaoyu.58644 > public1.114dns.com.domain: 30362+ PTR? 114.114.114.114.in-addr.arpa. (46) 17:09:51.771237 IP xiaoyu.42195 > public1.114dns.com.domain: 31169+ PTR? 146.1.168.192.in-addr.arpa. (44) 17:09:54.003447 IP xiaoyu.59476 > public1.114dns.com.domain: 12225+ A? xiaoyu. (24) 4、抓取源ip是本机ip,目的ip地址是114.114.114.114的udp的53号端口的数据包 [root@xiaoyu nat]#tcpdump -i ens36 host 192.168.1.146 and dst host 114.114.114.114 and udp port 53 5、抓取访问本机的22号端口或者80端口的数据包 [root@xiaoyu nat]#tcpdump -i ens36 dst port 22 or dst port 80 6、抓取源ip是192.168.1.0网段来的,访问本机22号端口的数据包 [root@xiaoyu nat]#tcpdump -i ens36 src net 192.168.1.0/24 and tcp dst port 22 ##### 5、ss--\>不需要安装 ![](https://i-blog.csdnimg.cn/img_convert/08a55674b7814469c10dfe06adfadc62.png) ### 查看网络流量的命令 ##### 1、glances pip3 install glances ![](https://i-blog.csdnimg.cn/img_convert/505ec9234209deb0bea00e2141fd4e48.png) ##### 2、dstat还可看cpu、内存 yum install dstat -y \[root@xiaoyu nat\]# **dstat -N ens33,ens36,total** ![](https://i-blog.csdnimg.cn/img_convert/1572990027e26dd6a7f439aebadd3601.png) \[root@xiaoyu nat\]# **dstat -N ens33,ens36,total -am** ![](https://i-blog.csdnimg.cn/img_convert/65ca7c0503c894df8613555c223f2beb.png) ##### 3、iftop yum install epel-release -y yum install iftop -y ![](https://i-blog.csdnimg.cn/img_convert/0e8173191ec301e90e528b1e9d6eca02.png) ##### 4、nethogs--\>查看某个进程消耗了多少流量 yum install nethogs -y ![](https://i-blog.csdnimg.cn/img_convert/9d52d9573a5dbb1e315e1a284e9393eb.png) ### 拥塞控制的四个算法 ![](https://i-blog.csdnimg.cn/img_convert/9528678d1f426e2bb586b5f2f68df523.png) ###### 1. 慢启动(Slow Start) * 目的:**刚连接时,一点点试探网络容量** * 行为:**拥塞窗口 cwnd 指数增长**(1→2→4→8→16...) * 触发条件:连接建立、超时重传后 * 阈值:到达 **ssthresh(慢启动门限)** 后,进入拥塞避免 ###### 2. 拥塞避免(Congestion Avoidance) * 目的:**平稳增加,防止突然拥塞** * 行为:**cwnd 线性增长**(每个 RTT+1) * 触发条件:cwnd ≥ ssthresh ###### 3. 拥塞发生(快重传 Fast Retransmit) * 触发:**连续收到 3 个重复 ACK**(不是超时) * 行为:不等超时,**立刻重传丢失的报文** * 不进入慢启动,直接进入**快速恢复** ###### 4. 快速恢复(Fast Recovery) * 行为: 1. 1. **ssthresh = cwnd / 2** 2. **cwnd = ssthresh + 3**(对应 3 个重复 ACK) 3. 线性增长,恢复正常传输 * 目的:**不用从头慢启动,快速恢复速度** ### 常见协议端口号 ###### TCP常见协议 |-------|----------------------|-----|------------| | 20/21 | FTP 文件传输 | 22 | SSH 安全远程登录 | | 23 | Telnet 远程登录 | 25 | SMTP 邮件发送 | | 53 | DNS 域名解析(TCP+UDP 都用) | 80 | HTTP 网页服务 | | 110 | POP3 邮件接收 | 143 | IMAP 邮件接收 | | 3306 | MySQL 数据库 | | | ###### UDP常见协议 |-------|---------------|---------|------------| | 端口 | 协议 | 端口 | 协议 | | 69 | TFTP 简单文件传输协议 | 123 | NTP 网络时间协议 | | 53 | DNS 域名服务 | 111 | RPC 远程过程调用 | | 67/68 | DHCP 自动获取 IP | 161/162 | SNMP 网络管理 |

相关推荐
艾莉丝努力练剑2 小时前
【Linux网络】计算机网络入门:从背景到协议,理解网络通信基础
linux·运维·服务器·c++·学习·计算机网络
positive_zpc1 天前
计算机网络——网络层(一)
网络·计算机网络
Ether IC Verifier1 天前
PCIe数据链路层详细介绍
网络·网络协议·tcp/ip·计算机网络·dpu
positive_zpc1 天前
计算机网络——网络层(二)
服务器·网络·计算机网络
眷蓝天1 天前
计算机网络技术
计算机网络
苦 涩1 天前
考研408笔记计算机网络(五)——传输层
笔记·计算机网络·考研408
@encryption1 天前
计算机网络 --- VLAN
网络·计算机网络·智能路由器
苦 涩1 天前
考研408笔记之计算机网络(六)——应用层
笔记·计算机网络·考研408