网络协议和常用网络工具
计算机网络
- 在计算机之间传递数据
- 概念:功能完善的网络软件及协议实现资源共享和信息传递的系统
- 主要网络有哪些
- 局域网
- 城域网
- 广域网
- 最初的网络–ARPANET
- 两种最开放的网络平台
- ISO 提出osi模型
- IEEE 提出tcp/ip模式
- Internet互联网从93年开始席卷世界
计算机网络体系结构
TCP/IP模型
-
1.应用层,对应于osi模型又能继续划分为3层
- 应用层,为应用程序提供服务
- 表示层,数据格式转化、数据加密
- 会话层,建立、管理和维护会话
-
2.传输层
- 相当于osi模型的传输层,建立、管理和维护端对端的连接
-
3.网络层
- 相当于osi模型的网络层,IP选址及路由选址
-
4.链路层,对应于osi模型,还能再分两层
- 链路层,提供介质访问和链路管理
- 物理层,物理传输
-
osi物理层可以简单理解为网卡、网线,osi链路层可以理解为网卡的驱动程序,网络层向上的功能都是由操作系统完成的
-
应表会传网数(链)物
TCP/IP协议族
-
Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,是Internet最基本的协议、Internet国际互联网络的基础,由网络层的IP协议和传输层的TCP协议组成。协议采用了4层的层级结构。然而在很多情况下,它是利用 IP 进行通信时所必须用到的协议群的统称。
-
TCP/IP概念层模型 功能 TCP/IP协议族 文件传输、电子邮件、文件服务、虚拟终端 TFTP、HTTP、SNMP、FTP、SMTP、DNS、Telnet 应用层 数据格式化、代码转换、数据加密 无 解除或建立与别的接点的联系 无 传输层 提供端与端的接口 TCP、UDP 网络层 为数据包选择路由 IP、ICMP、RIP、OSPF、BGP、IGMP 链路层 传输有地址的帧以及错误检测功能 SLIP、CSLIP、PPP、ARP、RARP、MTU 以二进制数据形式在物理媒体上传输数据 ISO2110、IEEE802、IEEE802.2 -
qq中的一些数据传输就是用udp传输的
- 怎么把udp变可靠?
- 往上层变可靠,HTTP3就是用udp实现的
-
DNS将域名转换成实际的ip地址
网络传输中的数据
-
包是全能性术语;
-
帧用于表示数据链路层中包的单位;
- “I’m Desson” +TCP包首部+IP包首部+以太网包首部
-
片是 IP中数据的单位;
- “I’m Desson” +TCP包首部+IP包首部
-
段则表示 TCP 数据流中的信息;
- “I’m Desson” +TCP包首部
-
消息是指应用协议中数据的单位。
- “I’m Desson”
-
用户A发送 用户B接受 "I'm Desson" 上一层 "I'm Desson" #前面是数据,后面附加TCP包首部 "I'm Desson" +TCP包首部 "I'm Desson" +TCP包首部 传输层 TCP包首部的解析 #数据+TCP包首部+IP包首部 "I'm Desson" +TCP包首部+IP包首部 "I'm Desson" +TCP包首部+IP包首部 网络层 IP包的解析,识别上一层为TCP #数据+TCP包首部+IP包首部+以太网包首部 "I'm Desson" +TCP包首部+IP包首部+以太网包首部 数据链路层 以太网首部解析,识别上一层为ip 以太网光缆---> 物理层 --->以太网光缆
TCP/IP协议链路流转图
-
HTTP 在线视频 Ping命令 应用层 应用程序 应用程序 应用程序 ↑ ↑ ↓ ↓ 传输层 TCP UDP ↖ ↑ ↘ ↑ 网络层 IGMP ← ← IP → → ICMP ↑ ↓ 链路层 ARP ← ← 硬件接口 → → RARP ↑ ↓ 物理传输介质 ----------------------------------------- ↓→↑← ↖ ↗ ↘ ↙
-
TCP:面向连接的、可靠的流协议
-
UDP:面向无连接的通讯协议
-
IP:在源地址和目的地址之间传送的数据包—寻址
-
ICMP:控制报文协议–辅助
-
IGMP:internet组管理协议
-
ARP:地址解析协议–辅助
-
RARP:反向地址转化协议
-
如果想越过tcp/ip,直接从数据链路层访问,需要使用原始套接字,但是java无法访问,只能通过c/c++来编写
-
一般说的tcp dump抓包就是通过访问数据链路层实现的
网络通信中的地址和端口号
MAC地址
-
以太网适配器 以太网: 连接特定的 DNS 后缀 . . . . . . . : 描述. . . . . . . . . . . . . . . :Relatek PCIe GbE Family Controller 物理地址. . . . . . . . . . . . . :B0-25-AA-35-23-BE DHCP 已启用. . . . . . . . . . . . :是 自动配置已启用 . . . . . . . . . . .:是 本地连接 IPv6 地址. . . . . . . . . :fe80::c85e:d254:bf25:449a%12(首选) IPv4 地址 . . . . . . . . . . . . .:192.168.0.154(首选) 子网掩码 . . . . . . . . . . . . . .:255.255.255.0 获得租约的时间 . . . . . . . . . . . :2020年9月15日 10:25:02 租约过期的时间 . . . . . . . . . . . :2020年9月15日 16:08:59 ... 无限局域网适配器 WLAN: 媒体状态 . . . . . . . . . . . . . :媒体已断开连接 连接特定的DNS后缀 . . . . . . . . . : 描述 . . . . . . . . . . . . . . .:Intel(R) Wireless-AC 9462 物理地址. . . . . . . . . . . . . .:24-41-8c-26-34-9E DHCP 已启用 . . . . . . . . . . . .:是 自动配置已启动 . . . . . . . . . . .:是
-
物理地址,6字节,跟着硬件走的
- 前24位,全世界同一分类
- 后24位,网络设备生产厂商自行定义
-
IPv4地址,互联网给网络和主机匹配的一个逻辑地址,并区别物理地址
-
ipv4只有4段,数量相对比较小,ipv6的网络地址更多
IP地址
IP地址和mac地址区别
- ip地址可改,mac地址不可改
- 长度不同,前者32位,后者48位
- 寻址协议不同
- Ip作用在网络层,网络子网之间的数据通信,
- mac作用在数据链路层,主要用在局域网内两台设备通信
- 一台机器怎么找到另一台它要发送数据的机器?
- 子网网关跟子网内所有机器都有连接
- 子网a机器要往子网b机器发数据时,是通过广播的形式,同时向子网内所有机器发送,但是消息体的内容是消息体+目标机器的mac地址,接受消息的机器接受到消息会判断发送的mac地址和自己的mac地址是否相同,不同则丢弃
- 如果是更大的internet网络里面,不是同一个子网怎么办?子网a的网关也会接受到子网a发送的消息,通过对ip地址解析,通过子网掩码计算,发现目标服务器不是当前子网内的机器,网关就会把该消息通过路由器往外部更大的网络传输,一级一级的往外发送,最终跳转到目标服务器,这又牵扯到路由器的路由协议和路由表
端口号
-
用来识别同一台计算机中进行通信的不同应用程序。因此,它也被称为程序地址
-
-
如果机器上有多个程序在监听消息,此时应该将数据传给哪个应用程序处理呢?
-
数据+IP
-
访问的消息上带有需要访问程序的端口号,但是非强制,如果不写,操作系统会分配一个,49152-65535之间随机分配,但是服务器重启就会变化,此时服务器端就无法提供有效的服务
-
有一些端口号是约定俗成的,0-1023之间不要自己定义,1924-4915在相关部门注册过,但是没有强制不让使用
服务器
-
HTTP服务--端口80 Zookeeper服务--端口2181 Mysql服务--端口3306 更多服务--端口xx IP地址(可变) IP地址(可变) MAC地址 MAC地址 网卡1 网卡2
-
每个网卡的mac地址是不同的,并且是它自己独有的
-
源IP地址 目标IP地址 TCP 源端口号 目标端口号 数据 192.168.4.22 196.168.4.20 6 2001 80 192.168.4.22 196.168.4.20 6 2002 80 192.168.4.21 196.168.4.20 6 2001 80
-
IP首部— 源ip地址+目标ip地址+TCP
-
TCP首部— 源端口号+目标端口号
-
通过源ip地址、目标ip地址、协议号、源端口号、以及目标端口号这五个元素识别一个通信
- 这样一个五元组就能在网络上唯一的标识一个网络通信
TCP概述
-
什么是TCP ( Transmission Control Protocol )?
-
TCP的基本特性
-
面向连接,这是通讯的第一条件,而udp是不需要连接的,所以udp也经常用在广播上
-
可靠性,我们称tcp为可靠的数据流服务,由于带宽优先,会对传输的数据进行切分,然后一份一份的传输。而可靠性是由超时重传、应答确认来保证的。
超时重传:没有一个确定的数值,需要根据网络情况动态调整,操作系统会采样,每当有发送数据包到另一台服务器,到收到应答的时间,会对这个时间进行采样,然后动态设置超时重传值,这个值就叫做rtt,然后再通过算法和公式平滑这个参数,最终来确定这个重传超时时间rto。
应答确认:
-
RTT和RTO,rtt–rount trip time,rto–retransmismission time out
-
数据排序:实际传输时是无法保证按传输顺序到达的,通过标记传输序号,接受端根据序号进行最终的排序
-
流量控制:两台服务器传输数据,无法保证两台服务器传输速度一致,假设一台服务器发送了100单位,而接受服务器最多接受90个,多余的10个被丢弃掉,但是在tcp当中建立了滑动窗口的概念,两台服务器在通讯的过程中,会协商调整可以接受的数据大小
-
全双工:两台服务器建立连接后,数据既可以从a发到b,又可以从b发到a,而且同时也是可以的,如果交叉可以发,但是不能同时发,则是半双工
-
与udp相比
- udp是允许丢包的,比如视频流,丢一部分包,在视频上根本看不出来
TCP连接中的三次握手–面向连接的含义
-
源于arpanet网,特点是分散,避免被斩首,一个节点坏了,仍然可以绕过这个节点建立连接
-
在网络通讯过程中,两台机器之间,数据在传输过程中,会经历很多网络节点,a和b为了通讯,会进行试探,如果可以传输,就会有一个虚拟的通道,虚拟连接/虚拟交换,可能会存在很多连通的路径,之前tcp为什么要求排序,就是因为排序在前的数据包也有可能最后才传到目标服务器
-
为什么要进行第一次握手?
- 找出两台机器有没有可达路径,或者有多少条,最近的是哪一条,这都是建立连接的目的
三次握手
-
建立一个TCP连接时,需要客户端和服务
-
端总共发送3个包以确认连接的建立。
- 第一次握手:客户端请求建立连接。
- 第二次握手:服务端应答客户端,并请求建立连接。
- 第三次握手:客户端针对服务端请求确认应答。
-
三次握手全过程 客户端 服务器端 第一次握手 客户端发送第一次请求 标志位SYN=1 序列值seq=43(随机值) ---------------------->1 发送完后,客户端进入SYN_SENT状态 服务器端对第一次请求做出应答 标志位SYN=1 #多出的标志位: #确认位ACK=1 #应答值ack=seq+1=44 #序列值seq=67(随机值) 2<---------------------- 服务器端发送完毕,进入SYN_RECV状态 客户端接收并确认无误后,发送第二次请求 确认位ACK=1 #应答值ack=seq+1=68 #序列号seq=44 ---------------------->3 发送完后,客户端进入ESTABLISHED状态 服务端接收后,检查ACK是否为1,ack值是否自增1 如果都符合,服务器也进入ESTABLISHED状态
-
SYN-请求包
-
ACK-应答包
-
确认ack具体增加多少值是跟传输的数据大小相关的,假如是从500开始,一共10字节,则加10,下次客户端发送的数据包应该从511开始
为什么需要3次握手?
- TCP是面对连接的,所以需要双方都确认连接的建立。i
- 第一次握手和第二次握手,确定了两台服务器之间是可达的,网络流转是通的
- 第三次握手是为了防止之前失败的连接请求突然又连接上,造成不必要的网络资源浪费。而第三次握手,已经对客户端的请求做出了应答,此时再有请求也不会应答了。更详细的解释是因为tcp是可靠的传输协议,而三次握手是既可以保证可靠传输,又能提高传输效率的最少次数外,rfc793文档协议规定为了保证可靠的数据传输,tcp传输的双方都必须维护一个序列号,用来标识在网络通信过程中哪些数据包是被对方已经确认的。
TCP的3次握手的漏洞–SYN洪泛攻击
- 三次握手的第二次握手,服务端向客户端发送应答请求,需要带客户端的IP,由客户端发送请求时获得,现在假设有一个攻击者,假设发送给服务器端的IP是假的,而且是大量发送,这时服务器端也会积极响应,但是是发送到错误的IP地址,迟迟不能完成3次握手,这时服务器端会进入半连接状态。
SYN洪泛攻击
- 定义:通过网络服务所在的端口发送大量伪造原地址的攻击报文,发送到服务端,造成服务端上的半开连接队列被占满,从而阻止其他用户进行访问。
- 原理:攻击者客户端利用伪造的IP地址向服务端发出请求(第一次握手),而服务端的响应(第二次握手)的报文将永远发送不到真实的客户端,服务端在等待客户端的第三次握手(永远都不会有的),服务端在等待这种半开的连接过程中消耗了资源,如果有成千上万的这种连接,主机资源将被耗尽,从而达到攻击的目的。
- 解决方案
- 无效连接监控释放 — 到达一定阈值,但是会把正常的也移除掉,不推荐
- 延缓TCB分配方法 — 服务器接收到网络请求,会在操作系统内核分配TCB连接资源(连接操作资源),一般200个字节,这是连接的主要消耗,这也是一种解决思路
- 防火墙 — 一般采用防火墙,目前最好的