一、计算机网络基础
1、协议和层次划分
协议(network protocol):为交换数据而制定的规则、标准和约定
三要素:
语法:规定数据传输的格式
语义:规定数据代表的具体计算机指令
同步:规定了数据交换顺序
根据协议不同的功能将网络划分不同层次
如TCP/IP体系结构
应用层:在应用之间提供数据交互服务,如http超文本传输协议端口80、ftp文件传输协议端口21、telnet远程登录协议端口23、smtp邮件传输协议端口25、pop3文件接收协议端口110 ;dns协议端口53、snmp网络设备管理协议端口161、tftp简单文件传输协议端口69
传输层:数据传输控制,TCP可靠传输协议、UDP不可靠传输协议
网络层:将传输层的数据段封装成数据包,并选择合适的路由和交换节点,如ip协议
物理层和数据链路层:负责将网络层数据包封装成数据帧,并在相邻物理节点传输数据帧
2、TCP连接三次握手和四次挥手
三次握手
第一次:客户端向服务端发送连接请求SYN,包含接收窗口号,最大报文段等信息
第二次:服务端向客户端返回一个SYN和ACK确认消息
第三次:客户端向服务端返回一个ACK确认消息
之所以不是两次握手是因为
假如客户端因网络拥塞原因重复发送的第二个TCP连接请求比第一个先被服务端确认的话就会导致建立的第二条TCP连接闲置,资源浪费
四次挥手
第一次:客户端发送FIN报文
第二次:服务端返回ACK确认消息,客户端不能主动向服务端发送消息
第三次:服务端发送FIN报文,客户端接收并等待一段时间2MSL
第四次:客户端发送ACK确认消息,释放连接
客户端等待2MSL时间,是因为要保证在第三次FIN消息发送失败时可以重传,否则会导致客户端无法释放连接
之所以不是三次挥手是因为
第二次与第三次报文之间可能会有很长一段时间服务器处理未处理完的请求并释放资源的时间,如果把第二次、第三次的数据包结合,那么可能因为时间时间过长导致客户端不能及时收到回复而重复发送请求,浪费资源。
3、http和https的区别
http免费的超文本传输协议,信息是明文传输,端口80,https付费的HTTP和传输层安全协议SSL/TLS组成的加密传输协议,支持加密传输和身份认证,端口443
4、get和post的区别
get最多传输2kb数据用来获取资源,不会修改数据,是安全的;post用来传输实体,默认传输数据大小没有限制,是不安全的
5、TCP和的UDP区别
tcp是面向连接的可靠传输协议,只能一对一通信,传输数据前需要建立连接,并以字节流的形式传输信息,可以保证接收到的数据是完整的,有序的,不重复的
udp是无连接的不可靠传输协议,传输的是整段报文;没有拥塞控制,传输速率不会因网络拥塞变低;不需要建立连接,传输延迟低;不保证可靠传输,但是支持一对一、一对多、多对一通信
6、对称加密和非对称加密
对称加密就是双方使用相同的密钥进行数据的加密和解密,非对称加密是使用不同的密钥,即公钥和私钥,公钥任何人都能获取,私钥保存至本地,用公钥加密后只能用私钥解密,用私钥加密只能用公钥解密。
7、数字签名
用非对称加密可以实现数字签名,假设A要向B发送一个合同文件,为了保准合同不被篡改,可以使用数字签名
A使用哈希函数将文件处理并用私钥加密,B收到后使用公钥解密并和源文件对比就能确认文件是否被修改。
8、数字证书
CA认证机构颁发给个人的数字证书,用来验证身份,确认公钥对应本网站,防止公钥被篡改。
9、ip地址分类
1)网络地址
IP地址由网络号(包括子网号)和主机号组成。
主机号为全0,网络地址代表着某个网段。
2)广播地址
主机号为全1。当向某个网络的广播地址发送消息时,该网段内的所有主机都能收到该广播消息。
3)组播地址
D类地址就是组播地址。
先回忆下A,B,C,D类地址吧:
A类地址以0开头,第一个字节作为网络号,地址范围为:0.0.0.0~127.255.255.255;
B类地址以10开头,前两个字节作为网络号,地址范围是:128.0.0.0~191.255.255.255;
C类地址以110开头,前三个字节作为网络号,地址范围是:192.0.0.0~223.255.255.255。
D类地址以1110开头,地址范围是224.0.0.0~239.255.255.255,D类地址作为组播地址(一对多的通信);
E类地址以1111开头,地址范围是240.0.0.0~255.255.255.255,E类地址为保留地址,供以后使用。
注:只有A,B,C有网络号和主机号之分,D类地址和E类地址没有划分网络号和主机号。
4)255.255.255.255
该IP地址指的是受限的广播地址。受限广播地址与一般广播地址(直接广播地址)的区别在于,受限广播地址只能用于本地网络;
注:一般的广播地址(直接广播地址)能够通过某些路由器(当然不是所有的路由器),而受限的广播地址不能通过路由器。
5)0.0.0.0
主机地址设置自动获取或与网段中其他主机地址冲突时,发送请求时会使用0.0.0.0
6)回环地址
127.0.0.0/8被用作回环地址,回环地址表示本机的地址,常用于对本机的测试,用的最多的是127.0.0.1。
7**)自动私有ip地址**
169.254.0.0~169.254.255.255
8**)A、B、C类私有地址**
私有地址(private address)也叫专用地址,它们不会在全球使用,只具有本地意义。
A类私有地址:10.0.0.0/8,范围是:10.0.0.0~10.255.255.255
B类私有地址:172.16.0.0/12,范围是:172.16.0.0~172.31.255.255
C类私有地址:192.168.0.0/16,范围是:192.168.0.0~192.168.255.255
10、子网掩码和网络划分
什么是子网掩码?
子网掩码是标志两个IP地址是否同属于一个子网的,也是32位二进制地址,其每一个为1代表该位是网络位,为0代表主机位。它和IP地址一样也是使用点式十进制来表示的。如果两个IP地址在子网掩码的按位与的计算下所得结果相同,即表明它们共属于同一子网中。
在计算子网掩码时,我们要注意IP地址中的保留地址,即“ 0”地址和广播地址,它们是指主机地址或网络地址全为“ 0”或“ 1”时的IP地址,它们代表着本网络地址和广播地址,一般是不能被计算在内的。
子网掩码的计算:
对于无须再划分成子网的IP地址来说,其子网掩码非常简单,即按照其定义即可写出:如某B类IP地址为 10.12.3.0,无须再分割子网,则该IP地址的子网掩码255.255.0.0。如果它是一个C类地址,则其子网掩码为 255.255.255.0。其它类推,不再详述。下面我们关键要介绍的是一个IP地址,还需要将其高位主机位再作为划分出的子网网络号,剩下的是每个子网的主机号,这时该如何进行每个子网的掩码计算。
下面总结一下有关子网掩码和网络划分常见的面试考题:
1)利用子网数来计算
在求子网掩码之前必须先搞清楚要划分的子网数目,以及每个子网内的所需主机数目。
(1) 将子网数目转化为二进制来表示;
如欲将B类IP地址168.195.0.0划分成27个子网:27=11011;
(2) 取得该二进制的位数,为N;
该二进制为五位数,N = 5
(3) 取得该IP地址的类子网掩码,将其主机地址部分的的前N位置1即得出该IP地址划分子网的子网掩码。
将B类地址的子网掩码255.255.0.0的主机地址前5位置 1,得到 255.255.248.0
2)利用主机数来计算
如欲将B类IP地址168.195.0.0划分成若干子网,每个子网内有主机700台:
(1) 将主机数目转化为二进制来表示;
700=1010111100;
(2) 如果主机数小于或等于254(注意去掉保留的两个IP地址),则取得该主机的二进制位数,为N,这里肯定 N<8。如果大于254,则 N>8,这就是说主机地址将占据不止8位;
该二进制为十位数,N=10;
(3) 使用255.255.255.255来将该类IP地址的主机地址位数全部置1,然后从后向前的将N位全部置为 0,即为子网掩码值。
将该B类地址的子网掩码255.255.0.0的主机地址全部置1,得到255.255.255.255,然后再从后向前将后 10位置0,即为:11111111.11111111.11111100.00000000,即255.255.252.0。这就是该欲划分成主机为700台的B类IP地址 168.195.0.0的子网掩码。
3)还有一种题型,要你根据每个网络的主机数量进行子网地址的规划和****计算子网掩码。这也可按上述原则进行计算。
比如一个子网有10台主机,那么对于这个子网需要的IP地址是:
10+1+1+1=13
注意:加的第一个1是指这个网络连接时所需的网关地址,接着的两个1分别是指网****络地址和广播地址。
因为13小于16(16等于2的4次方),所以主机位为4位。而256-16=240,所以该子网掩码为255.255.255.240。
如果一个子网有14台主机,不少人常犯的错误是:依然分配具有16个地址空间的子网,而忘记了给网关分配地址。这样就错误了,因为14+1+1+1=17,17大于16,所以我们只能分配具有32个地址(32等于2的5次方)空间的子网。这时子网掩码为:255.255.255.224。
11、TCP
序号(sequence number)序列号:seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。
确认号(acknowledgement number):ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1。
标志位(Flags):共6个,即URG、ACK、PSH、RST、SYN、FIN等。具体含义如下:
URG:紧急指针(urgent pointer)有效。
ACK:确认序号有效。(为了与确认号ack区分开,我们用大写表示)
PSH:接收方应该尽快将这个报文交给应用层。
RST:重置连接。
SYN:发起一个新连接。
FIN:释放一个连接。
半连接队列
在SYN Flood时客户端大量伪造ip地址请求服务器,造成服务器端大量的连接处于半连接状态,如果队列排满就无法处理正常请求
TCP快速打开TFO的原理
三次握手后生成Cookie,第二次建立连接时,如果验证Cookie是有效的,就会在两次握手后建立连接
TCP报文中时间戳的作用
1、确认tcp报文传输时往返一次的时间RTT
2、可以通过RTT区分不同的数据包,防止tcp序列号重复使用时造成的数据错乱
TCP超时重传
经典方法(适用于RTT波动较小的情况)
SRTT算法
TCP流量控制
TCP服务端和接收端在接发消息时都会先把消息存到一个缓冲区,接收方在接收消息时会告诉发送方自己的接收窗口大小,实现流量控制
TCP keep-alive 原理
当tcp连接2h内没有数据交互时,就断开连接。
但因为时间长而使用较少,一般是在应用层做心跳机制
TCP 端口号
在TCP头部会标有源端口和目标端口,确认消息发到哪个应用
TCP场景1
TCP场景2
TCP场景3
telnet
netstat
tcpdump
tcpdump是一个网络流量监控工具,一般用来抓包