计算机网络
TCP/IP五层模型
OSI七层模型
OSI(Open System Interconnect),开放式系统互联。
名称 | 任务 | 数据单元 |
---|---|---|
应用层 | 通过应用进程间的交互来完成特定网络应用,进程指主机中正在运行的程序 ;应用层交互的数据单元称为报文 | message(消息) |
传输层 | 向两台主机中进程之间的通信提供通用的数据传输服务,运输层有着复用和分用的功能 ;传输层主要协议:传输控制协议TCP、用户数据报协议UDP | segment(TCP报文段)、datagram(UDP用户数据报) |
网络层 | 为分组交换网上的不同主机提供通信服务、选择合适的路由,使源主机传输层传下来的分组,能通过路由器找到目的主机。最重要的协议是: IP协议 | packet(IP数据报) |
数据链路层 | 相邻结点之间传送数据时,链路层将网络层交下来的IP数据包组装成帧,在相邻结点间的链路上传送帧 | frame(帧) |
物理层 | 确定与传输媒体的接口有关的一些特性,数据单位是比特 | bit(比特流) |
通信演示动图:
-
1、物理层
为上层协议提供了一个传输数据的可靠的物理媒介。简单的说,物理层确保原始的数据可在各种物理媒介上传输。
两个重要的设备名称:中继器和集线器。
-
2、数据链路层
数据链路层为网络层提供可靠的数据传输;
基本数据单位为:帧;
主要的协议:以太网协议;
两个重要的设备名称:网桥和交换机。
MAC帧格式:帧头(目的 MAC 地址 + 源 MAC 地址 + 类型 )+数据字段+帧尾(帧检验序列)
-
3、网络层
实现两个端系统之间的数据透明传送,具体功能包括寻址和路由选择、连接的建立、保持和终止等。它提供的服务使传输层不需要了解网络中的数据传输和交换技术。
基本数据单位:IP数据报(数据报、分组、包)
IP协议的主要功能有:无连接数据报传输、数据报路由选择和差错控制。
包含的主要协议:
IP协议(Internet Protocol,因特网互联协议);
ICMP协议(Internet Control Message Protocol,因特网控制报文协议);
ARP协议(Address Resolution Protocol,地址解析协议);
RARP协议(Reverse Address Resolution Protocol,逆地址解析协议);
重要的设备名称:路由器。
ICMP
报文包含在IP数据报中,属于IP
的一个用户,IP
头部就在ICMP
报文的前面,所以一个ICMP
报文包括IP头部、ICMP头部和ICMP报文,IP
头部的Protocol
值为1
就说明这是一个ICMP
报文;ICMP
头部中的类型(Type
)域用于说明ICMP
报文的作用及格式,此外还有一个代码(Code
)域用于详细说明某种ICMP
报文的类型,所有数据都在ICMP
头部后面。
-
4、传输层
将上层数据分段并提供端到端的、可靠的或不可靠的传输。此外,传输层还要处理端到端的差错控制和流量控制问题。网络层只是根据网络地址将源结点发出的数据包传送到目的结点,而传输层则负责将数据可靠地传送到相应的端口。
一个很重要的功能:复用和分用
信息传送的协议数据单元称为段或报文。
包含的主要协议:
TCP协议(Transmission Control Protocol,面向连接的传输控制协议);
UDP协议(User Datagram Protocol,无连接的用户数据报协议);
重要的设备名称:网关。
-
5、会话层
管理主机之间的会话进程,即负责建立、管理、终止进程之间的会话。会话层还利用在数据中插入校验点来实现数据的同步。
数据传输基本单位为:报文。
-
6、表示层
对上层数据或信息进行变换以保证一个主机应用层信息可以被另一个主机的应用程序理解。表示层的数据转换包括数据的加密、压缩、格式转换等。
数据传输基本单位为:报文。
-
7、应用层
为操作系统或网络应用程序提供访问网络服务的接口。直接为用户的应用进程提供服务(HTTP、FTP等)。
数据传输基本单位为:报文。
-
网络互连的中间设备
- 物理层使用的中间设备称为 转发器、中继器、集线器
- 数据链路层使用的中间设备称为 网桥/桥接器、交换机
- 网络层使用的中间设备称为 路由器
- 网络层以上使用的中间设备称为 网关
-
IP地址及分类
{<网络号>,<主机号>}
第一个字段 | 第二个字段 |
---|---|
网络号,标志主机或路由器所连接到的网络。 | 主机号,标志该主机或路由器 |
类别 | 网络号 | 主机号 | 可用范围 | 说明 |
---|---|---|---|---|
A类 | (0)8位 | 24位 | 1.0.0.1~126.255.255.254 | 剩余网络号全0和全1保留 |
B类 | (10)16位 | 16位 | 128.1.0.1~191.254.255.254 | 剩余网络号全0和全1保留 |
C类 | (110)24位 | 8位 | 192.0.1.1~223.255.254.254 | 剩余网络号全0和全1保留 |
类别 | 最大网络数(可用, 后同) | 第一个网络号 | 最后一个网络号 | 最大主机数 |
---|---|---|---|---|
A类 | 126(2^7 - 2) | 1.0.0.0 | 126.0.0.0 | 2^24 - 2 |
B类 | 16383(2^14 - 1) | 128.1.0.0 | 191.255.0.0 | 2^16 - 2 |
C类 | 2097151(2^21 - 1) | 192.0.1.0 | 223.255.255.0 | 2^8 - 2 |
注:
-
A类网络号减2:1、IP全0表示 本网络; 2、IP 127(01111111)表示环回测试地址
-
A类主机号减2:1、全0表示所连接到的单个网络地址; 2、全1表示所有主机
-
B类网络号减1:1、前面两位(1 0)已经固定,不会出现全0或全1; 2、128.0.0.0不指派
-
B类主机号减2:扣除全0和全1的情况
-
C类网络号减1:1、前面两位(1 1 0)已经固定,不会出现全0或全1; 2、192.0.0.0不指派
-
C类主机号减2:扣除全0和全1的情况
-
其他
-
控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
-
IP地址放在IP数据报的首部,而硬件地址放在MAC帧的首部。在网络层及以上使用的是IP地址,而数据链路层及以下使用的是硬件地址。
-
使用抽象的IP地址,而不直接使用硬件地址通信的原因:全世界存在不同的网络使用不同的硬件地址,要使这些异构网络能够互相通信就必须进行非常复杂的硬件地址转换工作,但IP编址把这个复杂问题解决了。
-
IP首部的固定长度是 20字节。
-
IP数据报的数据部分在 4字节的整数倍 时开始。
-
数据报能在互联网中经过的路由器的最大数值是 255, 若把TTL初始值设置为“1”,表示 这个数据报只在本局域网中传送。
-
划分子网的方法:从网络的主机号借用若干位作为子网号。
IP地址 = {<网络号>,<子网号>,<主机号>}
-
子网掩码:将三级IP地址的子网掩码与收到的数据报的目的IP地址逐位相与,得出所要找的子网的网络地址。
-
无分类编制CIDR的特点:1、消除了传统的A、B、C类地址以及划分子网的概念;2、把网络前缀相同的连续的IP地址组成一个“CIDR地址块”。
IP = {<网络前缀>,<主机号>}
-
CIDR斜线记法:IP地址后面加上斜线“/”,然后写上网络前缀所占的位数。
-
网络号的位数直接决定了可以分配的网络数;主机号的位数则决定了网络中最大的主机数。
-
-
IP划分例题
-
61.179.150.39/28 子网号为多少,广播号为多少,可用IP地址范围是多少
子网号为:61.179.150.32, 广播号为:61.179.150.47,可用IP地址范围为:61.179.150.33–61.179.150.46
-
19.224.17.0/17 可不可以配置在路由器的接口上?如果可以,是为什么,不可以又是为什么?
可以。确定一个IP地址是否可用,应该先确定这个地址段的子网号和广播号,在这一个段中,除这两个特殊的地址不能使用外,其它全部可以使用。19.224.17.0/17 这个地址的子网号和广播号分别为:19.224.0.0-- 19.224.127.255。
-
37.95.221.16/5 和 41.222.221.16/5 两个地址在不在同一个网段,能不能ping通?为什么?
确定两个地址在不在同一个网段,就得看这两个地址的子网号和广播号是否一致。如果一致,则属同网段,如果不一致,则不属同网段。根据题意可得:37.95.221.16/5的子网号和广播号分别为:32.0.0.0–39.255.255.255;41.222.221.16/5的子网号和广播号分别为:40.0.0.0–47.255.255.255。根据计算所得,我们可以得出这两个地址不在同一个网段,当然是不能互相直接ping通的。
-
TCP
面向连接的传输控制协议。
TCP的特点:
1、面向连接的运输层协议;
2、每一条TCP连接只能有两个端点;
3、提供可靠交付的服务;
4、全双工通信;
5、面向字节流。
TCP进行拥塞控制的算法有四种:慢开始、拥塞避免、快重传、快恢复
TCP握手中:SYN - 请求同步标志 ;ack - 确认号 ;ACK - 确认标志;seq - 序号;FIN - 结束标志
- TCP的连接建立采用 三报文握手机制 , TCP的连接释放采用 四报文握手机制
- TCP三次握手(仅客户端可发起连接请求):防止已失效的连接请求报文段突然又传送到了服务端,导致服务端一直处于等待状态(C->S的第一次SYN丢失,C重传SYN,第二次成功被S接受。但此时第一次的SYN又出现,且被S接受,导致S处于等待状态,而C会抛弃这个无效的ACK)。
- 客户端C发送
SYN(seq=j)
连接请求,等待服务端S确认;如果C->S的SYN
中途丢失,则客户端C会重传syn
,直到收到服务端S的ACK
; - 服务端S收到
SYN
请求,向客户端C发送SYN(seq=k)+ACK(ack=j+1)
同步应答响应;如果S->C的SYN+ACK
中途丢失,则服务端S会重传syn+ack
,直到收到客户端C的ACK
; - 客户端C收到
SYN+ACK
响应,向服务端S发送ACK(ack=k+1)
确认响应(注意不携带数据的ACK报文是不占据序列号)。如果C->S的ACK
中途丢失,则客户端C发完ACK
后会认为处于established
状态,而服务端S则认为处于active
状态,此时:- 如果双方没有发送数据,则服务端S会重传
SYN+ACK
,直到收到客户端C的ACK
,收到后服务端S处于established
状态; - 如果此时客户端C有数据发送,服务端S收到客户端C的
Data+ACK
,自然切换到established
状态,并接受客户端C的Data
; - 如果此时服务端S有数据发送,数据发送不了,会重传
SYN+ACK
,直到收到客户端C的ACK
才可以发送数据;
- 如果双方没有发送数据,则服务端S会重传
- 客户端C发送
- TCP四次握手(双方都可发起释放请求):服务端S在接收到客户端C的
FIN
释放请求后,可能还有数据要发送,因此此时只返回一个ACK
确认响应。当服务端S数据也发完后,再向客户端C发送FIN
释放请求,客户端C再回应ACK
确认响应(只有在客户端和服务端都没有数据要发送的时候才能断开TCP,而客户端发出FIN报文时只能保证客户端没有数据发了,服务端还有没有数据发客户端是不知道的)。- 客户端C发出
FIN(seq=u)
释放连接请求,并停止发送数据。客户端C进入FIN-WAIT-1
状态(注意FIN报文段即使不携带数据也要占据一个序列号); - 服务端S收到
FIN
请求后,向客户端C发送ACK(ack=u+1,seq=v)
确认响应。服务端S进入CLOSE-WAIT
状态; - 此时处于半关闭状态,客户端C已经没有数据发送,若服务端S需要继续发送数据,则客户端C仍可接受;
- 客户端C收到
ACK
响应后,进入FIN-WAIT-2
状态,等待服务端S发送FIN
释放请求; - 服务端S发送w个数据完成后,向客户端发C送
FIN(ack=w+1)
释放连接请求,服务端S处于LAST-ACK
状态; - 客户端C收到
FIN
请求后,必须向服务端S发出ACK(ack=w+1)
响应,而自己的序列号是seq=u+1
,此时客户端C处于TIME-WAIT
状态,经过2MSL
时间后才进入CLOSED
状态。 - 服务端S接收到
ACK
响应后,立即进入CLOSED
状态。
- 客户端C发出
-
TIME-WAIT处等待2MSL(Maximum Segment Lifetime)后才进入CLOSED:
- 为了保证A发送的最后一个ACK报文能够到达B。由于这个ACK报文段有可能丢失,B会超时重传这个FIN+ACK报文段,而A就能在2MSL时间内收到这个重传的FIN+ACK报文段。
- 2MSL就是一个发送和一个回复所需的最大时间。
- 在发送完ACK报文段后,再经过2MSL时间,就可以使本连接持续的时间所产生的所有报文段都从网络中消失。这样就可以使下一个新的连接中不会出现旧的连接请求的报文段。
- RFC 793中规定MSL为2分钟,实际应用中常用的是30秒、1分钟和2分钟等。
- MSL(Maximum Segment Lifetime,报文最大生存时间),是任何报文在网络上存在的最长时间,超过这个时间的报文将被丢弃。
-
TCP保活计时器:服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。
TCP保证可靠传输
-
校验和:发送的数据包的二进制相加然后取反。检测数据在传输过程中的任何变化。如果收发方的校验和不相同,则丢弃或不确认收到此报文段。
-
确认应答+序列号:发送方给发送的每一个包进行编号。接收方收到数据后,对发送方发送ACK报文进行确认应答。序列号可以用来排序和去重。
-
超时重传:发送方很久没有收到接收方的ACK报文,就对刚才发送的数据进行重新发送。(超时时间可以设置)
-
连接管理:三次握手和四次握手
-
流量控制:根据接收方对数据的处理能力,控制发送方的发送速度,防止发送方发的太快,耗尽接收方的资源,从而使接收方来不及处理。如果接受到的窗口大小为0,则发送方停止发送数据,并定期向接收方发送窗口探测数据报段,获取接收方的窗口大小。窗口大小=16位窗口字段的值左移M位,M是窗口扩大因子。
-
拥塞控制:防止发送方发的太快,使得网络来不及处理,从而导致网络拥塞。慢开始、拥塞避免、快重传、快恢复。
1、当cwnd<ssthresh时,使用慢开始算法(每经过一个传输轮次,窗口就指数增加)。
2、当cwnd=ssthresh时,慢开始与拥塞避免算法任意。
3、当cwnd>ssthresh时,改用拥塞避免算法(线性增加)。
4、当出现超时,调整门限
ssthresh=cwnd/2
,同时设置拥塞窗口为1
,重新进入步骤1。5、发送方连续收到
3
个对同一报文段的重复确认ACK,发送方执行**快重传(立即重传,不等到超时)和快恢复(调整门限值ssthresh=cwnd/2=8,设置拥塞窗口cwnd=ssthresh=8)**算法。
TCP滑动窗口
发送方的滑动窗口:
- 黑框就是滑动窗口。滑动窗口里是 已发出但未收到ACk、还未发出的 数据。
#1
已收到ack确认的数据。#2
已发出但还没收到ack的数据。#3
在窗口中还没有发出的数据(接收方还有空间)。#4
窗口以外的数据(接收方没空间)
滑动后的滑动窗口(收到36的ack,并发出了46-51的字节):
UDP
UDP的特点:
1、无连接的;
2、尽最大努力交付;
3、面向报文;
4、没有拥塞控制;
5、支持N对N信道;
6、首部开销小。
UDP可靠传输
传输层无法保证数据的可靠传输,只能通过应用层来实现。
- 添加确认应答机制
- 添加包序号
- 添加超时重传机制
TCP与UDP区别
-
可能面临的攻击
- TCP:SYN Flood攻击,根据三次握手协议,不断发送SYN请求,使服务端处于等待状态,资源耗尽。可增加连接数、减小超时时间。通过
netstat
查看服务器网络连接情况。 - UDP:UDP Flood攻击,向服务端发送大量UDP报文,消耗网络带宽资源,导致网络瘫痪。可限流。
- TCP:SYN Flood攻击,根据三次握手协议,不断发送SYN请求,使服务端处于等待状态,资源耗尽。可增加连接数、减小超时时间。通过
-
运行在TCP协议上的协议:
- HTTP(Hypertext Transfer Protocol,超文本传输协议),主要用于普通浏览。
- HTTPS(HTTP over SSL,安全超文本传输协议),HTTP协议的安全版本。
- FTP(File Transfer Protocol,文件传输协议),用于文件传输。
- POP3(Post Office Protocol, version 3,邮局协议),收邮件用。
- SMTP(Simple Mail Transfer Protocol,简单邮件传输协议),用来发送电子邮件。
- TELNET(Teletype over the Network,网络电传),通过一个终端(terminal)登陆到网络。
- SSH(Secure Shell,用于替代安全性差的TELNET),用于加密安全登陆用。
-
运行在UDP协议上的协议:
- BOOTP(Boot Protocol,启动协议),应用于无盘设备。
- NTP(Network Time Protocol,网络时间协议),用于网络同步。
- DHCP(Dynamic Host Configuration Protocol,动态主机配置协议),动态配置IP地址。
-
运行在TCP和UDP协议上:
- DNS(Domain Name Service,域名服务),用于完成地址查找,邮件转发等工作。
HTTP 和 HTTPS
HTTP和HTTPS协议底层都是基于TCP的协议,只是HTTPS协议中间多了一层SSL或者TLS,因此HTTPS是在HTTP的基础上增加了一层SSL的加密协议。TLS是SSL的升级版,它们的作用都是进行加密的连接。
HTTP
-
特点
- 无状态:协议对客户端没有状态存储,对事物处理没有“记忆”能力,比如访问一个网站需要反复进行登录操作
- 无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。比如某个客户机在短时间多次请求同一个资源,服务器并不能区别是否已经响应过用户的请求,所以每次需要重新响应请求,需要耗费不必要的时间和流量。
- 基于请求和响应:基本的特性,由客户端发起请求,服务端响应
简单快速、灵活 - 通信使用明文、请求和响应不会对通信方进行确认、无法保护数据的完整性
-
HTTP流程
-
HTTP报文格式
- HTTP状态码
HTTPS
-
HTTPS优点
- 内容加密:采用混合加密技术,中间者无法直接查看明文内容
- 验证身份:通过证书认证客户端访问的是自己的服务器
- 保护数据完整性:防止传输的内容被中间人冒充或者篡改
-
HTTPS缺点
- 相同网络环境下,HTTPS协议会使页面的加载时间延长近50%(打开速度问题可以通过CDN加速解决),增加10%到20%的耗电。此外,HTTPS协议还会影响缓存,增加数据开销和功耗。
- HTTPS协议的安全是有范围的,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。
- SSL 证书的信用链体系并不安全。特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行。
- SSL的专业证书需要购买,功能越强大的证书费用越高。
- SSL 证书通常需要绑定 固定IP,为服务器增加固定IP会增加一定费用;
- HTTPS 连接服务器端资源占用较高,相同负载下会增加带宽和服务器投入成本
-
对称加密:靠一个密钥来加密数据,使用相同的一个密钥来解密数据。首先用户需要把自己的一把钥匙给送给服务器,用户用这把钥匙加密数据,然后服务器待会拿这把相同的钥匙去解密用户接下来发送的数据。每个用户都必须拥有一把只属于自己的密钥,因此会给服务器增加了太多的负荷;且由于是明文发送,因此容易被截获。但是,该加密方式计算量小,加密和解密的速度比较快,适合加密比较大的数据。
- 非对称加密:有一个公钥和一个私钥,公钥加密只能私钥解密,私钥加密只能公钥解密。因为解密和加密使用不同的钥匙,所以称为非对称加密。公钥和私钥都放在服务器上,公钥是可以随便传输的,私钥是绝对不会暴露的,数据传输是安全的。该加密方式数据传输虽然安全,但是计算量大,加密和解密的速度比较慢。
-
混合加密:结合非对称加密和对称加密技术。客户端使用对称加密生成密钥对传输数据进行加密,然后使用非对称加密的公钥再对秘钥进行加密,所以网络上传输的数据是被秘钥加密的密文和用公钥加密后的秘密秘钥,因此即使被黑客截取,由于没有私钥,无法获取到加密明文的秘钥,便无法获取到明文数据。
-
HTTPS加密、解密及验证过程