目录
1、输入一个url链接后,整套流程,打开一个网页到网页出现的全过程
3、常见应用层协议和传输层、网络层协议,以及硬件如路由器在哪一层
(5)HTTP与HTTPS之间的区别,HTTPS链接建立的过程,了解对称加密算法和非对称加密算法不?
1、TCP 与 UDP 区别和应用场景,基于 TCP 的协议有哪些,基于 UDP 的有哪些
6、TCP 三次握手过程以及每次握手后的状态改变,为什么三次? 为什么两次不行?
一、计算机网络概述
1、输入一个url链接后,整套流程,打开一个网页到网页出现的全过程
过程 | 使用的协议 |
1、浏览器查找域名DNS的IP地址 | DNS:获取域名对应的ip |
2、根据ip建立TCP连接 | TCP:与服务器建立连接 |
3、浏览器向服务器发送HTTP请求 | HTTP:发送请求 |
4、服务器响应HTTP响应 | HTTP |
5、浏览器进行渲染 |
先检查输入的URL是否合法,然后查询浏览器的缓存,如果有则直接显示。
1、通过DNS 域名解析得到对应的IP 地址(先从浏览器缓存查询、然后是操作系统和hosts文件缓存,如果没有查询本地服务器的缓存)
2、通过TCP的三次握手机制建立连接,建立连接后浏览器向服务器发送HTTP请求,请求数据包。
3、服务器收到浏览器的请求后,进行处理并响应
4、浏览器收到服务器数据后,解析HTML代码,并请求HTML代码中的资源
5、浏览器渲染页面并展现给用户
6、服务器关闭TCP
2、OSI七层模型与TCP/IP五层模型
OSI七层:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
TCP/IP五层:物理层、数据链路层、网络层、传输层、应用层
3、常见应用层协议和传输层、网络层协议,以及硬件如路由器在哪一层
应用层:HTTP SMTP DNS ETP
传输层:TCP UDP
网络层:ICMP IP 路由器 防火墙
数据链路层:网卡 、网桥、交换机
物理层:中继器、集线器
二、应用层
1、DNS域名解析
常用的dns服务器: 8.8.8.8
222.222.222.222
114.114.114.114
路由器只要有DNS的功能就行,有跟提示就行,不负责任何域名解析,但可以转发域名解析 DNS 可以使用 UDP 或者 TCP 进行传输,使用的端口号都为 53。大多数情况下 DNS 使用 UDP进行传输,不用经过三次握手,这样DNS服务器负载更低,响应更快。这就要求域名解析器和域名服务器都必须自己处理超时和重传从而保证可靠性。
在两种情况下会使用 TCP 进行传输:如果返回的响应超过的 512 字节(UDP 最大只支持 512 字节的数据)。区域传送(区域传送是主域名服务器向辅助域名服务器传送变化的那部分数据)。
2、超文本传输协议(HTTP)
(1)HTTP1.0、1.1、2.0之间的区别
HTTP1.0:默认使用Connection:close ,浏览器每次请求都需要与服务器建立一个TCP连接,服务器处理完后立即断开TCP连接(无连接),服务器不跟踪每个客户端也不记录过去的请求
HTTP1.1:默认使用Connection:keep-alive,避免了连接建立和释放的开销:通过Content-Length字段来判断当前请求的数据是否已经被全部接受。不允许同时存在两个并行的响应。
HTTP2.0:引入二进制数据帧和流的概念,其中帧对数据进行顺序标识;因为有了序列,服务器可以并行的传输数据。
(2)HTTP1.0和HTTP1.1的主要区别:
缓存处理:http1.1添加更多的缓存控制策略
网络连接的优化:http1.1支持断点续传
错误状态码的增多:http1.1新增了24个错误状态码,丰富的错误码更加明确各个状态
Host头处理:支持Host头域,不在以IP为请求方标志
长连接:减少了建立和关闭连接的消耗和延迟
(3)HTTP1.1和HTTP2.0主要区别
新的传输格式:2。0使用二进制格式,1.0依然使用及语文本格式
多路复用:连接共享,不同的request可以使用同一个连接传输
hander压缩:由于1.1中header带有大量的信息,并且需重复传输,2.0使用encoder来减少需要传输的header大小
服务端推送:同google的SPDUY一样
(4)HTTP长连接和短连接
长连接:client方与server方建立连接,连接建立后不断开,然后在进行报文发送好热接收。折中方式下由于通讯连接一直存在。此种方式常用于P2P通信
短连接:Client与server每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接。次方式常用于一对多通讯。C/S 通信。
(5)HTTP与HTTPS之间的区别,HTTPS链接建立的过程,了解对称加密算法和非对称加密算法不?
HTTP | HTTPS |
默认端口80 | HTTPS默认使用端口443 |
明文传输、数据未加密、安全性差 | 传输过程ssl加密、安全性较好 |
响应速度快、消耗资源少 | 响应速度较慢、消耗资源多、需要用到CA证书 |
HTTPS和HTTP连接建立的过程:
HTTPS请求过程:
首先客户端先给服务器发送一个请求
服务器发送一个SSL证书给客户端,内容包括:证书的发布机构,有效期、所有者、签名和公钥
客户端对于发来的公钥进行真伪校验,校验为真则使用公钥对对称加密算法以及堆成秘钥今次那个加密
服务器端使用私钥进行解密并使用对称秘钥加密确认信息发送给客户端
随后客户端和服务端就使用对称密钥进行信息传输
HTTP的请求过程:
TCP建立连接后,客户端会发送报文给服务端
服务端接受报文并作出响应
客户端收到响应后解析给用户
对称加密算法:双方持有相同的密钥,且加密速度快,典型对称加密算法:DES、AES
非对称加密算法:密钥成对出现(私钥、公钥),私钥只有自己知道,不在网络中传输;而公钥
(6)HTTP请求报文组成:
请求行:包含请求方法、URL、协议版本
请求头:接下来的多行都是请求首部 Header,每个首部都有一个首部名称,以及对应的值。服务器需要知道的信息
一个空行用来分割首部和内容主体Body
请求体 :最后是请求的内容主体Body
GET http://www.example.com/ HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cache-Control: max-age=0
Host: www.example.com
If-Modified-Since: Thu, 17 Oct 2019 07:18:26 GMT
If-None-Match: "3147526947+gzip"
Proxy-Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 xxx
param1=1¶m2=2
(7)HTTP的响应报文
第一行包含协议版本、状态码以及描述,最常见的是 200 OK 表示请求成功了
接下来多行也是首部内容
一个空行分隔首部和内容主体
最后是响应的内容主体
HTTP/1.1 200 OK
Age: 529651
Cache-Control: max-age=604800
Connection: keep-alive
Content-Encoding: gzip
Content-Length: 648
Content-Type: text/html; charset=UTF-8
Date: Mon, 02 Nov 2020 17:53:39 GMT
Etag: "3147526947+ident+gzip"
Expires: Mon, 09 Nov 2020 17:53:39 GMT
Keep-Alive: timeout=4
Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
Proxy-Connection: keep-alive
Server: ECS (sjc/16DF)
Vary: Accept-Encoding
X-Cache: HIT
<!doctype html>
<html>
<head>
<title>Example Domain</title>
// 省略...
</body>
</html>
(8)HTTP有哪些请求
方法 | 描述 |
GET | 向特定资源发送请求,查询数据,并返回实体 |
POST | 向指定资源提交数据进行处理请求,可能会导致新的资源建立、已有资源修改 |
PUT | 向服务器上传新的内容 |
HEAD | 类似GET请求,返回的响应中没有具体的内容,用于获取报头 |
DELETE | 请求服务器删除指定标识的资源 |
OPTIONS | 可以用来向服务器发送请求来测试服务器的功能性 |
TRACE | 回显服务器收到的请求,用于测试或诊断 |
CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器 |
get 和Post区别
GET请求在URL中传送的参数是有长度限制的,而POST没有
GET比POST更不安全,因为参数直接暴露在URL上 ,所以不能用来传递敏感信息
GET参数通过URL传递,POST放在Request body中
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留
GET请求参数只能进行url编码,而POST支持多种编码方式
GET请求会被浏览器主动cache,而post不会,除非手动设置
GET产生的URL地址可以被Bookmark,而POST不可以
GET在浏览器回退时是无害的,而POST会再次提交请求
(9)HTTP状态码
3、文件传输协议(FTP)
控制连接:服务器打开端口号21等待客户端的连接,客户端主动建立连接后,使用这个连接将客户端的命令传送给服务器,并传回服务器的应答
数据连接:用来传送一个文件数据。
(1) 主动模式:服务器端主动建立数据连接,其中服务器端的端口号为 20,客户端的端口号随机,但是必须大于 1024,因为 0~1023 是熟知端口号。
(2)被动模式:客户端主动建立数据连接,其中客户端的端口号由客户端自己指定,服务器端的端口号随机。
主动模式要求客户端开放端口号给服务端,需要去配置用户端的防火墙。被动模式只需要服务器端开放端口号即可,无需客户端配置防火墙。但是被动模式会导致服务器端的安全性减弱,因为放开了过多的端口号
4、动态主机配置协议(DHCP)
DHCP (Dynamic Host Configuration Protocol) 提供了即插即用的连网方式,用户不再需要手动配置 IP 地址等信息
DHCP配置的内容不仅是IP地址、还包括子网掩码、网关IP地址
工作流程:客户端发送 Discover 报文,该报文的目的地址为 255.255.255.255:67,源地址为 0.0.0.0:68,被放入UDP 中,该报文被广播到同一个子网的所有主机上。如果客户端和 DHCP 服务器不在同一个子网,就需要使用中继代理。
DHCP 服务器收到 Discover 报文之后,发送 Offer 报文给客户端,该报文包含了客户端所需要的信息。因为客户端可能收到多个DHCP 服务器提供的信息,因此客户端需要进行选择。
如果客户端选择了某个 DHCP 服务器提供的信息,那么就发送 Request 报文给该 DHCP 服务器。
DHCP 服务器发送 Ack 报文,表示客户端此时可以使用提供给它的信息。
5、常用端口
三、传输层
1、TCP 与 UDP 区别和应用场景,基于 TCP 的协议有哪些,基于 UDP 的有哪些
TCP(传输控制协议)提供的是面向连接,可靠的字节流服务。即用户和服务器交换数据前,必须先在双方间建立一个TCP连接,之后才能传输数据。并且提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
UDP(用户数据报协议)是一个简单的面向数据报的运输层协议,是面向无连接的不可靠出传输的协议。他不提供可靠性,只是把应用程序传给 IP的数据报发出去,但是不能保证他们能到目的地。由于UDP在传输数据报前不用再客户和服务器之间创建连接,且没有超时重发机制,所以传输速度很快。
基于 TCP 的协议:HTTP、FTP、SMTP
UDP 一般用于即时通信(QQ 聊天对数据准确性和丢包要求比较低,但速度必须快),在线视频(RTSP速度一定要快,保证视频连续,但是偶尔花了一个图像帧, 人们还是能接受的),网络语音电话(VoIP 语音数据包一般比较小,需要高速发送,偶尔断音或串音也没有问题)等等.
2、UDP首部格式
首部字段只有8个字节,包括源端口、目的端口、长度、检验和。
3、TCP头结构/报文结构
TCP包头的固定长度为20bytes
数据偏移:表示 tcp 包头的总长度
URG:代表这个包是否含有紧急数据
ACK:确认号,在 tcp 三次握手之后的 ACK 值在传输成功的情况下是保持为 1 的
PSH:表示收到的 tcp 包是否要直接上传到上层应用层,0 表示放在缓存区中,1代表直接上传***可以利用发送大量 PSH=0 的tcp 包来破坏传输过程
RST:如果收到一个 RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST 标志的 TCP 报文段称为复位报文段
SYN:在建立连接时使用,第一二次握手时为 1
FIN:表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果 FIN=1,即告诉对方:“我的数据已经发送完毕,你可以释放连接了”,带FIN 标志的
4、TCP粘包现象原因和解决办法
TCP粘包是指:发送方发送的若干数据包数据到接收方接收时粘成一包
发送方原因:TCP 默认使用 Nagle 算法,在一个确认到来时一起发送 Nagle 算法造成了发送方可能会出现粘包问题。
接收方原因:TCP 接收到数据包时,并不会马上交到应用层进行处理,或者说应用层并不会立即处理。如果 TCP 接收数据包到缓存的速度大于应用程序从缓存中读取数据包的速度。
解决粘包问题:最本质原因在与接收对等方无法分辨消息与消息之间的边界在哪
发送定长包:如果每个消息的大小都是一样的,那么在接收对等方只要累计接收数据,直到数据等于一个定长的数值就将它作为一个消息。
包尾加上\r\n 标记:FTP 协议正是这么做的。但问题在于如果数据正文中也含有\r\n,则会误判为消息的边界。
包头加上包体长度:包头是定长的 4 个字节,说明了包体的长度。接收对等方先接收包体长度,依据包体长度来接收包体。
5、为什么udp不会粘包
TCP协议是面向流的协议,UDP是面向消息的协议
UDP段都是一条消息,应用程序必须以消息为单位提取数据,不能一次提取任意字节的数据 UDP具有保护消息边界,在每个UDP包中就有了消息头(消息来源地址,端口等信息),这样对于接收端来说就容易进行区分处理了。传输协议把数据当作一条独立的消息在网上传输,接收端只能接收独立的消息。接收端一次只能接收发送端发出的一个数据包,如果一次接受数据的大小小发送端一次发送的数据大小,就会丢失一部分数据,即使丢失,接受端也不会分两次去接收
6、TCP 三次握手过程以及每次握手后的状态改变,为什么三次? 为什么两次不行?
为了防止服务器端开启一些无用的连接增加服务器开销以及防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误。服务器端是不知道客户端有没有接收到服务器端返回的信息的。
第一次握手---首先客户端向服务器端发送一段 TCP 报文,其中报文包含: 标记位为 SYN=1,表示请求建立新连接。 序列号为 Seq=X。 (随后客户端进入 SYN-SENT 阶段。)
第二次握手---服务器端接收到来自客户端的 TCP 报文之后,结束 LISTEN 阶段。 并返回一段 TCP 报文,其中: 标志位为 SYN(SYN=1)和 ACK=1,(ACK=1)表示“确认客户端的报文 Seq 序号有效, 服务器能正常接收客户端发送的数据,并同意创建新连接”(即告诉客户端,服 务器收到了你的数据); 序号为 Seq=y; 确认号为 ack=x+1,//表示收到客户端的序号 Seq 并将其值加 1 作为自己确认号ack 的值;随后服务器端进入 SYN-RCVD 阶段。
第三次握手---客户端接收到来自服务器端的确认收到数据的 TCP 报文之后,明确了从客户端到服务器的数据传输是正常的,(结束 SYN-SENT 阶段)。并返回最后一段 TCP 报文。其中: 标志位为 ACK(ACK=1),表示“确认收到服务器端同意连接的信号”(即告诉服务器,我知道你收到我发的数据了); 序号为 Seq=x+1,表示收到服务器端的确认号 ack,并将其值作为自己的序号值; 确认号为 ack=y+1,表示收到服务器端序号 Seq,并将其值加 1 作为自己的确认号 ack 的值
7、TCP 四次挥手过程以及状态改变,为什么四次?CLOSE-WAIT 和 TIME-WAIT 存在的意义?如何查看 TIME-WAIT 状态的链接数量?为什么会 TIME-WAIT 过多?解决方法是怎样的?
四次挥手过程
1. 当客户端完成数据传输后,将控制位 FIN 置 1,提出停止 TCP 连接的请求。 2. 服务端收到 FIN 后对其作出响应,确认这一方向上的 TCP 连接将关闭,将ACK 置 1。 3. 由服务端再提出反方向的关闭请求,将 FIN 置 1。 4. 客户端对服务端的请求进行确认,将 ACK 置 1,双方向的关闭结束。
为什么等待2MSL:主要目的是来确保第四次挥手发送的报文中的ACK可以到达接收方。再有就是确保当前;确保当前连接的所有报文都已经过期。
CLOSE-WAIT:表示等待关闭
TIME-WAIT:为了解决网络的丢包和网络不稳定所带来的其他问题,确保连接方能在时间范围内,关闭自己的连接
如何查看TIME-WAIT状态的链接数量:netstat -an |grep TIME_WAIT|wc -1 查看连接数等待 time_wait 状态连接数
为什么 TIME-WAIT过多?解决方法是怎样的
可能原因: 高并发短连接的 TCP 服务器上,当服务器处理完请求后立刻按照主动正常关闭连接。解决:负载均衡服务器;Web 服务器首先关闭来自负载均衡服务器的连接
8、TCP可靠性
9、TCP短连接和长连接的关系
在HTTP/1.0Z中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接
而从HTTP/1.1开始默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:Connection:keep-alive
在使用长连接的情况下,当一个网页打开完成后,客户端和服务端之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接
四、网络层
1、IP数据报格式
版本:有4(IPV4)和(IPV6)两个值 首部长度:占4位,因此最大值为15。值为1表示的是1个32位字的长度,也就是4字节。因为固定长度为20字节,因此该值最小为5.如果可选字段的长度不是4字节的整数倍,就用尾部的填充部分来填充。 区分服务 : 用来获得更好的服务,一般情况下不使用。
总长度 : 包括首部长度和数据部分长度。
生存时间 :TTL,它的存在是为了防止无法交付的数据报在互联网中不断兜圈子。以路由器跳数为单位,当 TTL 为 0 时就丢弃数据报。
协议 :指出携带的数据应该上交给哪个协议进行处理,例如 ICMP、TCP、UDP 等。
首部检验和 :因为数据报每经过一个路由器,都要重新计算检验和,因此检验和不包含数据部分可以减少计算的工作量。
标识 : 在数据报长度过长从而发生分片的情况下,相同数据报的不同分片具有相同的标识符。
片偏移 : 和标识符一起,用于发生分片的情况。片偏移的单位为 8 字节。
2、地址解析协议(ARP)
网络层实现主机之间的通信,而链路层实现具体每段链路之间的通信。因此在通信过程中,IP数据报的原地址和目的地址始终不变,而MAC地址随链路的改变而改变。
3、网络控制报文协议(ICMP)
ICMP是为了更有效的转发IP数据报和提高交付成功的机会。它封装在IP数据报中,但是不属于高层协议
4、ping的原理
Ping的原理是通过向目的主机发送ICMP Echo请求报文,目的主机收到之后会发送Echo回答报文。Ping会根据时间和成功响应的次数估算出数据包往返时间以及丢包率。
5、重定向和转发的区别
重定向:(redirect)地址栏发生变化,重定向可以访问其他站点(服务器)的资源
重定向是两次请求,不能使用request对象来共分享数据
转发:(forwards)转发地址栏路径不变,转发只能访问当前服务器下的资源,转发是一次请求,可以使用request对象共享数据
6、cookie和session区别
Cookie和Session都是用来跟踪浏览器用户身份的会话方式,但两者有区别: cookie数据保存自客户端,session数据保存在服务器端。 cookie不是很安全,别人可以分析存放在本地的cookie进行欺骗,考虑到安全应当使用session。cookie一般用来保存用户信息,session的主要作用就是通过服务端记录用户状态。 跨区域支持上不同:cookie支持跨区域名访问。session不支持跨区域名访问