八股文:计算机网络

前言

先写到这里,后面再补充

OSI网络模型

应用层、表示层、会话层、运输层、网络层、链路层、物理层

TCP/IP模型

应用层、运输层、网络层、链路层、物理层

MTU

链路层的最大传输单元

MAC地址

指物理地址,确定网络设备的地址

ARP协议

提供IPV4和各种网络技术使用的硬件地址之间的映射。

为啥有IP地址还需要MAC地址?为啥有MAC地址还需要IP地址

首先是有交换机用来寻找地址的,交换机中是根据MAC地址来寻址的,但是随着电脑越来越多,不够交换机去分配,于是有了路由器,路由器起到对应于不同子网的IP地址电脑之间的转发上,也就是说如果是在相同的子网上的话,是可以直接通过交换机来实现通信的,而对于不同子网上的电脑,则需要使用IP地址来通信。

网络层转发数据的流程

转发数据的流程主要是根据路由表,路由表会通过IP地址的映射关系从而实现网络的跳转。

子网划分,子网掩码

首先IP地址分为网络号和主机地址,所谓子网掩码就是把主机地址给掩盖了,这样就是相同网络号就是一个子网,主机号还可以再拿出位来实现子网划分。

网际控制报文协议(ICMP)

ICMP主要是用来知道网络数据包的传送到底出现了啥问题,当传送过程中出现问题时,
会发送ICMP数据包返回到源点来通知发生了啥错误。

ICMP应用举例

ping traceroute

TCP与UDP的区别和应用场景

连接:TCP是面向连接的传输协议,UDP不需要连接
服务对象:TCP是点对点的连接,UDP可以n对m
可靠性:TCP可靠交付,UDP是尽最大努力交付
TCP有拥塞控制和流量控制,UDP啥也没有
TCP首部长度较长,UDP首部只有8字节
传输方式:TCP是流式传输,UDP是一个个包发送
分片:TCP是如果大于MSS会在传输层分片,而UDP是如果大于MTU会在IP层分片
应用场景:TCP保证可靠的交付,所以用于FTP文件传输和HTTP/HTTPS
UDP面向无连接,它可以随时发送数据,再加上其本身的处理既简单又高效,所以可用于总包量较少的通信,和视频、音频等多媒体通信。

TCP首部报文格式

在这里插入图片描述

TCP滑动窗口原理

滑动窗口主要是为了解决减少确认应答的数量,其滑动窗口主要根据接受方的接受能力来改变的,对于发送方来说,一共是是将窗口分为4个部分,首先是从左到右第一部分是已发送并且通过ACK确认的,第二部分是已发送但是未通过ACK确认的,第三部分是未发送但是在发送方的发送范围之内的,第四部分是未发送的并且不在发送方的发送范围之内。TCP中用了三个指针来表示这四个部分,其中第一个指针指向已发送但未确定的那一部分的开头,第二个指针指向未发送但在可发送范围的开头,最后一个指针是相对地址,只需要第一个指针加上窗口的大小即可。如果对接受端的窗口则分为三部分,分别是已成功接受并确认的部分,未收到数据但是可接受数据、未收到数据也不可接受数据。指针类似发送窗口。

TCP超时重传

超时重传就是设置一个定时器,当发送的数据包没有在规定的时间内到达的时候就会发生超时重传,其定时器的时间选择应该大于RTT,对于多次重传,其定时器的时间会比上一次多一倍。

TCP流量控制

流量控制就是让发送方能根据接受方的接受能力可以控制发送方的发送能力。其中窗口中存储的数据都是放置在操作系统的缓存区中的,缓冲区的大小操作系统会根据情况自己调节。

TCP拥塞控制

拥塞控制是为了防止发送方把数据填满整个网络。

TCP三次握手?为啥不是两次握手?

首先客户端是出于closed状态,服务端处于listen状态,然后客户端会把syn状态位置成1,并且随机一个序号client_isn填入TCP头部,发送syn报文给服务端。
服务端收到后会把syn状态位和ack状态位置成1,然后把client_isn+1填入确认应答号,同时随机一个序号server_isn填入TCP头部,发送syn报文给服务端。
客户端收到报文后会把server_isn+1填入确认应答号中,并且发送应答报文,其TCP头部的ack置成1,然后客户端的状态为建立起连接。同时当服务端收到应答报文后也建立起连接。之后就可以发送数据了。
为啥不是两次握手,主要是为了防止历史连接的初始化从而导致混乱,对有连续发送多次syn报文建立多次连接的情况,由于有网络阻塞的情况,会有旧的报文会比新的报文先到的情况,这时就可以通过其序列号来判断是否终止连接。

TCP4次挥手?为啥不是三次挥手?

首先客户端需要关闭连接了,于是发送FIN报文给服务端,此时客户端进入time_wait1状态,之后服务端收到报文后给客户端发送ACK确认报文,此时服务端进入close_wait状态。当客户端收到ACK报文后进入time_wait2状态,当服务端数据处理完后会发送FIN报文给客户端,此时服务端进入LAST_ACK状态,之后当客户端接受FIN报文后,会回一个ACK报文,此时进入time_wait状态,而当服务端接受ACK后服务端进入closed状态,要等2MSL时间后,客户端才会进入closed状态。
为啥不是三次挥手是因为服务端ACK与FIN不能弄在一起发,当服务端接收到FIN后,一般其数据还没处理完,所以还需要处理数据,于是只能先发送一个ACK应答报文,而不能一起发FIN报文。

