目录
小知识点:
三次握手:
状态:
tcpdump:
一:命令介绍:
二:命令选项:
tcpdump的表达式:
使用python扫描LAN工具:
subprocess模块
arp协议
arp病毒:
ICMP协议:
如果ping不通可能有什么原因:
小知识点:
负载均衡工作在第四层和第七层
IP地址:点到点
端到端:就是端口号到端口号
服务进程占用端口号
socket:槽,对接的接口
网络socket:ip+port --》192.168.0.1:80
UDP:用户数据报协议,(http,ftp,ssh,mysql)
TCP:传输控制协议, (qq,DNS,dhcp)
DNS平常使用UDP,但是两台电脑传输数据时,主DNS服务器和从DNS服务器使用UDP
TCP
端口号16+16
端口号的范围:2^16=0-65536
系统和里面常用的端口是0~1023 系统预留和常用的经典端口号(ssh 22;http 80)
liunx里面/etc/service有端口号
seq序列号:每个报文的字节数开头第一个字节的位置
ack确认号:下一个报文的序列号
6个控制位:
urgent 紧急位
ACK 确认位
push 急迫位
reset 重置位(之前建立过连接,现在失效了,现在重新建立连接)
syn 同步位(需要和别人建立连接)
fin 终止位 (表示想和人家断开)
16位窗口大小:滑动窗口的大小
三次握手:
状态:
CLOSED:初始状态,表示TCP连接是“关闭着的”或“未打开的”。
LISTEN :表示服务器端的某个SOCKET处于监听状态,可以接受客户端的连接。
SYN_RCVD :表示服务器接收到了来自客户端请求连接的SYN报文。在正常情况下,这个状态是服务器端的SOCKET在建立TCP连接时的三次握手会话过程中的一个中间状态,很短暂,基本上用netstat很难看到这种状态,除非故意写一个监测程序,将三次TCP握手过程中最后一个ACK报文不予发送。当TCP连接处于此状态时,再收到客户端的ACK报文,它就会进入到ESTABLISHED 状态。
SYN_SENT :这个状态与SYN_RCVD 状态相呼应,当客户端SOCKET执行connect()进行连接时,它首先发送SYN报文,然后随即进入到SYN_SENT 状态,并等待服务端的发送三次握手中的第2个报文。SYN_SENT 状态表示客户端已发送SYN报文。
ESTABLISHED :表示TCP连接已经成功建立。
FIN_WAIT_1 :这个状态得好好解释一下,其实FIN_WAIT_1 和FIN_WAIT_2 两种状态的真正含义都是表示等待对方的FIN报文。而这两种状态的区别是:FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,它想主动关闭连接,向对方发送了FIN报文,此时该SOCKET进入到FIN_WAIT_1 状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2 状态。当然在实际的正常情况下,无论对方处于任何种情况下,都应该马上回应ACK报文,所以FIN_WAIT_1 状态一般是比较难见到的,而FIN_WAIT_2 状态有时仍可以用netstat看到。
FIN_WAIT_2 :上面已经解释了这种状态的由来,实际上FIN_WAIT_2状态下的SOCKET表示半连接,即有一方调用close()主动要求关闭连接。注意:FIN_WAIT_2 是没有超时的(不像TIME_WAIT 状态),这种状态下如果对方不关闭(不配合完成4次挥手过程),那这个 FIN_WAIT_2 状态将一直保持到系统重启,越来越多的FIN_WAIT_2 状态会导致内核crash。
TIME_WAIT :表示收到了对方的FIN报文,并发送出了ACK报文。 TIME_WAIT状态下的TCP连接会等待2*MSL(Max Segment Lifetime,最大分段生存期,指一个TCP报文在Internet上的最长生存时间。每个具体的TCP协议实现都必须选择一个确定的MSL值,RFC 1122建议是2分钟,但BSD传统实现采用了30秒,Linux可以cat /proc/sys/net/ipv4/tcp_fin_timeout看到本机的这个值),然后即可回到CLOSED 可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。(这种情况应该就是四次挥手变成三次挥手的那种情况)
CLOSING :这种状态在实际情况中应该很少见,属于一种比较罕见的例外状态。正常情况下,当一方发送FIN报文后,按理来说是应该先收到(或同时收到)对方的ACK报文,再收到对方的FIN报文。但是CLOSING 状态表示一方发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什么情况下会出现此种情况呢?那就是当双方几乎在同时close()一个SOCKET的话,就出现了双方同时发送FIN报文的情况,这是就会出现CLOSING 状态,表示双方都正在关闭SOCKET连接。
CLOSE_WAIT :表示正在等待关闭。怎么理解呢?当对方close()一个SOCKET后发送FIN报文给自己,你的系统毫无疑问地将会回应一个ACK报文给对方,此时TCP连接则进入到CLOSE_WAIT状态。接下来呢,你需要检查自己是否还有数据要发送给对方,如果没有的话,那你也就可以close()这个SOCKET并发送FIN报文给对方,即关闭自己到对方这个方向的连接。有数据的话则看程序的策略,继续发送或丢弃。简单地说,当你处于CLOSE_WAIT 状态下,需要完成的事情是等待你去关闭连接。
LAST_ACK :当被动关闭的一方在发送FIN报文后,等待对方的ACK报文的时候,就处于LAST_ACK 状态。当收到对方的ACK报文后,也就可以进入到CLOSED 可用状态了。
CLOSING状态:
产生的原因是客户端和服务端同时关闭
tcpdump:
是什么?解决什么问题?谁使用?
liunx里面的一个命令,网络流量监控工具,监控网卡,解决网络上的问题,例如:数据是否到达,里面是否有我们想要的数据;进行故障排除个分析
ICMP协议:互联网网络控制协议,控制网络;网络通不通,主机是否可达,路由器是否可以使用
一:命令介绍:
tcpdump,用简单的语言概括就是dump the traffic on a network,是一个运行在linux平台可以根据使用者需求对网络上传输的数据包进行捕获的抓包工具,windows平台有sniffer等工具,tcpdump可以将网络中传输的数据包的“包头”全部捕获过来进程分析,其支持网络层、特定的传输协议、数据发送和接收的主机、网卡和端口的过滤,并提供and、or、not等语句进行逻辑组合捕获数据包或去掉不用的信息。
命令选项和捕获主机对到主机的数据包:
二:命令选项:
-a #将网络地址和广播地址转变成名字 -A #以ASCII格式打印出所有分组,并将链路层的头最小化 -b #数据链路层上选择协议,包括ip/arp/rarp/ipx都在这一层 -c #指定收取数据包的次数,即在收到指定数量的数据包后退出tcpdump -d #将匹配信息包的代码以人们能够理解的汇编格式输出 -dd #将匹配信息包的代码以c语言程序段的格式输出 -ddd #将匹配信息包的代码以十进制的形式输出 -D #打印系统中所有可以监控的网络接口 -e #在输出行打印出数据链路层的头部信息 -f #将外部的Internet地址以数字的形式打印出来,即不显示主机名 -F #从指定的文件中读取表达式,忽略其他的表达式 -i #指定监听网络接口 -l #使标准输出变为缓冲形式,可以数据导出到文件 -L #列出网络接口已知的数据链路 -n #不把网络地址转换为名字 -N 不输出主机名中的域名部分,例如www.baidu.com只输出www -nn #不进行端口名称的转换 -P #不将网络接口设置为混杂模式 -q #快速输出,即只输出较少的协议信息 -r #从指定的文件中读取数据,一般是-w保存的文件 -w #将捕获到的信息保存到文件中,且不分析和打印在屏幕 -s #从每个组中读取在开始的snaplen个字节,而不是默认的68个字节 -S #将tcp的序列号以绝对值形式输出,而不是相对值 -T #将监听到的包直接解析为指定的类型的报文,常见的类型有rpc(远程过程调用)和snmp(简单网络管理协议) -t #在输出的每一行不打印时间戳 -tt #在每一行中输出非格式化的时间戳 -ttt #输出本行和前面以后之间的时间差 -tttt #在每一行中输出data处理的默认格式的时间戳 -u #输出未解码的NFS句柄 -v #输出稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息 -vv#输出相信的保报文信息
tcpdump的表达式:
表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包 将会被截获,在表达式中一般如下几种类型的关键字:
a):关于数据类型的关键字:
包括host、port、net,例如host 192.168.1.1表示这是一台主机,net 192.168.0.0表示这是一个网络地址,port 22指明端口号是22,如果没有指明类型,则默认的类型是host。
b):数据传输方向的关键字:
包括src、dst、dst or src、dst and src,这些关键字指明了传输的方向,比如src 192.168.1.1说明数据包源地址是192.168.1.1,dst net 192.168.0.0指明目的网络地址是192.168.0.0,默认是监控主机对主机的src和dst,即默认监听本机和目标主机的所有数据。
c):协议关键字:
包括ip、arp、rarp、tcp、udp等,
d):其他关键字:
运算类型的:or、and、not、!
辅助功能型的:gateway、less、broadcast、greater
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode ##并没有输出详细的信息,想看详细的使用-v -vv listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes ## 2847 packets captured ## 2847 packets received by filter ## 0 packets dropped by kernel
scping=subprocess.run("ping 192.168.2.132 -c 4",shell="True",stdout=subprocess.PIPE,stderr=subprocess.PIPE)
ip = subprocess.run(f"ping -c 1 -w 1 192.168.2.{i}",shell=True,stdout.subprocess.PIPE,stderr.subprocess.PIPE)
使用python扫描LAN工具:
python调用liunx的命令:
os模块
os.mkdir("/..")
subprocess模块
subprocess.run(args, *, stdin=None, input=None, stdout=None, stderr=None, capture_output=False, shell=False, cwd=None, timeout=None, check=False, encoding=None, errors=None, text=None, env=None, universal_newlines=None)
- args:表示要执行的命令。必须是一个字符串,字符串参数列表。
- stdin、stdout 和 stderr:子进程的标准输入、输出和错误。其值可以是 subprocess.PIPE(保存输入输出)、subprocess.DEVNULL(不输出内容)
- timeout:设置命令超时时间。如果命令执行时间超时,子进程将被杀死,并弹出 TimeoutExpired 异常。
- check:如果该参数设置为 True,并且进程退出状态码不是 0,则弹 出 CalledProcessError 异常。
scp=subprocess.run("ping 192.168.1.111 -c 4",shell="True",stdout=subprocess.PIPE,stderr=subprocess.PIPE,check="False") scp.returncode ##查看代码是否执行成功 ############################################################## #!/usr/bin/python """ # Author: lkong # Created Time : 2022-07-23 16:06:53 5 6 # File Name: scan.py 7 # Description: 8 9 """ 10 import subprocess 11 use_ip=[] 12 unuse_ip=[] 13 for i in range(1,11): 14 ip = subprocess.run(f"ping -c 1 -w 1 192.168.2.{i}",shell=True,stdout=subproc ess.PIPE,stderr=subprocess.PIPE) 15 if ip.returncode == 0: 16 use_ip.append(f'192.168.2.{i}') 17 else: 18 unuse_ip.append(f'192.168.2.{i}') 19 20 print(f'正在使用的代码如下:\n{use_ip}') 21 print(f'没有使用的代码如下:\n{unuse_ip}')
查看liunx系统里面的协议和其端口
dns---》arp(域名解析得到IP地址后就地址解析得到mac地址)
arp协议
地址解析协议:没有对应端口号,工作在网络层,ip--》mac
arp缓存表在pc机和交换机上面
arp在工作的时候有两种类型的包
- arp request
- arp response
封装的角度去理解(PC机,交换机,路由器)
源IP地址和目的地址
arp封装之后:
然后进行arp广播
交换机会帮我们进行转发
得到的arp response包
arp病毒:
不断给交换机发送错误的arp response包
解决办法:静态绑定ip和mac地址就不会被干扰了
arp -s ip mac
pc机:火绒
ICMP协议:
互联网消息控制协议:网络通不通,主机是否可达,路由是否可用,用来探路的
ping:-s数据包大小;-c数量;-i时间间隔;-w超时时间
看网络质量:packet loss丢包率,time,ping的时间
如果ping不通可能有什么原因:
ip配置错误,没有写网关
或者路由器问题(ping百度,如果可以ping通,说明没有问题)
是不是对方服务器问题,可以用别的机器ping对方服务器,如果正常说明对方服务器没有问题
用tcpdump抓包看是否有接收到包,如果可以就说明机器可以接收到,看防火墙有没有组织
对方服务器去ping百度
ddos攻击:
DDOS是指拒绝服务攻击,亦称洪水攻击,是一种网络攻击手法,其目的在于使目标计算机的网络或系统资源耗尽,使服务暂时中断或停止,导致其正常用户无法访问。当黑客使用网络上两个或以上被攻陷的计算机作为“僵尸”向特定的目标发动“拒绝服务”式攻击时,称为分布式拒绝服务攻击。
攻击方式:
DDOS攻击可以具体分成两种形式:带宽消耗型以及资源消耗型。它们都是透过大量合法或伪造的请求占用大量网络以及器材资源,以达到瘫痪网络以及系统的目的。
解决办法(烧钱):
DOS攻击:封ip地址文章来源:https://www.toymoban.com/news/detail-449916.html
DDOS攻击:大多数完成注册的域名需要两个DNS服务器,但这远远不够。你要确保你的DNS服务器以及你的网站和其他资源都处于负载均衡的保护状态下。你也可以使用一些公司提供的冗余DNS。比如,有很多人使用内容分发网络(分布式的状态)给客户发送文件,这是一种很好的抵御DDoS攻击的方法。若你需要,也有很多公司提供了这种增强DNS的保护措施。文章来源地址https://www.toymoban.com/news/detail-449916.html
到了这里,关于计算机网络(4)传输层的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!