面试之计算机网络篇
TCP三次握手和四次挥手过程
三次握手:
1.客户端向服务器发送建立连接请求,将报文的同步位置为1,随机选择一个序号j发送,进入syn_send状态。
2.服务器收到客户端发送的请求后,将相关信息放入半连接队列,同意连接则发送请求同意报文,将同步位置为1,确认号置为1,确认序号置为j+1,随机选择一个序号x发送,进入syn_rcvd状态。
3.客户端收到服务器同意报文后,检查确认序号是否正确,正确则将自己的确认号置为1,确认序号置为x+1发送给服务器,服务器收到确认后,如果全连接队列没满,就从半连接队列中获取。全连接队列满了,如果tcp_abort_on_overflow=0则丢掉客户端传回的ACK,重新第二次握手;如果tcp_abort_on_overflow=1则服务端发送RST给客户端,释放资源。
半连接队列:解决syn洪泛攻击
四次挥手:
1.客户端向服务器断发送断开连接的请求,将结束标志置为1,序号j,j为已传数据最后一个序号加一,进入fin_wait1状态。
2.服务器收到客户端断开连接请求,将确认号置为1,确认序号置为j+1,随机选择一个序号x发送,服务器进入close_wait状态,客户端进入fin_wait2状态。
3.等待服务器将数据传输完毕后,将结束标志置为1,确认序号置为j+1,随机选择一个序号k发送,进入last_ack状态。
4.客户端收到服务器发送的断开请求后,将确认号置为1,确认序号置为k+1发送,进入time_wait状态。服务器收到后进入关闭状态,客户端等待2MSL后也进入关闭状态,连接断开,进入closed状态。
为什么不能是两次握手?
1.两次握手无法保证客户端收到服务器端第二次握手请求
2.可能会出现客户端已经失效的连接请求发送给服务器端,导致服务器资源浪费
3.客户端可能出现多次发送请求连接,服务器重复连接导致网络混乱
为什么不能是三次挥手?为什么等待2MSL?
1.因为服务器端收到客户端请求关闭后,可能还有数据没有发送完毕,若直接关闭则会导致数据损坏。
2.等待2倍报文最大传输时间是为了防止服务器端没有收到客户端最后一次挥手的报文。
3.等待2msl,旧报文产生的所有数据都已经在网络中消失,确保下一次连接不会出现旧连接报文。
TCP和UDP有什么区别?
1.TCP基于连接的,可靠性强,速度慢;UDP是无连接的,可靠性弱,速度快。
2.TCP一次可以传输较大的数据;UDP一次传输数据较小。
3.TCP支持点对点通信;UDP支持一对一,一对多,多对多通信。
4.TCP首部开销占20字节;UDP首部开销8字节,UDP首部记录数据长度。
TCP粘包拆包
UDP首部采用16bit来确定报文长度,因此不会出现粘包问题。
粘包:
1.待发送的数据大小小于TCP缓冲区大小,多次写入的数据一起发送。
2.应用层没有及时接收TCP发来的数据包。
拆包:
1.待发送的数据大小大于TCP缓冲区大小,必须拆包发送。
2.待发送的数据大于最长报文段。
解决办法:
1.固定数据大小发送,不足的补空格。
2.包的末尾以固定分隔符分隔数据包。
3.将数据分为数据头和数据体,在数据头中记录数据长度。
TCP如何保证可靠性?UDP如何保证可靠性?
1.TCP通过数据包校验、数据包排序、流量控制、拥塞控制、超时重传和确认机制
2.UDP要保证可靠则需要在应用层模仿TCP的可靠传输,例如增加确认机制,超时重传机制等
Q: 简述TCP拥塞控制过程
A: 1.慢开始:当拥塞窗口小于慢开始门限时,拥塞窗口以指数大小增加。
2.拥塞避免:当拥塞窗口大于慢开始门限时,拥塞窗口大小每次加一,当发生拥塞时,将慢开始门限设为拥塞窗口的一半,拥塞窗口变为1,重新执行慢开始算法。
3.快重传:当发送方连续收到三个重复确认时,立刻将相应报文重传。防止某些报文丢失而误判为网络拥塞,降低传输效率。
4.快恢复:将拥塞窗口和慢开始门限设为当前拥塞窗口的一半,之后执行拥塞避免算法。
简述下DNS过程
DNS分为根域名服务器,顶级域名服务器,权限域名服务器
1.迭代查询:浏览器首先查询缓存,若无则在本地域名服务器中查询,若无则向根域名服务器查询,根域名服务器返回顶级域名服务器,本地服务器向顶级域名服务器查询,若无则返回权限域名服务器,本地服务器向权限域名服务器查询得到IP地址
2.递归查询:本地域名服务器首先向根域名服务器查询,根域名服务器向顶级域名服务器查询,顶级域名服务器向权限域名服务器查询,将结果逐级返回给本地服务器
HTTP报文
1.请求报文包括请求行、请求头、空行、请求主体。请求行包括请求方法、URL、和协议版本。
2.响应报文包括状态行、响应头、响应主体。状态行包括协议版本、状态码和状态码的描述。
GET和POST区别
1.GET一半从服务器上获取数据,POST更改数据。
2.GET的请求数据附在URL上,不安全;POST数据位于请求主体中。
3.GET的数据大小较小,效率高;POST数据可以传输大量数据。
HTTP状态码
1.2xx:操作被成功处理,如200正常处理。
2.3xx:重定向,如301永久重定向。
3.4xx:客户端发生错误,如404服务器找不到资源。
4.5xx:服务器发生错误,如500服务器内部错误。
简述下https连接过程
简言之,在交换密钥阶段使用非对称加密,在之后的通信交换报文阶段使用对称密钥加密。既增强了安全性,也提高了效率。
1.客户端发起连接:浏览器通过DNS得到ip地址,连接上服务器443端口,将请求以及自己支持的一套加密算法发送给服务器端。
2.服务器端收到客户端的请求,将数字证书发送给客户端,包含证书颁发机构、公钥等。
3.客户端验证证书的真实性,通过后生成一个对称密钥,用服务器端发来的公钥进行加密(只有服务器私钥能解开),发送给服务器。
4.服务器端收到后,通过私钥解密得到对称密钥,使用密钥进行解密得到信息。
数字签名
使用CA自带的Hash算法对证书内容进行hash得到消息摘要,然后使用CA私钥加密,形成数字签名。
当收到别人的数字证书时,使用hash算法对证书内容进行hash得到摘要,然后使用CA公钥对数字签名解密得到摘要,对比摘要是否相同来判断证书有没有被篡改。
cookie和session的区别
1.cookie存储在本地,没有设置存储时间的cookie会随着浏览器关闭而消失,设置存储时间的cookie会存储在磁盘;session存储在服务器端。
2.cookie安全性低,保存时间短,存储信息量小;session安全性高,保存时间长,存储信息多。
工作流程:浏览器第一次访问服务器时,服务器生成session ID,浏览器将ID存入本地cookie中;之后访问会携带cookie,服务器从cookie中获得session ID,若有效则读出内存的值,否则创建新session
禁用cookie怎么办
1.每次访问时携带session ID
2.使用token机制
ARP协议工作流程
ARP协议将IP地址转换为MAC地址。网络中每个主机拥有自己的ARP高速缓存,存储着局域网中每个主机和路由器IP地址到MAC地址的映射表。
当源主机向目标主机发送数据时,先检查自己的映射表中是否有目标主机的缓存,若有则直接发送,否则在局域网内发起ARP请求,收到请求的主机会对比自己的IP地址和目标主机的IP地址,如果一致则发起ARP响应请求。
浙公网安备 33010602011771号