计算机网络基础
目录
8.从输入网址到返回页面经历了哪些过程?详细问了的DNS寻址过程
1.TCP的三次握手、四次挥手过程
(1)三次握手(我要和你建立链接,你真的要和我建立链接么,我真的要和你建立链接,成功):
第一次握手:客户端发送**SYN J**(SYN=1,seq=J)到服务器(同步信号假设序号为J),进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到客户端的SYN包,发送确认信号**ASK J+1**(ASK=1,ask=J+1),同时发送一个**SYN K**(SYN=1,seq=K),即**SYN+ACK包**,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认**ACK K+1**(ASK=1,ack=K+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。随后Client与Server之间可以开始传输数据了。
(2). 四次挥手(我要和你断开链接;好的,断吧。我也要和你断开链接;好的,断吧):
第一次挥手:客户端发送一个FIN,关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
第二次挥手:Server收到FIN后,发送一个ACK给Client,Server进入CLOSE_WAIT状态。此时TCP链接处于半关闭状态,即客户端已经没有要发送的数据了,但服务端若发送数据,则客户端仍要接收。
第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
2.SYN的攻击原理
服务端在收到SYN信号后会将ACK信号和新的SYN信号返回给客户端,并将该连接计入半连接队列数目中,当半连接数目大于系统设定的最大值(/proc/sys/net/ipv4/tcp_max_syn_backlog)时系统将不能再接收其他的连接,所以攻击者利用这个原理,在服务器向客户端发送SYN和ACK信号后不做任何回应,这样链接将一直不会被释放,直到累计到链接最大值而不能再创建新的链接,从而达到了让服务器无法响应正常请求的目的。
解决方法
使syncookies生效,将/proc/sys/net/ipv4/tcp_syncookies值置改为1即可,这样即使是半连接队列syn queue已经满了,也可以接收正常的非恶意攻击的客户端的请求,但是这种方法只在无计可施的情况下使用
3.TCP链接需要三次握手,两次不可以么,为什么?
为了防止 已失效的链接请求报文突然又传送到了服务端,因而产生错误。
客户端发出的连接请求报文并未丢失,而是在某个网络节点长时间滞留了,以致延误到链接释放以后的某个时间才到达Server。这时,Server误以为这是Client发出的一个新的链接请求,于是就向客户端发送确认数据包,同意建立链接。若不采用“三次握手”,那么只要Server发出确认数据包,新的链接就建立了。由于client此时并未发出建立链接的请求,所以其不会理睬Server的确认,也不与Server通信;而这时Server一直在等待Client的请求,这样Server就白白浪费了一定的资源。若采用“三次握手”,在这种情况下,由于Server端没有收到来自客户端的确认,则就会知道Client并没有要求建立请求,就不会建立链接。
4.UDP与TCP的区别
UDP协议和TCP协议都是**传输层**协议
(1) TCP面向连接;UDP是无连接的,即发送数据之前不需要建立连接
(2) TCP传输可靠;UDP不可靠
(3) TCP首部开销20字节;UDP的首部开销8个字节
(4) TCP面向字节流;UDP是面向数据报;
(5) 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
(6) TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。
5.TCP的的头部是什么样的
如下图示,就是TCP包的头部结构。可以看到这个头部最少有4x5=20个字节。
源端口号和目的端口号:再加上Ip首部的源IP地址和目的IP地址可以唯一确定一个TCP连接
数据序号:表示在这个报文段中的第一个数据字节序号
确认序号:仅当ACK标志为1时有效。确认号表示期望收到的下一个字节的序号(这个下面再详细分析)
偏移:就是头部长度,有4位,跟IP头部一样,以4字节为单位。最大是60个字节
保留位:6位,必须为0
6个标志位:
URG-紧急指针有效
ACK-确认序号有效
PSH-接收方应尽快将这个报文交给应用层
RST-连接重置
SYN-同步序号用来发起一个连接
FIN-终止一个连接
窗口字段:16位,代表的是窗口的字节容量,也就是TCP的标准窗口最大为2^16 - 1 = 65535个字节(这个下面再详细分析)
校验和:源机器基于数据内容计算一个数值,收信息机要与源机器数值 结果完全一样,从而证明数据的有效性。检验和覆盖了整个的TCP报文段:这是一个强制性的字段,一定是由发送端计算和存储,并由接收端进行验证的。
紧急指针:是一个正偏移量,与序号字段中的值相加表示紧急数据最后一个字节的序号。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式
选项与填充(必须为4字节整数倍,不够补0):
最常见的可选字段的最长报文大小MSS(Maximum Segment Size),每个连接方通常都在一个报文段中指明这个选项。它指明本端所能接收的最大长度的报文段。
该选项如果不设置,默认为536(20+20+536=576字节的IP数据报)
6.HTTP和HTTPS的区别,HTTP是哪层?
一、传输信息安全性不同
(1)http协议:是超文本传输协议,信息是明文传输。如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接百读懂其中的信息。
(2)https协议度:是具有安全性的ssl加密传输协议,为浏览器和服务器之间的通信加密,确保数据传输的安全。
二、资源消耗不同
和HTTP通信相比,Https通信会由于加减密处理消耗更多的CPU和内存资源。
三、端口不同
(1)http协议:使用的端口是80。
(2)https协议:使用的端口是443.
四、证书申请方式不同
(1)http协议:免费申请。
(2)https协议:需要到ca申请证书,一般免费证书很少,需要交费。
HTTP协议是属于**应用层**协议
7.DNS服务
DNS服务是域名系统的缩写, 英文全称:Domain Name System,是将域名与IP对应的网络服务,让用户在访问网站时,不再需要输入冗长难记的IP地址,只需输入域名即可访问,因为DNS服务会自动将域名转换成正确的IP地址。
8.从输入网址到返回页面经历了哪些过程?详细问了的DNS寻址过程
1)输入网址;
2)发送到DNS服务器,并获取域名对应的web服务器对应的ip地址;
3)与web服务器建立TCP连接;
4)浏览器向web服务器发送http请求;
5)web服务器响应请求,并返回指定url的数据(或错误信息,或重定向的新的url地址);
6)浏览器下载web服务器返回的数据及解析html源文件;
7)生成DOM树,解析css和js,渲染页面,直至显示完成;
9.ipv6与ipv4的区别
(1)ipv6的地址空间更大,地址长度为128,而ipv4地址长度为32;
(2) iPv4使用地址解析通讯协议(ARP),iPv6使用多点传播邻域请求消息取代地址解析通讯协议 (ARP);
(3)ipv6路由表更小,提高了路由器转发数据包的速度;
(4)ipv6加入了对自动配置的支持;
(5)ipv6安全性更高
10.GET与POST的区别及应用场景
GET:从指定的资源请求数据
POST:向指定的资源提交要被处理的数据
|
GET |
POST |
后退按钮/刷新 |
无害 |
数据会被重新提交 |
缓存 |
能被缓存 |
不能缓存 |
编码方式 |
只能进行url编码 |
支持多种编码方式 |
是否保留在浏览历史 |
参数保留在浏览器历史中 |
不保留 |
对数据长度的限制 |
发送数据,GET方法向URL添加数据,但URL的长度是受限制的 |
无限制 |
对数据类型的限制 |
只允许ASCII字符 |
无限制。也允许二进制数据 |
安全性 |
安全性较差,因为参数直接暴露在url中 |
参数不会保存在浏览器历史或web服务器日志中 |
可见性 |
数据在url中,所有人可见 |
不可见 |
传参方式 |
通过url传递 |
放在request body中 |
11.五层网络模型以及每层的协议
物理层:
确保数据可以在各种物理媒介上进行传输,为数据的传输提供可靠的环境。
数据链路层:
负责将网络层交下来的 IP 数据报封装成帧,并在链路的两个相邻节点间传送帧,每一帧都包含数据和必要的控制信息。以太网协议
网络层:
为两台主机提供通信服务,并通过选择合适的路由将数据传递到目标主机。
IP协议
ARP协议
传输层:
为两台主机中的进程提供通信服务。
传输控制协议 (TCP):提供面向连接的、可靠的数据传输服务,数据传输的基本单位是报文段;
用户数据报协议(UDP):提供无连接的、尽最大努力的数据传输服务,但不保证数据传输的可靠性,数据传输的基本单位是用户数据报。
应用层:
应用层协议定义的是应用进程间通讯和交互的规则,不同的应用有着不同的应用层协议,如 HTTP协议(万维网服务)、FTP协议(文件传输)、SMTP协议(电子邮件)、DNS(域名查询)等
12.TCP与UDP的协议有哪些
(1)运行于TCP协议之上的协议:
HTTP协议:超文本传输协议,用于普通浏览
HTTPS协议:安全超文本传输协议,身披SSL外衣的HTTP协议
FTP协议:文件传输协议,用于文件传输
POP3协议:邮局协议,收邮件使用
SMTP协议:简单邮件传输协议,用来发送电子邮件
Telent协议:远程登陆协议,通过一个终端登陆到网络
SSH协议:安全外壳协议,用于加密安全登陆,替代安全性差的Telent协议
(2)运行于UDP协议之上的协议:
DHCP协议:动态主机配置协议,动态配置IP地址
NTP协议:网络时间协议,用于网络时间同步
BOOTP协议:引导程序协议,DHCP协议的前身,用于无盘工作站从中心服务器上获取IP地址
13.HTTP响应状态码
HTTP状态码分类
1XX状态码列表:
2XX状态码列表:
3XX状态码列表:
4XX状态码列表:
5XX状态码列表: