学习笔记知识点专项(计算机网络)
问题盘点
客户端访问一个页面的全过程
整体过程分为五个部分:
1.DNS域名解析成IP地址;
(链接:https://www.nowcoder.com/questionTerminal/f09d6db0077d4731ac5b34607d4431ee?pos=146&orderByHotValue=0
来源:牛客网
主要考察五层协议栈的理解
1、应用层:DNS解析域名为目的IP,通过IP找到服务器路径,客户端向服务器发起HTTP会话,然后通过运输层TCP协议封装数据包,在TCP协议基础上进行传输
2、运输层:HTTP会话会被分成报文段,添加源、目的端口;TCP协议进行主要工作
3、网络层:为数据包选择路由,IP协议进行主要工作
4、数据链路层:相邻结点的可靠传输,ARP协议将IP地址转成MAC地址。
链接:https://www.nowcoder.com/questionTerminal/f09d6db0077d4731ac5b34607d4431ee?pos=146&orderByHotValue=0
来源:牛客网
事件顺序
(1) 浏览器获取输入的域名www.baidu.com
(2) 浏览器向DNS请求解析www.baidu.com的IP地址
(3) 域名系统DNS解析出百度服务器的IP地址
(4) 浏览器与该服务器建立TCP连接(默认端口号80)
(5) 浏览器发出HTTP请求,请求百度首页
(6) 服务器通过HTTP响应把首页文件发送给浏览器
(7) TCP连接释放
(8) 浏览器将首页文件进行解析,并将Web页显示给用户。
)
2.与目的主机进行TCP连接(三次握手);
3.发送与接收数据(浏览器与目的主机开始HTTP访问过程);
4.浏览器解析HTML代码并请求代码中资源,浏览器对页面渲染呈现页面;
5.与目的主机断开TCP连接(四次挥手)。
下面对每一个过程进行分别说明:
DNS域名解析过程如下:
- 在客户端缓存查找域名对应的IP:浏览器缓存--->系统缓存(Hosts文件)--->路由器缓存
- ISP DNS缓存:在(电信)的DNS缓存服务器中寻找;
- 根域名服务器:全球13台(1主12辅),根域名收到请求后会查找区域文件记录,若无则将其管辖范围内顶级域名(如.com)服务器IP告诉本地DNS服务器;
- 顶级域名服务器:顶级域名服务器收到请求后查看区域文件记录,若无则将管辖范围内主域名服务器的IP地址告诉本地DNS服务器;
- 主域名服务器:主域名服务器接收到请求后查找自己的缓存,如果没有则进入下一级域名服务器进行查找,并重复该步骤直至找到正确记录;
- 保存结果至缓存:本地域名服务器把返回的结果保存到缓存,以备下次使用,同时将该结果反馈给客户端,客户端通过这个IP地址与服务器建立连接。
三次握手过程如下:
TCP首部:20字节,全双工,占用2个计算机之间的通信线路,知道它被一方或双方关闭为止
IP地址:唯一标识主机
TCP协议+端口号:唯一标识主机中的一个进程
IP地址+协议+端口号(socket):网络中的唯一进程
先来介绍一下常用的标识:
seq:序号,TCP中传送的字节流中的每一个字节都要按顺序去编号,例如一段报文的序号字段值为107,而带有数据100字段,下一段不出意外序号会从207开始。
ack:确认号,期望收到对方下一个报文的第一个数据字节的序号。例如,B收到A收到的报文,序列号字段301,数据长度200字节,B收到序号到500的字节,所以B期望收到A下一个发送过来报文的ack为501,于是B发送给A的ack=501。
offset:数偏移,由于头部有可选字段,长度不固定,因此它指出TCP报文的数据距离TCP报文的起始处有多远
reserve:保留,目前为止标位0
TCP控制位(重要的):
- ACK:确认位,只有当ACK=1时,确认号字段才有效。当ACK=0时,确认号无效。TCP规定,在连接建立后所有传送的报文段都必须把ACK置为1;
- SYN:同部位,SYN=1表示这是一个连接请求或连接接收报文。SYN=1,ACK=0时,表明这是一个连接请求报文,对方若同意建立连接,则在响应报文中使用SYN=1,ACK=1;
- FIN:终止位,用来释放一个连接。FIN=1表明此报文段的发送方的数据已经发送完毕,并要求释放传输连接。
三次握手:
一开始Client和Server都处于Closed状态,假设Client主动打开连接(客户端向服务器端发送TCP连接请求)
1.Client将标志位SYN置为1,随机产生一个值seq=x(序号),并将该数据包发送给Server,Client进入SYN-SENT状态,等待Server确认(这个过程中ACK=0,不写出);
2.之前Server处于Listen状态,在收到数据包后由SYN=1知道是Client在请求建立连接,Server将标志位SYN和ACK都置为1,ack=x+1表示期望下次收到Client发过来的序列号为x+1,并随机生成一个自己的seq=y,并将该数据包发送给Client以确认连接请求,然后Server进入SYN-RCVD状态;
(两步都要检查ACK ack↓)
3.Client收到确认后,检查ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1,并将该数据包发送给Server,Server检查ack是否为y+1,ACK是否为1,如果正确则连接成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client和Server之间可以开始传输数据了。
发送与接收数据(浏览器和目的主机开始HTTP访问过程)过程如下:
1.TCP连接建立成功后,客户端向WEB服务器发送请求(get/post),GET 路径/文件名 HTTP/1.0 ; 例如:GET /mydir/index.html HTTP/1.0
2.web服务器收到请求并处理请求,将从它的子目录中搜索index.html文件,如果找到该文件,web服务器把该文件内容传送给相应的web浏览器
3.为了告知浏览器,Web服务器首先传送一些HTTP头信息,然后传送具体内容(应答码/状态码)
浏览器解析HTML,并且请求HTML中需要的数据,然后渲染HTML页面,渲染过程如下:
浏览器得到HTML代码之后:
1.解析HTML代码,构建DOM树(document)
2.将DOM树和Css样式进行附着构建呈现树
3.布局:计算每个呈现树节点的大小和位置信息
4.绘制:背景颜色,背景图片,边框,子呈现树节点,轮廓(按顺序绘制)
四次挥手过程:
1.Client将标志位FIN=1, 生成seq = u(u为前面传输的数据最后一个序号+1),将报文发送给Server,Client进入了FIN-WAIT-1状态;
2.Server收到FIN后,将ACK置为1,ack=u+1,带上序列号seq=v,将报文发给Client,进入CLOSE-WAIT状态;
3.Client收到ACK,进入FIN-WAIT-2状态,等待Server发送释放连接报文并且将未发送完的数据都发送完
4.Server将最后的数据发送完,想Client发送一个FIN=1,ack=u+1,此时序列号假设为seq=w,发送报文,Server进入LAST-ACK状态,等待Client确认;
5.Client收到Server的报文,必须发出确认,ACK=1,ack=w+1,而自己的序列号是seq=u+1,此时Client进入TIME-WAIT状态,等待时间为2MSL(最长报文寿命)
6.Server收到Client发出的确认,立即进入CLOSED状态。结束TCP连接
TIME-WAIT(2MSL)为什么?
①确保有足够的时间让对端收到ACK,被动关闭那段未收到ACK则触发被动端重发FIN,一来一去刚好是2MSL
②防止新旧连接混淆
为什么四次挥手?
因为TCP是全双工,发送方和接收方都需要finish报文和ACK报告,所以发送方和接收方各两次即可,但一方是被动的,所以则需要四次。
以上,是客户端访问一个页面的全过程。
GET和POST的区别(在web专题写过,这里简写)
1.传送方式:get是通过地址栏传送,post是通过报文传输;
2.传送长度:get参数有长度限制一般为1024byte,post无限制2M;
3.安全性:get方式的安全性低,post安全性高(如果包含机密信息建议用post);
4.用途:get一般用于数据查询,post一般用于数据添加、修改、删除。
TCP和UDP的区别:
1.TCP有连接,可靠 // UDP无连接,不可靠
2.TCP面向字节流,提供可靠的交付服务,数据无差错、不丢失、不重复且有序 // UDP面向报文,无拥塞控制,无连接状态,适用于媒体通信
3.TCP只支持点对点通信(一对一,全双工) // UDP支持一对一、一对多、多对多的通信
4.TCP首部最低20字节(重量级) // UDP首部开销小(8字节)轻量级
HTTP和HTTPS:
HTTP:是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从www服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPs的安全基础是SSL,因此加密的详细内容就需要SSL。
HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道来保证数据传输的安全;另一种就是确认网站的真实性。
HTTP 和 HTTPS的区别主要如下:
(1)https协议需要到ca申请证书,一般免费的证书比较少,因此需要一定的费用
(2)http是超文本传输协议,信息是明文传输,https是具有安全性的ssl加密传输协议。
(3)http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443
(4)http的连接很简单,是无状态的;https协议是由ssl+http协议构建的可进行加密传输、身份认证的网络协议,比http协议要安全。