TCP连接释放中time_wait状态的作用

为了防止历史连接中的数据被后面相同四元组错误的接收
为了被动关闭连接能够正常的关闭。

SYN洪泛攻击,如何解决。

因为建立连接有三次握手,于是可以通过发送大量syn数据包给服务端,但是不接受服务端的回送的ACK/SYN数据包,这样造成的半连接会导致SYN队列被充满,这样就无法建立其新的连接。解决的话可以通过建立cookie,当SYN队列被充满时,通过syn+ack的序列值返回给客户端,当服务端收到客户端传来的ACK包时,服务端会检查这个ACK包的合法性,如果合法,就填入accept队列中。

TCP沾包

对于TCP沾包主要是因为TCP是流式协议,这样的话当多次发送数据包的时候,容易接受到的数据包会沾在一起,解决方法可以是自己定义一个包头,其中记录数据的大小,这样的话,当接受到这个包头数据的时候,就可以通过其记录数据的大小再接收这个大小的数据包。

TCP心跳包

所谓的TCP心跳包就是探测性包,是为了保持与客户端的长连接的。就是会每隔一段时间发送包区试探,如果不再连接了也能有效的进行清理工作。

路由器与交换机的区别

路由器是再子网与子网之间的跳转的媒介,而交换机是物理机到物理机的媒介。路由器中拥有路由表,其中有IP地址与MAC地址的映射关系,因为路由器也是有MAC地址,所以通过映射可以进行路由器间的跳转,从而到达目的子网。而交换机一般是在子网范围内的,实现的是MAC地址与端口的映射关系,由此可以在子网范围内,实现物理机之间的直接通信。

UDP如何实现可靠传输

由于UDP是不可靠传输,要实现可靠传输,可在应用层模仿TCP的可靠传输机制。
1.增加seq/ack机制
2.在发送方和接收方设置缓冲区
3.增加超时重传机制

DNS域名系统采用的是TCP协议还是UDP协议?为啥?

UDP协议,因为对于用户来说,响应时间越快越好,而TCP连接建立时间比较慢,所以采用UDP协议来实现。

HTTP请求报文与响应报文首部结构

请求报文由四部分组成,分别是请求行,请求头部,空行,请求体。
请求首部分为请求首部字段,通用首部字段,实体首部字段
响应报文由响应行、响应头部、空行、响应体
响应首部分为响应首部字段、通用首部字段、实体首部字段

HTTP1.0 HTTP1.1 HTTP2.0对比

HTTP1.0优点:跨平台,简单、便于扩展
HTTP1.0缺点:无状态,对于有关联性的操作,比较麻烦,比如对于商品下单操作之间是有关联的,因为无状态,无法得知用户的身份信息,这样的话就会每一次操作都要问一遍身份,比较麻烦。
明文传输:信息容易被窃取
不安全
HTTP1.1 改进:支持长连接,只要任意一端都没有支持断开,则会保持连接,这样就减少了连接的性能开销
管道网络传输:客户端可以开启多个请求,不需要客户端接受响应之后再发请求。但是对于服务端来说发送响应需要按照客户端发送请求的顺序,所以会造成响应阻塞。
HTTP/2改进:实现头部压缩和采用二进制形式,这样减少了发送的数据量。
采用数据流,可以并发发送,对于每个流都有独一无二的编号。
采用多路复用,不会造成HTTP1.1的队头阻塞问题,但是依旧会阻塞,因为器采用的是TCP协议发送,其采用的滑动窗口协议需要窗口内的所有序号都到齐才能发送,依旧会造成阻塞。
HTTP/3协议使用了UDP协议+QUIC协议实现类似TCP协议的可靠传输,但是不会发送TCP协议内的阻塞。

HTTP与HTTPS对比

HTTPS解决了HTTP明文传输和不安全的缺点,采用SSL/TLS协议,采用混合加密实现了信息的机密性,采用摘要算法实现了信息的完整性,防止信息被篡改。把服务器公钥放入到了数字证书中,防止被篡改。

HTTPS加密过程

首先是客户端发起加密通信请求,其中发送了客户端自己生成的随机数Client Random,用于会话密钥
然后服务端收到后,发起加密通信响应,其中发送了服务端自己生成的随机数 Server Random ,并且生成数字证书,
然后客户端回应,通过浏览器或者操作系统的CA证书,确定数字证书的可靠性,如果可靠,会从数字证书中拿出服务器的公钥,对报文加密,同时生成随机数 pre-master key,其被公钥加密了,发送给服务端。
服务器回应,pre-master key会被服务端利用私钥解密,之后利用这3个随机数建立起会话密钥,在这个会话密钥上再采用对称密钥体系进行对报文的加解密。

方法:GET,HEAD,POST,PUT,DELETE

GET请求是获取服务器的资源,本身是读的一种行为。
POST是根据请求负荷对指定的资源进行处理。
PUT传输文件
HEAD与GET方法差不多,但是只是获取报文首部。
DELETE根据指定的URL删除资源

状态码

1xx:正在请求中
2xx:请求成功
3xx:重定向
4xx:客户端出错
5xx:服务端出错

输入一个URL到显示页面的流程

以后再写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值