计算机网络中的常见面试题

1什么是TCP网络分层

      客户端发送 HTTP协议组装数据包,从应用层出发需要先经过五层穿衣服再经过五层脱衣服,过传输层需要加TCP头,过网络互联层需要加IP头,过网络访问层需要加以太网头,经过物理层传输到服务端的网络访问层,再进行三次脱衣服将HTTP报文发送到应用层

      好处:每一层都独立,都是用标准的接口,相互不影响,灵活性更好,比如如果路由器就不需要应用层和传输层,分层以后路由器就可以只用加载几个更少的协议层

       易于测试和维护:提高了可测试性,可以独立测试

2为什么syn和fin 不包含数据却要使用一个序列号

      凡是对端的确认,一定要消耗TCP报文的序列号

3  为什么TCP握手是三次

   如果是两次,可能会遭受ddos攻击,链接资源的建立

   三次就可以确认,没有必要做四次

4 tcp的四次挥手为什么不是三次

    即是将第二次的ack 和 fin 合成一体,行不行

   在当服务器收到fin 请求的时候,还有一定的任务没有完成,需要等待一定的时间,如果将回复 的    ack报文,等着任务完成之后和f服务端的fin一起发出,就会造成客户端以为服务端没有收到, 就会在重新发一遍(因为tcp是面向连接的是可靠的,如果30s内没有收到回复会进行补发)

5什么是半链接队列什么是 syn flood攻击

客户端伪造大量ip去发送syn包,服务端会创建回复队列,会出现大量的半链接队列,如果半链接队列满的就会出现无法正确处理队列

6说说TCP快速打开TFO的原理

在建立过正常的三次握手之后,下一次发送时发送syn包的时候就可以携带数据

首先第一次发送syn包的时候会携带一个cookie

第二次握手的时候会进行队cookie的校验,如果校验通过就可以携带数据,如果核验不通过就走正常的tcp的三次握手

7tcp报文之间的时间戳有什么作用

类别 长度 发送方时间戳(TS value )回显时间戳(TS echo REpLy)

在头部信息里有时间戳

时间戳解决两个问题

1计算往返时间延迟

2防止序列的回绕的作用

因为tcp的序列号用32bit来表示,在很短的时间内序列号会重复使用

假设发送了六个数据包,可能会没有收到的时候要重传,但是序列号会有相似,所以时间戳就作为了一种唯一的标识区分

8 TCP的超时重传时间是如何计算的

RTO(Retransmisson TimeOut)

经典方法 (使用往返时(RTT(Round—TRip time))延波动较小的情况

9 TCP的流量控制

TCP报文发送的时候 会有发送端的缓冲区,接受端的接受数据有接受端的缓冲区

通过接收端的缓冲区的大小来控制发送端的发送,如果对方的接受缓冲区满了就不能继续发送了

发送时会带着一个窗口的大小

发送端的数据包的状态

已发送已确认的数据,已发送但是未确认的,未发送但是接收端可以接受的,未发送数据44字节

            中间两个属于滑动窗口,通过窗口的大小来滑动(窗口的大小是根据接收端来计算的)

10TCP的keep-alive的原理

在双方建立tcp连接之后,如果双方都不发送数据,就会死链接

定时发送探测包区探测连接端是否存活,探测连接是否失效,但是默认清理下需要7200秒没有数据连接才会去检查,所以在实际应用之中非常少用,所以在应用层建立心跳报文来检查

11tcp中的端口号

端口号就像是跟别人合租,知道你住在2501但是还要知道你住在几号房才能找到你

源端口号:去别人时自己也需要有相应的端口号,一般是源端口号

目标端口号:需要访问的目标网站的端口号

熟知端口号 范围是 0 -1023

HTTP:80

HTTPS:443

SSH:22

已登记的端口号:范围是 1024 -49151

MY

12 telnet

检查端口是不是打开

telnet ip +端口号 (模拟http请求)

13讲netstat用法

-a(all) 显示所以选项,输出所有套接字

-t (tcp协议相关的) -

-u(udp协议的相关)

-l(正在监听的)

14将tcpdump用法

抓包工具,去抓tcp的包

tcpdump -i any  ——抓取机器上的网卡

telnet ww.baidu.com 80 先找出ip,需要去curl百度之后再用tcpdump -i any host www.baidu.com ——监听三次握手

15 tcp和udp的区别

1面向连接与无连接

2可靠性

tcp:有状态,而且数据包按照序号到达

          可以控制,意识到丢包或者网络不佳,会根据具体情况调节

16如果涉及一个qq在网络协议上你会如何考虑设计

登录用 tcp 和http 和好友发送消息使用udp 内网传输使用p2p

1登录客户端使用tcp向服务端发消息,用http协议下载信息,登录之后使用tcp连接来确保传输可靠性

2和好友发送消息,客户端使用UDP,但是如果发送失败,客户端会提示消息发送失败

3如果是在内网里面的两个客户端传文件,使用p2p不需要服务器中转

17BIO NIO AIO 分别是什么

BIO:同步阻塞IO 使用BIO读取数据,线程会阻塞

NIO:同步非阻塞,不会阻塞,但需要线程主动查询是否有IO事件

AIO:异步非阻塞,不会阻塞也不需要主动查询

18 cookie 和session有什么区别,如果没有cookie,session还能进行身份验证吗

当服务器第一次接收到客户端的请求时,会开辟一块session对象,同时会生成一个session id 通过响应头的方式保存到客户端的cookie中,

11

      

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值