网络编程面试系列-02

1. 为什么 TCP 握手三次,挥手四次?

因为只有在客户端和服务端都没有数据要发送的时候才能断开TCP。而客户端发出FIN报文时只能保证客户端没有数据发了,服务端还有没有数据发客户端是不知道的。

服务端收到客户端的FIN报文后只能先回复客户端一个确认报文来告诉客户端,服务端已经收到FIN报文,但服务端还有一些数据没发完,等这些数据发完了服务端才能给客户端发FIN报文,所以不能一次性将确认报文和FIN报文发给客户端,就是这里多出来了一次。

2. 为什么 TCP 握手三次?两次不可以吗?

因为需要考虑连接时丢包的问题,如果只握手2次,第二次握手时如果服务端发给客户端的确认报文段丢失,此时服务端已经准备好了收发数(可以理解服务端已经连接成功)据,而客户端一直没收到服务端的确认报文,所以客户端就不知道服务端是否已经准备好了(可以理解为客户端未连接成功),这种情况下客户端不会给服务端发数据,也会忽略服务端发过来的数据。

如果是三次握手,即便发生丢包也不会有问题,比如如果第三次握手客户端发的确认ack报文丢失,服务端在一段时间内没有收到确认ack报文的话就会重新进行第二次握手,也就是服务端会重发SYN报文段,客户端收到重发的报文段后会再次给服务端发送确认ack报文。

3. 为什么客户端发出第四次挥手确认报文后要等 2MSL才能释放 TCP 连接?

这是因为考虑数据丢包的问题,如果第四次挥手的报文丢失,服务端没收到确认ack报文就会重发第三次挥手的报文,这样报文一去一回最长时间就是2MSL,所以需要等这么长时间来确认服务端确实已经收到。

注意:Linux系统中2MSL默认是60秒,那么一个MSL也就是30秒。

4. 如果已建立连接,此时客户端出现故障会如何?

TCP设有一个保活计时器,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。

服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。

5. HTTP 和 HTTPS 有什么区别?

1、HTTP的URL以http://开头open in new window,而HTTPS的URL以https://开头open in new window

2、HTTP是不安全的,而HTTPS是安全的。

3、HTTP标准端口是80,而HTTPS的标准端口是443。

4、在OSI网络模型中,HTTP工作于应用层,而HTTPS的安全传输机制工作在传输层。

5、HTTP无法加密,而HTTPS对传输的数据进行加密。

6、HTTP无需证书,而HTTPS需要CA机构wosign的颁发的SSL证书。

区别 HTTP HTTPS
协议 运行在TCP之上,明文传输,客户端与服务器端都无法验证对方的身份 身披SSL(Secure Socket Layer&#x

相关推荐

  1. 网络编程面试系列-02

    2024-02-12 02:48:01       50 阅读
  2. JVM面试系列-02

    2024-02-12 02:48:01       50 阅读
  3. MySQL面试系列-02

    2024-02-12 02:48:01       53 阅读
  4. Redis面试系列-02

    2024-02-12 02:48:01       51 阅读
  5. MongoDB面试系列-02

    2024-02-12 02:48:01       52 阅读
  6. Linux面试系列-02

    2024-02-12 02:48:01       51 阅读
  7. MyBatis面试系列-02

    2024-02-12 02:48:01       40 阅读
  8. 消息队列面试系列-02

    2024-02-12 02:48:01       51 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-12 02:48:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-12 02:48:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-12 02:48:01       82 阅读
  4. Python语言-面向对象

    2024-02-12 02:48:01       91 阅读

热门阅读

  1. 【国产MCU】-CH32V307-触摸按键检测(TKEY)

    2024-02-12 02:48:01       54 阅读
  2. freertos 源码分析六 任务调度二

    2024-02-12 02:48:01       56 阅读
  3. 批量提取word文件中文本框内容的三种方法

    2024-02-12 02:48:01       57 阅读
  4. Day4.

    Day4.

    2024-02-12 02:48:01      50 阅读
  5. 作业2.11

    2024-02-12 02:48:01       50 阅读
  6. Python学习之路-初识爬虫:requests

    2024-02-12 02:48:01       55 阅读
  7. 树,二叉树,堆(顺序结构)

    2024-02-12 02:48:01       55 阅读
  8. 顶级思维方式——认知篇二

    2024-02-12 02:48:01       46 阅读