佛山专业网站建设公司,做英文网站挂谷歌广告,备案的网站名称可以改吗,容县建设工程交易中心网站TCP/IP协议二十问
1. 什么是TCP网络分层#xff1f;
TCP网络分层一般分为五层#xff1a;
应用层#xff08;HTTP#xff09;#xff1a;组装数据包传输层#xff08;TCP#xff09;#xff1a;增加TCP头部#xff0c;包含端口号等信息网络互联层#xff08;IP
TCP网络分层一般分为五层
应用层HTTP组装数据包传输层TCP增加TCP头部包含端口号等信息网络互联层IP增加IP头部包含IP地址等信息网络访问层ARP增加以太网头部包含MAC地址等信息物理层
分层的好处
各层独立限制了依赖关系的范围各层之间使用标准化的接口各层不需要知道上下层是如何工作的增加或者修改一个应用层协议不会影响传输层协议灵活性比如路由器不需要应用层和传输层分层以后路由器就可以只用加载更少的几个协议层易于测试和维护提高了可测试性可以独立的测试特定层某一层有了更好的实现可以整体替换掉能促进标准化各层职能清晰方便标准化
2. TCP的三次握手为什么不是两次或者四次
客户端向服务端发送SYNseq x服务端向客户端发送SYNseq y, ACK x1;客户端向服务端发送ACK y1
两次不行
如果只做两次无法确定服务端的接收能力两次握手后建立连接有可能导致由于时延产生的多次连接建立导致资源浪费
四次不行
三次足够没必要资源浪费
3. TCP的四次挥手为什么不能是三次
客户端向服务端发送FINseq x2ACK y1服务端向客户端发送ACK x3服务端发送完剩余数据后再向客户端发送FINseq y1客户端向服务端发送ACK y2
三次不行
导致服务端的ACK和FIN将延迟发送如果延迟时间过长客户端将再次重发断开请求导致资源浪费。
4. 为什么SYN/FIN不包含数据却要消耗一个序列号
凡是需要对端确认的一定消耗TCP报文的序列号
5. 什么是半连接队列什么是SYN Flood攻击
客户端大量伪造IP发送SYN包服务端回复的ACKSYN去到了一个【未知】的IP地址势必会造成服务端大量的连接处于SYN_RCVD状态而服务器的半连接队列大小也是有限的如果半连接队列满也会出现无法处理正常请求的情况。
6. TCP快速打开的原理
TCP快速打开TCP Fast OpenTFO TFO是在原来TCP协议上的扩展协议它的主要原理就在发送第一个SYN包的时候就开始传数据了不过他要求当前客户端之前已经完成过【正常】的三次握手。
快速打开分为两个阶段请求 Fast Open Cookie 和 真正开始 TCP Fast Open
TCP Fast Open 的优势
可以利用握手去除一个往返的RTT 可以防止SYN-Flood攻击之类的
7. TCP报文中的时间戳有什么用
TCP Timestamps Option由四部分构成 类别、长度、发送方时间戳、回显时间戳
用于计算RTT防止序列号的回绕问题即使使用的序列号相同也可以通过时间戳来对不同的包进行区分。
8. TCP的超时重传时间是如何计算的
超时重传时间Retransmission TimeOut 简称RTO
经典解决方法
适用于RTT较小的情况SRTTsmoothed round trip time。 利用最新一次的RTT对SRTT时间进行更新 SRTT α × SRTT (1-α× RTT
9. TCP流量控制
把发送的数据放到发送缓冲区把接收的数据放到接收缓冲区。通过实际接收缓冲区的大小控制发送端的发送。 接收端会告知客户端自己接收窗口也就是接收缓冲区中空闲的部分。
发送端的数据包的状态
已发送且已确认已发送未确认的未发送但接收端可以接受的接收端有空间接受未发送且不可以发送接收端没空间接收
发送端速度较慢存在大量待发送的字节 发送端速度较快存在大量待确认的字节
10. TCP的keep-alive原理
定时发送探测包来探测连接的对端是否存活但是keepalive默认设置的时间过长7200s没有实际意义一般在应用层做心跳机制。
什么是心跳机制
定时向服务端发送消息能响应服务端的消息
长链接业务场景
游戏-即时通讯 在没有心跳包机制的情况下网络若掉线对方不可知 如果客户端掉线服务端不知道还维持链接就是额外的无效系统开销。
为什么需要心跳包
在NAT、防火墙网络中装设备保存信道记录及时发现对方网络断开以便及时采取措施
如何实现心跳包
TCP层面的心跳包只能够验证网络链接是否异常应用层层面的心跳包验证服务接口是否异常
为什么不采用TCP层面
应用层的连接如果成功那么TCP所在的传输层必定成功。
11. TCP中的端口号
源端口本地端口 目标端口服务器端口
最大65536个所以是0-65535
常见端口
端口号服务22SSH80HTTP443HTTPS3306mysqlRedis6379MongoDB27017
12. TCP场景问题1
AB两个主机之间建立了一个TCP连接A主机发给B主机两个TCP报文大小分别是500和300第一个报文的序列号是200那么B主机接收两个报文后返回的确认号是多少500300200 1000
13. TCP场景问题2
收到IP数据包解析后如何知道应该投递到上层中的哪个协议是TCP还是UDP
IP报文头中有协议字段TCP6UDP17
14. TCP场景问题3
TCP提供了一种字节流服务而收发双方都不保持记录的边界应用程序应该如何提供他们自己的记录标识呢
应用程序使用自己约定的规则来标识消息的边界比如有一些使用回车换行“\r\n”比如Redis的通信协议
15. telnet 的用法
检查远端端口是否打开其语法如下 telnet [ip] [port]
16. netstat的用法
主要用于查询网络情况 如 netstat -a -lu -lt
17. tcpdump
用于抓包例如可以查看三次握手和四次挥手等
18. wireshark
19. TCP和UDP的区别
TCP是一个面向连接的、可靠的、基于字节流的传输层协议 UDP是一个面向无连接的传输层协议 面向连接指的是客户端和服务端的连接在通信前通过三次握手建立连接 可靠性 TCP有状态TCP会精准记录那些数据发送了哪些数据已被接收那些数据未被接收并且保证数据包按序到达不允许差错TCP可控制如果遇到丢包或者网络不佳TCP会根据具体情况自行调整控制自己的发送速度或者重发。
20. QQ的网络协议设计
登录采用TCP协议和HTTP协议好友之间发消息可以采用UDP内网传文件可以采用P2P技术
登录过程中客户端client采用TCP协议向服务器发送消息HTTP协议下载信息登录后通过TCP来保持在线状态和好友发消息客户端采用UDP协议但是需要通过服务器转发但是为了确保传输信息的可靠性采用上层协议来保证可靠传输内网传输文件时采用P2P技术