• TCP面试


    TCP面试

    前置说明

    tcp 下面脑图应付面试基本问题不大

    脑图在手 , 不慌

    在这里插入图片描述

    wireshark 抓包

    使用 wireshark 抓包记住 tcp 三次握手 , 四次挥手

    1.springboot准备

    @RestController
    public class HelloController {
    
        @GetMapping("/")
        public String hello() {
            return "";
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    启动项目

    2.cmd 执行 curl 命令

    curl localhost:8080
    
    • 1

    3.观察wireshark 的变化

    image-20220625013721360

    相关面试题

    为什么TCP连接的时候是3次?2次不可以吗?

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

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

    行第二次握手,也就是服务端会重发SYN报文段,客户端收到重发的报文段后会再次给服务端发送确认ack报文。

    为什么TCP连接的时候是3次,关闭的时候却是4次?

    因为只有在客户端和服务端都没有数据要发送的时候才能断开TCP。而客户端发出FIN报文时只能保证客户端没有数据发了,服务端还有没有数据发客户端是不知道的。而服务端收到客户端的FIN报文后只能先回复客户端一个确认报文来告诉客户端我服务端已经收到你的FIN报文了,但我服务端还有一些数据没发完,等这些数据发完了服务端才能给客户端发FIN报文(所以不能一次性将确认报文和

    FIN报文发给客户端,就是这里多出来了一次)。

    TCP和UDP区别

    不能一次性将确认报文和

    FIN报文发给客户端,就是这里多出来了一次)。

    TCP和UDP区别

    image-20220625013929023

  • 相关阅读:
    【设计模式】27.结构型模式-适配器(Adapter)
    ubuntu下使用vscode调试C++程序
    【高等数学】二.一元函数微分学
    红黑树的原理
    Megatron-LM GPT 源码分析(二) Sequence Parallel分析
    嵌入式Linux设备自动获取IP地址
    备战数学建模34-BP神经网络预测2
    MySQL练习题,记录
    使用雷电模拟器安装安卓APK
    Java----集合框架(Collection)、foreach的用法
  • 原文地址:https://blog.csdn.net/shaoming314/article/details/125454660