In 8.3 the default TCP keep alive settings introduced in https://github.com/elastic/elasticsearch/pull/59278 are not applied by default, therefore it uses the OS default values. See:

8.3.0:
```
cat connections-8.3.0.txt  | grep -e '930[01]' | head
ESTAB  0       0         [::ffff:127.0.0.1]:46818     [::ffff:127.0.0.1]:9301    timer:(keepalive,119min,0) uid:1038 ino:6837419 sk:a2 <->
ESTAB  0       0         [::ffff:127.0.0.1]:37928     [::ffff:127.0.0.1]:9300    timer:(keepalive,119min,0) uid:1038 ino:6834869 sk:a3 <->
ESTAB  0       0         [::ffff:127.0.0.1]:9301      [::ffff:127.0.0.1]:46808   timer:(keepalive,119min,0) uid:1038 ino:6830957 sk:a4 <->
ESTAB  0       0         [::ffff:127.0.0.1]:37942     [::ffff:127.0.0.1]:9300    timer:(keepalive,119min,0) uid:1038 ino:6834871 sk:a5 <->
ESTAB  0       0         [::ffff:127.0.0.1]:9301      [::ffff:127.0.0.1]:46828   timer:(keepalive,119min,0) uid:1038 ino:6834882 sk:a6 <->
ESTAB  0       0         [::ffff:127.0.0.1]:37926     [::ffff:127.0.0.1]:9300    timer:(keepalive,119min,0) uid:1038 ino:6834868 sk:a7 <->
ESTAB  0       0         [::ffff:127.0.0.1]:9301      [::ffff:127.0.0.1]:46826   timer:(keepalive,119min,0) uid:1038 ino:6834881 sk:a8 <->
ESTAB  0       0         [::ffff:127.0.0.1]:46824     [::ffff:127.0.0.1]:9301    timer:(keepalive,119min,0) uid:1038 ino:6837425 sk:a9 <->
ESTAB  0       0         [::ffff:127.0.0.1]:37944     [::ffff:127.0.0.1]:9300    timer:(keepalive,119min,0) uid:1038 ino:6834879 sk:aa <->
ESTAB  0       0         [::ffff:127.0.0.1]:46828     [::ffff:127.0.0.1]:9301    timer:(keepalive,119min,0) uid:1038 ino:6837430 sk:ab <->
```

8.2.2:
```
cat connections-8.2.2.txt  | grep -e '930[01]' | head
ESTAB  0       0         [::ffff:127.0.0.1]:46752     [::ffff:127.0.0.1]:9301    timer:(keepalive,4min52sec,0) uid:1038 ino:6833637 sk:6e <->
ESTAB  0       0         [::ffff:127.0.0.1]:9301      [::ffff:127.0.0.1]:46746   timer:(keepalive,4min52sec,0) uid:1038 ino:6831684 sk:6f <->
ESTAB  0       0         [::ffff:127.0.0.1]:46732     [::ffff:127.0.0.1]:9301    timer:(keepalive,4min52sec,0) uid:1038 ino:6833629 sk:70 <->
ESTAB  0       0         [::ffff:127.0.0.1]:37876     [::ffff:127.0.0.1]:9300    timer:(keepalive,4min52sec,0) uid:1038 ino:6833618 sk:71 <->
ESTAB  0       0         [::ffff:127.0.0.1]:9301      [::ffff:127.0.0.1]:46730   timer:(keepalive,4min52sec,0) uid:1038 ino:6831676 sk:72 <->
ESTAB  0       0         [::ffff:127.0.0.1]:46748     [::ffff:127.0.0.1]:9301    timer:(keepalive,4min52sec,0) uid:1038 ino:6833640 sk:73 <->
ESTAB  0       0         [::ffff:127.0.0.1]:46736     [::ffff:127.0.0.1]:9301    timer:(keepalive,4min52sec,0) uid:1038 ino:6833631 sk:74 <->
ESTAB  0       0         [::ffff:127.0.0.1]:9301      [::ffff:127.0.0.1]:46732   timer:(keepalive,4min52sec,0) uid:1038 ino:6831677 sk:75 <->
ESTAB  0       0         [::ffff:127.0.0.1]:37860     [::ffff:127.0.0.1]:9300    timer:(keepalive,4min52sec,0) uid:1038 ino:6833611 sk:76 <->
ESTAB  0       0         [::ffff:127.0.0.1]:46734     [::ffff:127.0.0.1]:9301    timer:(keepalive,4min52sec,0) uid:1038 ino:6833630 sk:77 <->
```

It's possible that after moving `NetUtil` to the netty module https://github.com/elastic/elasticsearch/pull/85953 some of the internal details used are not available anymore.
modules/transport-netty4/src/main/java/org/elasticsearch/http/netty4/Netty4HttpServerTransport.java
xContentRegistry,
            dispatcher,
            clusterSettings,
            tracer
        );
        Netty4Utils.setAvailableProcessors(EsExecutors.NODE_PROCESSORS_SETTING.get(settings));
        NettyAllocator.logAllocatorDescriptionIfNeeded();
        this.sharedGroupFactory = sharedGroupFactory;
        this.pipeliningMaxEvents = SETTING_PIPELINING_MAX_EVENTS.get(settings);
        this.maxCompositeBufferComponents = SETTING_HTTP_NETTY_MAX_COMPOSITE_BUFFER_COMPONENTS.get(settings);
        this.readTimeoutMillis = Math.toIntExact(SETTING_HTTP_READ_TIMEOUT.get(settings).getMillis());
        ByteSizeValue receivePredictor = SETTING_HTTP_NETTY_RECEIVE_PREDICTOR_SIZE.get(settings);
        recvByteBufAllocator = new FixedRecvByteBufAllocator(receivePredictor.bytesAsInt());
        logger.debug(
            "using max_chunk_size[{}], max_header_size[{}], max_initial_line_length[{}], max_content_length[{}], "
                + "receive_predictor[{}], max_composite_buffer_components[{}], pipelining_max_events[{}]",
            SETTING_HTTP_MAX_CHUNK_SIZE.get(settings),
            SETTING_HTTP_MAX_HEADER_SIZE.get(settings),
            SETTING_HTTP_MAX_INITIAL_LINE_LENGTH.get(settings),
            maxContentLength,
            receivePredictor,
            maxCompositeBufferComponents,
            pipeliningMaxEvents
        );
    }
    public Settings settings() {
        return this.settings;
    }
    @Override
    protected void doStart() {