计算机网络八股文(四)

目录

61.客户端调用close()后的断开流程是怎样的?

62.没有accept可以建立TCP连接吗?

63.没有listen可以建立TCP连接吗?

64.什么是TCP半连接队列(SYN队列)和全连接队列(accept队列)?

65.TCP是怎样实现可靠传输的?

66.说说TCP的重传机制?

67.滑动窗口的大小由哪一方决定的?

68.接收窗口和发送窗口大小是相等的吗?

69.什么是流量控制?

70.SYN报文什么时候被丢弃?

71.客户端拔掉网线后,原本的TCP连接还存在吗?

72.HTTP-Keepalive和TCP Keepalive是一个东西吗?

73.TCP协议的缺陷?

74.服务端没有listen,客户端发起连接请求,会发生什么?

75.TCP四次挥手,可以变成三次挥手吗?

76.TCP序列号和确认号是如何变化的?

77.断网了还能ping通127.0.0.1(回环地址)吗?

78.127.0.0.1和localhost以及0.0.0.0有区别吗?


61.客户端调用close()后的断开流程是怎样的?

62.没有accept可以建立TCP连接吗?

        可以。

        accept系统调用并不参与三次握手过程,它的作用主要是将已经建立连接的socket取出来,然后对该socket进行读写操作。

63.没有listen可以建立TCP连接吗?

        可以。

        客户端可以进行TCP自连接(自己连接自己),也可以两个客户端同时向对方请求连接(TCP需同时打开)。这两种情况没有服务端参与,就不需要listen。

64.什么是TCP半连接队列(SYN队列)和全连接队列(accept队列)?

        服务端收到客户端的SYN请求后,内核会将该连接放在半连接队列中,然后发送SYN-ACK报文给客户端,客户端回复ACK报文给服务端,服务端收到ACK后,会将该连接从半连接队列中移除,然后创建一个新的完全连接,并添加到accept队列中,进程调用accept函数时就会取出该连接。

        半连接和全连接队列都有大小限制,如果超过限制,内核就会丢弃连接或者返回RST报文。

65.TCP是怎样实现可靠传输的?

        TCP通过序列号、确认应答、超时重传、窗口控制等机制实现可靠传输。

66.说说TCP的重传机制?

        1)超时重传:发送数据时会设定一个计数器,超过指定时间后没有收到对方的ACK应答,则会重发该数据。

        2)快速重传:当连续收到三个相同的ACK报文时,就会在定时器过期之前,重传丢失的报文段。

        3)SACK:在TCP首部字段的“选项”中添加SACK,它会将已收到的数据信息发送给发送方,发送方就可以只重传丢失的数据

        4)DSACK:用来告诉发送方,哪些数据被重复发送了。

67.滑动窗口的大小由哪一方决定的?

        接收方的Windows字段。

68.接收窗口和发送窗口大小是相等的吗?

        接收窗口大小约等于发送窗口大小。窗口大小并不是不变的。

69.什么是流量控制?

        发送方根据接收方的实际接收能力来控制发送的数据数量。

70.SYN报文什么时候被丢弃?

        TCP半连接队列满了、全连接队列满了。

71.客户端拔掉网线后,原本的TCP连接还存在吗?

        情况1:拔掉网线后有数据传输:

                如果服务端发送了数据,在服务端到达最大重传次数之前,客户端重新插回网线,那么原本的TCP连接正常存在;如果服务端达到了最大重传次数时,服务端就会断开连接。当客户端重新插回网线后,发送数据给服务端,服务端会回复RST报文,客户端收到后就会断开连接

        情况2:拔掉网线后没有数据传输:

                如果双方都没有开启TCP保活机制,如果客户端的网线一直没有重新插回,那么客户端和服务端的TCP连接将会一直保持存在;如果双方都开启了TCP保活机制,客户端一直不插回网线,TCP保活机制就会探测对方的TCP连接没有存活,就会断开连接而在TCP探测期间,客户端插回了网线,那么双方的TCP连接还能正常存在。

72.HTTP-Keepalive和TCP Keepalive是一个东西吗?

        不是。

        HTTP-Keepalive:也叫HTTP长连接,该功能由应用程序实现,可以使得同一个TCP连接来发送和接收多个HTTP请求/响应。

        TCP Keepalive:也叫TCP保活机制,该功能由内核实现,当客户端与服务端长时间没有数据交互时,内核会发送探测报文来检查对方是否在线,来决定是否关闭TCP连接。

73.TCP协议的缺陷?

        升级困难、建立连接的延迟、队头阻塞、网络迁移需要重新建立TCP连接。

74.服务端没有listen,客户端发起连接请求,会发生什么?

        服务端如果只bind了ip和端口,没有调用listen,客户端发起连接请求,服务端会回RST报文。

75.TCP四次挥手,可以变成三次挥手吗?

        当被动关闭方没有数据要发送,并且使用了TCP延迟确认机制,那么第二次挥手和第三次挥手可以合并传输,TCP可以变成三次挥手

        Tips:什么是TCP延迟确认机制?

                1)有响应数据要发送时,ACK会随着响应数据一起发送给对方

                2)没有响应数据要发送时,ACK将会延迟一段时间,以等待是否有响应数据一起发送

                3)如果在延迟等待发送ACK期间,对方的第二个数据报文到达了,这时会立刻发送ACK

76.TCP序列号和确认号是如何变化的?

        万能公式:

        序列号 = 上一次发送的序列号 + len(数据长度)。特殊情况,如果上一次发送的报文是 SYN 报文或者 FIN 报文,则改为 上一次发送的序列号 + 1

        确认号 = 上一次收到的报文中的序列号 + len(数据长度)。特殊情况,如果收到的是 SYN 报文或者 FIN 报文,则改为 上一次收到的报文中的序列号 + 1

77.断网了还能ping通127.0.0.1(回环地址)吗?

        可以。

        Tips:ping 127.0.0.1 和 ping 本机地址 没有区别

78.127.0.0.1和localhost以及0.0.0.0有区别吗?

        localhost不叫ip,它叫域名,默认解析为127.0.0.1;

        ping 0.0.0.0 是会失败的,因为在IPV4中它表示是无效的目标地址

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值