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