计算机网络押题

用户态和核心态的区别,为什么要这么设计

1. OSI分层

1.1 物理层

考虑的是怎么在媒体上传输比特流,屏蔽掉具体传输介质和物理设备的差异。
协议数据单元是比特
中继器:信号再生并放大转发出去。
集线器:多端口的中继器

1.2 数据链路层

两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要专门的链路层协议。数据链路层将IP数据报组装成帧,每一帧包括数据和必要的控制信息。
协议数据单元是帧
网桥:将以太网隔离成多个碰撞域
交换机:本质上是多端口的网桥,能够划分成多个小的冲突域

1.3 网络层

  • 主要任务:在网络中通信的两个计算机之间可能会经过很多个数据链路,也可能经过很多通信子网。网络层的任务就是选择合适的交换节点来确保数据及时送达。
  • 协议数据单元是IP数据报

1.4 传输层

  • 主要任务:为两台主机进程之间的通信提供通用的数据传输服务。传输层还有复用和分用的功能。复用就是多个应用层进程可同时使用下面传输层的服务;分用和复用相反,传输层把收到的信息分别交付上面应用层的相应进程。
  1. TCP:面向连接,可靠的数据传输服务,可靠传输服务时通过超时重传来实现的。协议数据单元是报文段。
  2. UDP:无连接,尽最大努力的数据传输服务。协议数据单元是用户数据报。

1.5 应用层 :

通过应用进程间的交互完成特定网络应用。如DNS,HTTP,SMTP。
应用层交互的数据单元是报文

1.6 表示层 &会话层

表示层:数据压缩、加密以及数据描述,这使得应用程序不必关心在各台主机中数据内部格式不同的问题。
会话层 :建立及管理会话。

2.1 各层的协议

在这里插入图片描述

物理层数据链路层网络层传输层会话层表示层应用层
EIA系列协议,ADSL,SONET/SDH, FDDIHDLC,PPP,SLIP,STP,CSMA/CDIP,ICMP, ARP, RARP,OSPF,RIPTCP,UDP,SCTPNetBiosASCII,MIDIFTP,SMTP,HTTP,DHCP,DNS,TELNET

2. TCP相关

2.1 三次握手

2.1.1 为什么要三次握手

在这里插入图片描述
如果没有第三次握手,客户端旧的SYN报文传送到服务器端后,服务器端开启后就会白白等待,浪费资源。

2.1.2 三次握手文字描述

在这里插入图片描述
客户端–发送带有 SYN 标志的数据包–⼀次握⼿–服务端
服务端–发送带有 SYN/ACK 标志的数据包–⼆次握⼿–客户端
客户端–发送带有带有 ACK 标志的数据包–三次握⼿–服务端

2.2 四次挥手

2.2.1 文字描述

客户端-发送⼀个 FIN,⽤来关闭客户端到服务器的数据传送
服务器-收到这个 FIN,它发回⼀ 个 ACK,确认序号为收到的序号加1 。和 SYN ⼀样,⼀个
FIN 将占⽤⼀个序号
服务器-关闭与客户端的连接,发送⼀个FIN给客户端
客户端-发回 ACK 报⽂确认,并将确认序号设置为收到序号加1
在这里插入图片描述

2.2.2 为什么要四次挥手

  1. 确保远程端处于关闭状态。也就是说需要确保客户端发出的最后一个ACK报文能够到达服务器。由于网络不可靠,有可能最后一个ACK报文丢失,如果服务器没有收到客户端的ACK,则会重新发送FIN报文,客户端就可以在2MSL时间段内收到这个这个重发的报文,并且重发ACK报文。但如果客户端跳过TIME_WAIT阶段进入了CLOSED,服务端始终无法得到响应,就会处于LAST-ACK状态,此时假如客户端发起了一个新连接,则会以失败告终。
  2. 防止上一次连接中的包,迷路后重新出现,影响新连接(经过2MSL,上一次连接中所有的重复包都会消失),这一点和为啥要执行三次握手而不是两次的原因是一样的。

3. 为什么TCP是可靠的,怎么保证可靠性?

https://blog.csdn.net/liuchenxia8/article/details/80428157
TCP保证数传输可靠性的方式有:

  • 校验和
  • 序列号
  • 确认应答
  • 超时重传
  • 连接管理
  • 流量控制
  • 拥塞控制

3.1 校验和

https://blog.csdn.net/qq_15437629/article/details/79183076 校验和的计算方法
伪首部的数据都是从IP数据报头获取的。
首先,把伪首部、TCP报头、TCP数据分为一个个16位的字,如果总长度为奇数个字节,则在最后增添一个位都为0的字节。把TCP报头中的校验和字段置为0(否则就陷入鸡生蛋还是蛋生鸡的问题)。
其次,累加所有的16位字,如果有进位,进位要再加一遍。
最后,对计算结果取反,作为TCP的校验和。
注意:如果接收方比对校验和与发送方不一致,那么数据一定传输有误。但是如果接收方比对校验和与发送方一致,数据不一定传输成功。

3.2 确认应答与序列号

序列号:TCP传输时将每个字节的数据都进行了编号,这就是序列号。
确认应答:TCP传输的过程中,每次接收方收到数据后,都会对传输方进行确认应答。也就是发送ACK报文。这个ACK报文当中带有对应的确认序列号,告诉发送方,接收到了哪些数据,下一次的数据从哪里发。
序列号的作用不仅仅是应答的作用,有了序列号能够将接收到的数据根据序列号排序,并且去掉重复序列号的数据。这也是TCP传输可靠性的保证之一。

