计算机网络-校招总结

计算机网络的重要性不言而喻, 也是计算机基础里面关键的一环与面试热点, 之前收集了一些问题和知识点, 现在此分享
#针对目标
- 学完书本知识就忘记的我
- 本科网络工程但是对网络所知甚少的我
- 只偏向于工程应用而不热衷理论研究的我
- 不想在校招中裸奔的我
- 偶尔路过的你
#内容
计算机网络中热点面试问题, 我认为应该知道的一些基础知识; 不会深究太多, 以我认为够用为界
#网络分层
##七层参考模型
具体展开不再深入
- 应用层
- 表示层
- 会话层
- 传输层
- 网络层
- 链路层
- 物理层

##TCP ip模型
###应用层
![TCP/IP模型](https://ae01.alicdn.com/kf/HTB1Rargd21G3KVjSZFk761K4XXaL.png)

注意事项:
在OSI模型中ARP协议属于链路层;而在TCP/IP模型中,ARP协议属于网络层。 
## Tcp ip中的数据流
![数据流详情](https://ae01.alicdn.com/kf/HTB13wYed.GF3KVjSZFm762qPXXan.png)

    应用层
        定义数据格式,并按照对应的格式解读数据
        应用层定义了各种各样的协议来规范数据格式
            HTTP
            FTP
        比如http报文的头部格式
    传输层
        引入相关通信协议
            定义端口
            为了给每个应用程序标识身份
            找到IP标定的主机上,具体接收数据的端口
        UDP数据包
        TCP数据包
    网络层
        IP地址
            确认主机所在的网络位置,并通过IP进行MAC寻址
            对外网数据包进行路由转发
        在网络层被包装的数据包就叫IP数据包
        网络层的主要工作是定义网络地址,区分网段,子网内MAC寻址,对于不同子网的数据包进行路由
    链路层
        MAC地址
            链路层定义了主机的身份,即MAC地址
            定义数据帧,确认主机的物理地址,传输数据;
        在链路层生成以太网数据包
        以太网数据包通过物理介质传输给对方主机
## TCP协议
### 一些基本问题

    TCP与UDP的区别
        TCP面向连接
        可靠的流协议
            顺序控制
            流量控制
            拥塞控制
        UDP
            有更高的实时性
            不可靠的数据报协议
            不能保证一定会送达

    为什么要三次握手?
        三次握手的目的是建立可靠的通信信道
        双方确认自己与对方的发送与接收是正常的
    
    三次握手的过程

        客户端发送syn包(seq=x)到服务器
            客户端SYN_SEND状态,等待服务器确认
        服务器收到syn包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包
            服务器进入SYN_RECV状态
        客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),
            此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手
![](https://ae01.alicdn.com/kf/HTB1HlPfd2WG3KVjSZFP760aiXXao.png)

    TCP四次握手

            客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作
    
            1.主动方申请关闭连接,发送FIN报文,意味着这一方没有要发送的数据了!
                    状态变为FIN-WAIT-1
            2.被动方接收,发送ACK,先发送一个确认, ACK和ack
                这时候还没有真正的发送完被动方的数据
                状态变为CLOSE_wait
            3.主动方状态变为FIN-wait2
                被动方发送FIN, 意味着被动方也发送完了
                LAST-ack状态
            4.主动方发送确认,正式要关闭连接
                主动方等待2MSL后,没有回复 关闭连接
![](https://ae01.alicdn.com/kf/HTB1HlPfd2WG3KVjSZFP760aiXXao.png)

### TCP协议中的一些细节

#### tcp如何保证可靠性

使用如下技术
-     校验和
-     序列号
-     确认应答
-     重发控制
-     连接管理
-     窗口管理

####TCP怎么保证连接的唯一性
-     TCP/IP唯一性含除地址和端口外, 还有一个时间上的标记才可完全确立。
-     对TCP而言在三次握手时的SYN标志会使用上一个ISN值
-     每一次连接都会分配到一个ISN值,连接双方对这个值会记录共识,假如这个值不一,就说明了这个连接已超时或无效

####TCP窗口的作用
-     进行流量控制的
-     tcp的应答不是对每个段的
-     而是以一个更大的单位-窗口

####tcp 粘包拆包问题是怎么产生的?什么时候会发生? 怎么来解决?
- tcp的协议数据不会丢,没有收完包,下次接收,会继续上次继续接收,己端总是在收到ack时才会清除缓冲区内容。数据是可靠的,但是会粘包和拆包问题。(UDP不会发生粘包)
- 两种情况下发生粘包:    发送端需要等缓冲区满才发送出去,两个数据包太小了,造成粘包; 客户端发送了一段数据,服务端只收了一小部分,服务端下次再收的时候还是从缓冲区拿上次遗留的数据,产生粘包.
- 两种情况下发生拆包:要发送的数据大于TCP发送缓冲区剩余空间大小,将会发生拆包; 待发送数据大于MSS(最大报文长度),TCP在传输前将进行拆包
- 解决的关键: 接收端不知道发送端将要传送的字节流的长度,所以解决粘包的方法就是围绕: 如何让接收端有办法知道哪里是终止.
- 方法1:发送端给每个数据包添加包首部,首部中应该至少包含数据包的长度,这样接收端在接收到数据后,通过读取包首部的长度字段,便知道每一个数据包的实际长度了。
- 方法2:发送端将每个数据包封装为固定长度(不够的可以通过补0填充)
- 方法3:可以在数据包之间设置边界,如添加特殊符号,这样,接收端通过这个边界就可以将不同的数据包拆分开

####TCP的拥塞控制

    思路
        为防止传输的阻塞,通过一个慢启动得到的数值来控制发送的数据量
        发送方维持一个叫做拥塞窗口的状态变量
        不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小
        主要要记住的就是下面四个算法,
    慢启动阶段
        意思是刚刚加入网络的连接,一点一点地提速,不要一上来就把路占满。
        把拥塞窗口设为1个数据段
        指数性增加,直到第一次丢失
    拥塞避免
        到达一个阈值后,开始线性增加
    快重传
        快重传要求接收方在收到一个失序的报文段后就立即发出重复确认
    快恢复
        和快重传算法配合使用,当发送方连续收到3个重复确认时就执行乘法减小算法,把慢开始门限ssthresh减半
        但由于发送 方 连续 收到 几个重传确认,所以认为此事网络无阻塞,所以此时不执行慢开始算法,而是让cwnd 从 ssthresh开始执行拥塞避免算法(加法增大)。
        

##HTTP协议

    什么是http协议?
        是一个基于请求与响应模式的
        无状态的
        基于TCP的连接方式
        应用层的协议

    http请求方法
        常用的方法有哪些?
            get
            post
        get 和 post 请求有哪些区别?
            get的参数在url中
            post的通过request Body传递
            GET请求在URL中传送的参数是有长度限制的
            get重点在从服务器上获取资源

    post重点在向服务器发送数据
            get是不安全的,因为URL是可见的,可能会泄露私密信息,如密码等;

    post较get安全性较高;
    
    http请求报文和响应报文
        请求报文
            请求行
            请求首部字段
            请求实体
        响应
            状态行
            响应首部字段
            响应实体

    http协议2.0和1.1的区别
        HTTP/2是完全多路复用的
        HTTP/2采用二进制格式而非文本格式
        HTTP/2让服务器可以将响应主动“推送”到客户端缓存中
        header压缩

    https的原理,如何加密解密
        Https在真正请求数据前,先会与服务有几次握手验证,以证明相互的身份
        客户端向服务器发起HTTPS请求,连接到服务器的443端口
        服务器将自己的公钥发送给客户端
        客户端收到服务器端的公钥之后,会对公钥进行检查,验证其合法性
            验证成功,生成随机的对称秘钥
        客户端会发起HTTPS中的第二个HTTP请求,将加密之后的客户端密钥发送给服务器
        服务器接收到客户端发来的密文之后,会用自己的私钥对其进行非对称解密
            这样两边就有了一对对称秘钥
        之后就可以了

    http常用状态码
        1xx:指示信息--表示请求已接收,继续处理
        2xx:成功--表示请求已被成功接收、理解、接受
            200:请求被正常处理
            204:请求被受理但没有资源可以返回
        3xx:重定向--要完成请求必须进行更进一步的操作
            301:永久性重定向
            302:临时重定向
        4xx:客户端错误--请求有语法错误或请求无法实现
            400:请求报文语法有误,服务器无法识别
            401:请求需要认证
            403:请求的对应资源禁止被访问
            404:服务器无法找到对应资源
        5xx:服务器端错误--服务器未能实现合法的请求
            500:服务器内部错误
            503:服务器正忙

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值