说明:
- 面试群,群号: 228447240
- 面试题来源于网络书籍,公司题目以及博主原创或修改(题目大部分来源于各种公司);
- 文中很多题目,或许大家直接编译器写完,1分钟就出结果了。但在这里博主希望每一个题目,大家都要经过认真思考,答案不重要,重要的是通过题目理解所考知识点,好应对题目更多的变化;
- 博主与大家一起学习,一起刷题,共同进步;
- 写文不易,麻烦给个三连!!!
1.TCP、UDP的区别
答案:
传输控制协议
,
提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前,必须先在双方之间建立一个TCP
连接,之后才能传输数据。
用户数据报协议,是一个简单的面向数据报的运输层协议。
UDP
不提供可靠性,它只是把应用程序传给IP
层的数据报发送出去,但是并不能保证它们能到达目的地。
)
TCP
是面向连接的,
UDP
是面向无连接的
)
UDP
程序结构较简单
)
TCP
是面向字节流的,
UDP
是基于数据报的
)
TCP
保证数据正确性,
UDP
可能丢包
)
TCP
保证数据顺序到达,
UDP
不保证
2.TCP、UDP的优缺点
答案:
的可靠体现在
TCP
在传输数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完之后,还会断开来连接用来节约系统资源。
,内存等硬件资源。因为TCP
有确认机制、三次握手机制,这些也导致
TCP
容易被利用,实现
DOS
、DDOS、
CC
等攻击。
没有
TCP
拥有的各种机制,是一种无状态的传输协议,所以传输数据非常快,没有
TCP
的这些机制,被攻击利用的机会就少一些,但是也无法避免被攻击。
TCP
的这些机制,
UDP
在传输数据时,如果网络质量不好,就会很容易丢包,造成数据的缺失。
3.TCP UDP适用场景
答案:
:传输一些对信号完整性,信号质量有要求的信息。
:对网络通讯质量要求不高时,要求网络通讯速度要快的场景。
4.OSI典型网络模型,简单说说有哪些
5.请说一下socket网络编程中客户端和服务端用到哪些函数?
(1)服务器端函数:
(1)socket创建一个套接字
(2)bind绑定ip和port
(3)listen使套接字变为可以被动链接
(4)accept等待客户端的链接
(5)write/read接收发送数据
(6)close关闭连接
(2)客户端函数:
(1)创建一个socket,用函数socket()
(2)bind绑定ip和port
(3)连接服务器,用函数connect()
(4)收发数据,用函数send()和recv(),或read()和write()
(5)close关闭连接
6.TCP如何保证可靠性?
1.检验和:
通过检验和的方式,接收端可以检测出来数据是否有差错和异常,假如有差错就会直接丢弃TCP段,重新发送。TCP在计算检验和时,会在TCP首部加上一个12字节的伪首部。检验和总共计算3部分:TCP首部、TCP数据、TCP伪首部.
2.序列号/ 确认应答、超时重传
数据到达接收方之后,接收方会发送一个确认应答,表示已经收到数据段,并且确认序号会说明了它下一次需要接收的数据序列号,如果发送方没收到确认应答,那么发送方方会进行重发,这个等待时间一般是2*RTT(往返时间)+一个偏差值。
如果一个包多次重发没有收到接收端的确认包,就会强制关闭连接
3.窗口控制与重发控制/快速重传(重复确认应答)
TCP会利用窗口控制来提高传输速度,意思是在一个窗口大小内,不用一定等到应答才能发送下一段数据,窗口大小就是无需等待确认而可以继续发送数据的最大值,如果不使用窗口控制,每一个没收到应答的数据都要重发。
7.简述 TCP 滑动窗口以及重传机制
答案:
(1)滑动窗口协议是传输层进行流控的一种措施,接收方通过通告发送方自己的窗口大小,从而控制发送方的发送速度,从而达到防止发送方发送速度过快而导致自己被淹没的目的。滑动可以理解为缓冲区的大小,告诉发送方,自己还能接受多少数据
TCP的滑动窗口解决了端到端的流量控制问题,允许接受方对传输进行限制,直到它拥有足够的缓冲空间来容纳更多的数据。
(2)TCP在发送数据时会设置一个计时器,若到计时器超时仍未收到数据确认信息,则会引发相应的超时或基于计时器的重传操作,计时器超时称为重传超时(RTO) 。另一种方式的重传称为快速重传,通常发生在没有延时的情况下。若TCP累积确认无法返回新的ACK,或者当ACK包含的选择确认信息(SACK)表明出现失序报文时,快速重传会推断出现丢包,需要重传。
8.简述 TCP 慢启动
答案:
慢启动(Slow Start),是传输控制协议(TCP)使用的一种阻塞控制机制。慢启动也叫做指数增长期。慢启动是指每次TCP接收窗口收到确认时都会增长。增加的大小就是已确认段的数目。这种情况一直保持到要么没有收到一些段,要么窗口大小到达预先定义的阈值。如果发生丢失事件,TCP就认为这是网络阻塞,就会采取措施减轻网络拥挤。一旦发生丢失事件或者到达阈值,TCP就会进入线性增长阶段。这时,每经过一个RTT窗口增长一个段。
9.三次握手和四次挥手
答案:
1)三次握手目的:是为了确认客户端和服务器都能收发
第一次:
作用:客户端确认自己可以发 ,服务器确认自己能收,客户端发送信息给服务器,服务器接受客户端信息
第二次:
作用:客户端确认自己能收,服务器能发也能收 服务器确认自己能发服务器发送应答给客户端,客户端接收应答和报文
第三次:
作用:服务器确认客户端可以收到客户端应答服务器
第一次:客户端将标志位SYN设置为1,随机产生一个seq=x,并将该数据包发送给服务端,客户端进入SYN_SENT状态,等待服务端确认
第二次:服务端收到数据包后,由标志位SYN=1可知client请求连接,服务端将标志位SYN和ACK都置1,ack=x+1,并将该数据包发送给客户端确认连接请求,服务端进入SYN_RCVD状态
第三次:客户端收到确认后,检查ack是否为x+1,ACK是否为1,如果正确,将数据包发给服务端,服务端检查ACK是否为1,ack是否为y+1,如果是,则连接成功,服务器和客户端都进入ESTABLISHED
2)四次挥手
客户端发送FIN=1给客户端,告诉服务端数据已经发送完毕,请求终止连接,此时客户端不能发送数据(不包括协议,比如应答这些),但还能接收数据,
服务端接受FIN包之后给客户端回一个ACK包告诉它自己已经收到,此时没有断开socket连接,而是等待剩下的数据传输完成
服务端等待数据传输完毕之后,向客户端发送FIN包,表明可以断开连接
客户端收到后,回应一个ACK包表明已经收到,等待一段时间,确保服务端没有数据再发来,然后彻底断开
10.说说 TCP 2次握手行不行?为什么要3次
答案:
TCP协议双方都必须维护一个序列号,三次握手的过程及时通信双方互相告知序列号起始值,并确认对方已经收到了序列号。
如果只是两次握手,至多只有连接发起方的起始序列号能被确认,另一方选择的序列号则是得不到确认,服务器这边无法判断客户端是否能接收。
11.三次挥手可以吗
答案:
假设是客户端主动断开,在第一次挥手中客户端发起请求断开,接着服务器回了个应答(第二次),表示我已经收到请求。等一段时间,等服务器的数据发送完成之后再向客户端发起断开(第三次)。客户端接受到之后发起应答(第四次)。
如果是三次挥手那么只能是第二和第三次合并,即收到第一次挥手之后,发起应答和断开请求,但是这样会存在服务器有些数据还没发送完成就发起断不开
一句话:服务器回应你的请求断开,服务器可能还有数据没发送,所以应答和FIN就分开发。
12.简述域名解析过程
答案:
(1)输入域名后,系统首先会在本地的hosts文件检查是否有这个网址的映射,如果有就调用这个IP地址完成域名的解析。
(2)如果没有,就会去查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成解析。
(3)如果上面两种都没有,首先会找TCP/IP参数设置的首选DNS服务器,我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名在本地配置区域资源中,则解析。
原文地址:https://blog.csdn.net/weixin_45257157/article/details/135731201
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_60530.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!