3.3 超时重传

在某种情况下,发送方没有收到接收方发送的ACK报文,这种情况的原因有两个,一个是发送方发送的数据包没有到达接收方;另一个是接受方发送的ACK没有到达发送方。
为了解决这个问题,TCP引入了超时重传机制。简单理解就是发送方发完一个数据后等待一个时间,时间到达后没有接收到ACK报文,那么重新发送刚才的数据。如果是刚才第一个原因,那么接受方收到重发的数据,那就发送ACK。如果是第二个原因,那么直接丢弃,仍然发送ACK应答。

在Linux中(BSD
Unix和Windows下也是这样)超时以500ms为一个单位进行控制,每次判定超时重发的超时时间都是500ms的整数倍。重发一次后,仍未响应,那么等待2500ms的时间后,再次重传。等待4500ms的时间继续重传。以一个指数的形式增长。累计到一定的重传次数,TCP就认为网络或者对端出现异常,强制关闭连接。

3.4 连接管理

也就是TCP的三次握手和四次挥手的过程,这两个机制保证了可靠的连接。

3.5 流量控制

接受端把接收到的先放到接受缓冲区,然后进行处理。当发送方发送的速率太快,接受端的缓冲区很快被填满,不能再接受新的数据,这时候发送数据会导致丢包。所以引入了流量控制,接收端能够根据自己对数据的处理能力,决定发送端的发送速度。在TCP的报头信息中,有一个16位的大小的窗口大小字段,也就是接收端缓冲区的剩余大小。接收端在发送ACK报文的时候,把自己的缓冲区大小填入并发送ACK报文。发送方接受到ACK报文之后,根据窗口大小的值改变自己的发送速度。如果窗口的大小为0,发送方停止发送,并且定时向接收端发送窗口探测报文,让接收端把窗口的大小告知发送方。

3.6 拥塞控制

当网络很拥塞的时候,如果不控制发送的速率,那么网络就会放生大量的丢包。所以就引入了拥塞控制机制。拥塞控制机制有4个算法。慢开始,拥塞避免,快重传和快恢复。
发送方维护一个拥塞窗口(cwnd)的状态变量和一个thresh的阈值,TCP的窗口是基于字节的,这里为了方便讨论,假设窗口的大小单位为数据报。

  1. 慢开始和拥塞避免
    慢开始就是令cwnd为1,当收到确认后,cwnd的值就乘2。当cwnd的大小大于thresh时,进入拥塞避免阶段,每收到一次确认,cwnd就加1。当发生超时的时候,令thresh = cwnd/2,重新执行慢开始。
  2. 快重传和快恢复
    接收方用ACK报文告知接收方当前接受到哪些数据报,期待的下一个数据报是哪一个。当发送方接收到3次重复ACK的时候,那么就知道下一个数据报丢失,而不是网络拥塞,此时立刻执行快重传,重传下一个数据报。当收到3次重复ACK的时候,执行快恢复,令thresh = thresh/2, cwnd = thresh,进入拥塞避免阶段。
    在这里插入图片描述

协议相关

1.url的成分

  1. 传送协议
  2. 服务器
  3. 端口号
  4. 路径

2. 域名解析过程

  • 浏览器会检查缓存中有没有域名对应的ip地址,这个缓存是有过期时长的,一般是几分钟到几小时不等。
  • 如果浏览器缓存没有,那么就检查操作系统的hosts文件。
  • 如果还没有,那就就得向域名服务器进行查询了。一共有4种域名服务器。本地域名服务器,根域名服务器,顶级域名服务器,权限域名服务器。流程如下:先向本地域名服务器查询,如果查不了,那么就本地域名服务器就会查根域名服务器,根域名服务器会把对应的顶级域名服务器的地址返回给本地域名服务器,本地域名服务器接着访问顶级域名服务器。顶级域名服务器返回相应的权限域名服务器,再查询权限域名服务器就能得到最终的IP地址了。

3. 在浏览器输入url会发生什么

  • 浏览器根据域名解析IP地址
  • 与 HTTP 服务器进行三次握手来建立连接。
  • 连接建立之后,浏览器生成 HTTP GET 报文,并交付给 HTTP 服务器。HTTP 服务器从 TCP 套接字读取 HTTP GET 报文,生成一个 HTTP 响应报文,将 Web 页面内容放入报文主体中,发回给主机。浏览器收到 HTTP 响应报文后,抽取出 Web 页面内容,之后进行渲染,显示 Web 页面。

3. 面试问到的不会的问题整理

3.1 TIME_WAIT过多怎么办

  1. 问题
    TCP的四次挥手来结束TCP连接,客户端和服务器都可以主动关闭TCP连接。当服务器主动关闭连接的时候,服务器的TCP会进入TIME_WAIT阶段,等待2MSL(最大报文存活时间)。如果有大量的短连接,传输的时间很短,大量端口就进入了TIME_WAIT阶段,端口进入TIME_WAIT阶段是不能重新建立TCP连接的,如果并发量很高就会出现套接字不够用的情况。
  2. 解决办法
    net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭;
    net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭;
    net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。
    net.ipv4.tcp_fin_timeout 修改系默认的 TIMEOUT 时间

HTTP请求页面的过程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值