1、涉及函数接口
服务端:
a. socket()
b. bind()
c. listen()
d. accept()
e. send()
f. rec()
g. close()
客户端:
a. sokete()
b. bind()
c. connect()
d. send()
e. rec()
f. close()
问题1、三次握手,服务端、客户端,分别发生在哪个函数里面?
服务端:listen()和accept()
客户端:connect()
问题2、listenfd可不可以发送数据?
问题1、三次握手,服务端、客户端,分别发生在哪个函数里面?
服务端:listen()和accept()
客户端:connect()
问题2、listenfd可不可以发送数据?
问题3、TCP状态机的各种切换状态,TIME_WAIT状态持续时间及原因
60s,最后的ack能让被动关闭方接收, 让旧连接的重复分节在网络中自然消失
问题4、 超时重传的和快速重传
一般发送了报文后会有个定时器启动,如果定时器时间到了还没收到ack,就要重传,tcp有一下几种重传机制
超时重传:时间驱动,时间定时器触发。
快速重传:数据驱动,三次相同ack触发。
SACK:在快速重传的基础上,返回最近收到的报文段的序列号范围,这样客户端就知道,哪些数据包已经到达服务器了。
DSACK:SACK的基础上额外携带信息,目的是帮发送方判断是否发生了失序、ACK丢失、包重复或伪重传。
问题5、TCP首部长度,有哪些字段
问题6、TCP在listen时的参数backlog的意义
根据平台和版本的不同,含义不同,有半连接队列的size,全连接队列的size,全连接+半连接队列的size,这三种可能,如果有ddos,增大backlog其实意义不大。
问题7、accept发生在三次握手的那一步
第三步,收到ack添加进全连接队列时。
8、三次握手过程中有哪些不安全性
ddos攻击,接收到大量的syn报文,会创建大量的节点放入半连接队列,一般在防火墙或业务层逻辑(比如对来自同一ip的请求在一定时间内做了限制)做规避。
9、粘包问题
只有tcp才会有粘包问题,主要是tcp是基于字节流发送的,即应用程序所看到的数据是一个整体,这样导致一条消息的起止在tcp层没法判断,只有靠应用层协议来解决;而udp是面向消息的协议,即每条消息就是一个udp段,故不会有粘包问题。
四次挥手
大量的close_wait
双方同时调用close
哪些场景会出现closing状态
什么情况下会有time_wait
模板二:本专栏知识点是通过<零声教育>的线上课学习,进行梳理总结写下文章,对c/c++linux课程感兴趣的读者,可以点击链接,详细查看课程的服务: