1.网络协议
1.1 计算机网络
- 定义
计算机网络的标准定义是: 利用通信线路将地理上
分散的
、具有独立功能的计算机系统
和通信设备
按不同的形式连接起来,以功能完善的网络软件
及协议
实现资源共享和信息传递的系统
。 - 分类
- 按覆盖范围划分
- 局域网
LAN
(作用范围一般为几米到几十公里) - 城域网
MAN
(界于 WAN 与 LAN 之间) - 广域网
WAN
(作用 范围一般为几十到几千公里)
- 局域网
- 按拓扑结构划分
- 总线型
- 环型
- 星型
- 网状
- 按信息的交换方式
- 电路交换
- 报文交换
- 报文分组交换
- 按覆盖范围划分
2.计算机网络体系结构
2.1 OSI七层模型
开放系统互连参考模型 (Open System Interconnect 简称 OSI
) 采用了分层的结构化技术,共分七层,物理层
、数据链路层
、网络层
、传输层
、会话层
、表示层
、应用层
。
- 各层的作用及对应的协议(简化)
2.2 TCP/IP 四层模型
OSI模型
比较复杂且学术化,所以我们实际使用的 TCP/IP 模型
,共分 4 层,链路层
、网络层
、传输层
、应用层
。
- 两个模型之间的对应关系如图所示:
2.3 五层模型
五层模型只出现在计算机网络学习教学过程中,他是对七层模型和四层模型的一个折中,及综合了
OSI
和TCP/IP
体系结构的优点,这样既简洁又能将概念阐述清楚。
2.4 TCP/IP 协议族
2.5 TCP/IP 网络传输中的数据
2.6 地址和端口号
2.6.1 MAC地址
MAC 地址全称叫做媒体访问控制地址(Media Access Control)
,也称为局域网地址(LAN Address)
,MAC 位址
, 以太网地址(Ethernet Address)
或物理地址(Physical Address)
,由网络设备制造商生产时写在硬件内部。
- MAC 地址与网络无关。
- 共48位(6 个字节)。前24位由
IEEE(电气和电子工程师协会)
决定如何分配,后24位由实际生产该网络设备的厂商自行制定。
2.7 IP 地址
IP 地址(Internet Protocol Address)
的全称叫作互联网协议地址
,它的本义是为互联网上的每一个网络和每一台主机配置一个唯一的逻辑地址
,用来与物理地址
作区分。
所以 IP 地址用来识别 TCP/IP 网络中互连的主机和路由器。IP 地址基于逻辑,比较灵活,不受硬件限制,也容易记忆。
IP 地址分为:
IPv4
IPv6
我们这里着重讲的是 IPv4 地址,IP 地址是由 32 位的二进制数
组成,它们通常被分为 4 个“8 位二进制数”
,我们可以把它理解为 4 个字节
,格式表示为:
A.B.C.D
其中,A,B,C,D 这四个英文字母表示为 0-255 的十进制的整数
。例: 192.168.1.1
Tips: IP 地址和 MAC 地址之间的区别
- 1、对于网络中的一些设备,路由器或者是 PC 及而言,IP 地址的设计是出于拓扑设计出来的,只要在不重复 IP 地址的情况下,它是可以随意更改的;而 MAC 地址是根据生产厂商烧录好的,它一般不能改动的,一般来说,当一台 PC 机的网卡坏了之后,更换了网卡之后 MAC 地址就会变了。
- 2、在前面的介绍里面,它们最明显的区别就是长度不同,IP 地址的长度为 32 位,而 MAC 地址为 48 位。
- 3、它们的寻址协议层不同。IP 地址应用于 OSI 模型的网络层,而 MAC 地址应用在 OSI 模型的数据链路层。 数据链路层协议可以使数据从一个节点传递到相同链路的另一个节点上(通过 MAC 地址),而网络层协议使数据可以从一个网络传递到另一个网络上(ARP 根据目的 IP 地址,找到中间节点的 MAC 地址,通过中间节点传送,从而最终到达目的网络)。
- 4、分配依据不同。IP 地址的分配是基于我们自身定义的网络拓扑,MAC 地址的分配是基于制造商。
2.8 端口号
- 用来识别同一台计算机中进行通信的不同应用程序。
- 标准既定的端口号,即
知名端口号
,分布在0 ~ 1023
之间。比如HTTP(80)、FTP(22)。 - 正式注册的端口号,它们分布在
1024 ~ 49151
之间。 - 操作系统分配,动态分配的端口号范围在
49152~65535
之间。
2.9 五元素识别唯一一个网络通信
五元素:源IP地址、目标IP地址、协议号(协议类型)、源端口号以及目标端口号。
3.TCP概述
TCP(Transmission Control Protocol)
是面向连接
的通信协议,通过三次握手
建立连接, 然后才能开始数据的读写,通讯完成时要拆除连接(四次挥手
),由于 TCP 是面向连接的所以只能用于端到端
的通讯。
TCP 提供的是一种可靠的
数据流服务,数据有可能被拆分后发送,那么采用超时重传机制
和应答确认机制
是组成 TCP 可靠传输的关键设计。
3.1 三次握手-建立连接
TCP 提供面向有连接的通信传输。
面向有连接是指在数据通信开始之前先做好两端之间的准备工作。
3.1.1 过程
所谓三次握手
是指建立一个 TCP 连接时需要客户端和服务器端总共发送三个包
以确认连接的建立。在 socket
编程中,这一过程由客户端执行 connect
来触发。
第一次握手
客户端将标志位SYN 置为 1
,随机产生一个值seq=J
,并将该数据包发送给服务器端,客户端进入SYN_SENT
状态,等待服务器端确认。第二次握手
服务器端收到数据包后由标志位SYN=1
知道客户端请求建立连接,服务器端将标志位SYN
和ACK
都置为 1,ack=J+1
,随机产生一个值seq=K
,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RCVD
状态。第三次握手
客户端收到确认后,检查ack
是否为J+1
,ACK
是否为 1,如果正确则将标志位ACK
置为 1,ack=K+1
,并将该数据包发送给服务器端,服务器端检查ack
是否为K+1
,ACK
是否为 1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED
状态,完成三次握手
,随后客户端与服务器端之间可以开始传输数据了。
三次握手是保证数据可靠传输又能提高传输效率的
最小次数
.
三次握手的过程即是通信双方相互告知序列号起始值
,并确认
对方已经收到了序列号起始值的必经步骤.
3.1.2 TCP 的三次握手的漏洞-SYN 洪泛攻击
三次握手中有一个第二次握手
,服务端向客户端应答请求
,应答请求是需要客户端IP 的,攻击者就伪造
这个IP,往服务器端狂发送
第一次握手的内容,当然第一次握手中的客户端IP 地址是伪造的
,从而服务端忙于进行第二次握手但是第二次握手当然没有结果,所以导致服务器端被拖累,死机.
解决方案:
无效连接监视释放(不推荐)
,不停监视所有的连接,包括三次握手的,还有握手一次的,当达到一定(与)阈值时拆除这些连接,从而释放系统资源,不管是正常的还是攻击的;延缓TCB 分配方法
,一般的做完第一次握手之后,服务器就需要为该请求分配一个TCB(连接控制资源,要200多个字节)
,当正常连接建立起来后再分配TCB 则可以有效地减轻服务器资源的消耗;使用防火墙
,防火墙在确认了连接的有效性后,才向内部的服务器(Listener
)发起SYN
请求
3.2 四次挥手-断开连接
- 为什么TCP 的挥手需要四次?TCP 是
全双工
的连接,必须两端同时关闭
连接,连接才算真正关闭; - 为什么需要
TIME-WAIT
状态?- 可靠的终止TCP 连接
- 保证让迟来的TCP 报文有足够的时间被识别并丢弃
4.网络工具
- WireShark
- tcpdump
5.HTTP
HTTP 协议是 Hyper Text Transfer Protocol(超文本传输协议)
的缩写,是用于从万维网 (WWW:World Wide Web
)服务器传输超文本
到本地浏览器的传送协议。
HTTP 是一个
无状态
的协议。无状态是指客户机(Web 浏览器)和服务器之间不需要建立持久的连接, 这意味着当一个客户端向服务器端发出请求,然后服务器返回响应(response),连接就被关闭了,在服 务器端不保留连接的有关信息。
HTTP 使用统一资源标识符(
Uniform Resource Identifiers, URI
)来传输数据和建立连接。URL
是一种特殊类型的URI
,包含了用于查找某个资源的足够的信息。URL,全称是
Uniform Resource Locator
, 中文叫统一资源定位符
,是互联网上用来标识某一处资源的地址。传输流程
- 地址解析
- 封装 HTTP 请求数据包
- 封装成 TCP 包并建立连接
- 客户机发送请求命令
- 服务器响应
- 服务器关闭 TCP 连接
一套完整的网络的流程
5.1 HTTP 协议报文结构
用于 HTTP 协议交互的信息被称为 HTTP 报文
。
请求端(客户端)
的 HTTP 报文叫做请求报文
;响应端(服务器端)
的叫做响应报文
。HTTP 报文
本身是由多行
(用 CR+LF 作换行符)数据构成的字符串文本。
HTTP 报文大致可分为报文首部
和报文主体
两部分。两者由最初出现的空行(CR+LF) 来划分。通常,并不一定有报文主体。
5.1.1 请求报文
5.1.2 响应报文
请求/响应报文实例:
具体可参考 《图解 HTTP》《HTTP 权威指南》,以及霜神