面试复习-计算机网络

2020-06-06  本文已影响0人  Lugton

1.计算机网络体系结构

1.1 OSI体系结构
1.2 TCP/IP体系结构
1.3 五层协议体系结构

2.网络层

2.1 ip地址
2.2 地址解析协议ARP

ARP实现由IP地址得到MAC地址。每个主机都有一个ARP高速缓存,里面有本局域网上的各主机和路由器的IP地址到MAC地址的映射表。当主机A欲向本局域网上的某个主机B发送IP数据报时,就先在其ARP高速缓存中查看有无主机B的IP地址,如果有则可以查到MAC地址,如果没有,此时主机A会通过广播的方式请求ARP分组,主机B收到该请求后会发送ARP相应分组给主机A告知MAC地址。

2.3 网际控制报文协议ICMP

为了有效转发IP和数据报和提高交付的机会。封装在ip数据报中,ping是其一个重要的应用,来测试两台主机之间的连通性。
Ping的原理是通过向目的主机发送ICMP Echo请求报文,目的主机收到之后会发送ICMP回答报文。Ping会根据时间和成功响应的次数估算出数据包往返时间和丢包率。

3.运输层

3.1 TCP

面向连接,提供可靠交付,有流量控制,拥塞控制,只能是一对一。

三次握手
  1. A向B发送SYN=1的连接请求,初始序号为X。
  2. B收到报文,如果同意,向A发送SYN=1,ACK=1的确认报文,确认号X+1,同时也选择一个初始序号Y
  3. A收到B的报文后,发送ACK=1确认报文,确认号Y+1,序号X+1。
四次挥手
  1. A发送连接释放报文,FIN=1。
  2. B收到之后发出确认ACK=1,此时TCP处于半关闭状态,B可向A发送数据,A不可以发送
  3. B执行完接收操作,不再需要连接,发送连接释放报文,FIN=1,ACK=1。
  4. A收到后发出确认ACK=1,进入TIME-WAIT状态,等待两个最大报文存活时间后释放连接。
3.2 TCP的可靠传输
  1. TCP给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。
  2. 校验和:TCP将保持它首部和数据的校验和。这是一个端到端的校验和,目的是检测数据在传输过程中的任何变化。如果收到段的校验和有差错,TCP将丢弃这个报文段和不确认收到此报文段。
  3. TCP的接收端会丢弃重复的数据。
  4. 流量控制
  5. 拥塞控制
  6. 超时重传:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段,如果不能及时收到一个确认将重发这个报文段。
  7. ARQ协议
3.3 UDP

无连接,没有阻塞控制,支持一对一,一对多,多对多。

UDP首部
3.4 TCP与UDP的区别

4.应用层

4.1 DNS

DNS是一个分布式数据库,提供了主机名和IP地址之间相互转换的服务。每个站点只保留它自己的那部分数据。DNS可以使用UDP或TCP传输,端口号为53,大多数情况下使用UDP,只有两种情况会使用TCP:

4.2 文件传送协议FTP

使用TCP进行连接。需要两个连接来传送一个文件。

4.3 动态主机配置协议(DHCP)

DHCP提供了即插即用的联网方式,用户不再需要手动配置IP地址等信息。DHCP配置的内容不仅是IP地址,还包括子网掩码、网关IP地址。

  1. 客户端发送Discover报文,放入UDP中,该报文被广播到同一子网的所有主机上。如果客户端和DHCP服务器不在同一个子网,就需要使用中继代理。
  2. DHCP服务器收到Discover报文后,发送Offer报文给客户端,该报文包含了客户端所需要的信息,因此客户端需要进行选择。
  3. 如果客户端选择了某个DHCP服务器提供的信息,那么就发送Request报文给该DHCP服务器。
  4. DHCP服务器发送ACK报文,表示客户端此时可以使用提供给它的信息。
4.4 电子邮件协议

发送协议常用SMTP,读取协议常用POP3和IMAP。

4.5 电脑上访问一个web页面的过程
  1. DNS解析域名,得到对应的IP地址。主机向DNS服务器发送查询报文,此过程中,需要通过网关服务器的IP地址获得其MAC地址,这过程中需要通过ARP协议。路由器将DNS查询请求转发到DNS服务器,解析出IP地址。
  2. 建立TCP连接。得到了HTTP服务器的IP地址后,与HTTP服务器进行三次握手来建立TCP连接。
  3. HTTP请求。连接建立后,浏览器生成HTTP GET报文,交付给HTTP服务器。
  4. HTTP服务器从TCP套接字中读取HTTP GET报文,生成HTTP响应报文,将WEB页面内容放入报文主体中,返回给主机。
  5. 浏览器抽取WEB页面内容,进行渲染,显示出来。

5.HTTP

5.1 HTTP报文
5.2 状态码

100:请求正在处理,客户端可以继续发送请求或忽略这个响应
200:OK
204:请求已经成功处理,但是返回的响应报文不包含实体的主体部分。
301:永久性重定向
302:临时性重定向
303:临时性重定向,但要求客户端要用GET获取资源。
304:请求首部包含条件,如果不满足条件,则会返回304状态码
400:请求语法错误
401:表示发送的请求需要有认证信息
403:请求被拒绝
404:Not found
500:服务器正在执行请求时发生错误

5.3 短连接与长连接
5.4 Cookie和Session
5.5 HTTPS
5.6 HTTP/2.0
5.7 GET和POST的区别:

6.I/O模型

一个输入操作,包括两个阶段,等待数据从网络中到达,从内核缓冲区复制到应用进程缓冲区

6.1 阻塞式I/O

第一阶段和第二阶段应用程序都被阻塞,只有完成了第二阶段才返回。但不影响其他进程的运行,所以对CPU的利用率高

6.2 NIO 非阻塞I/O

第一阶段不阻塞,需要不断执行系统调用来得知该阶段是否完成,这种方式是轮询(polling),第二阶段阻塞,此模型需要CPU处理更多的系统调用,所以CPU利用率低

6.3 信号驱动I/O

应用进程使用sigaction进行系统调用,内核立即返回,第一届都应用进程不阻塞,完成第一阶段后向应用进程发送SIGIO信号,然后进行第二阶段,该阶段是阻塞的。该方式比NIO的CPU利用率更高。

6.4 异步I/O

应用进程执行aio_read系统调用会立即返回,应用进程可以继续进行,不会阻塞,直到两个阶段都完成后,才会向应用进程发送信号。也就是两个阶段都不会阻塞。

6.5 I/O复用

使用select或者poll等待数据,并且可以等待多个套接字中任何一个变为可读。某个套接字可读时返回,再进行第二阶段。它的优点是让单个线程处理多个I/O,减少了线程创建和切换的开销。但两个阶段都是阻塞的。

7. Socket函数

上一篇 下一篇

猜你喜欢

热点阅读