个人简介

Echo Blog


江湖无名 安心练剑
  • NET 网络专题汇总-06-22-没有 accept,能建立 TCP 连接吗?
    Q 这次,我们来讨论一下,没有 accept,能建立 TCP 连接吗? 下面这个动图,是我们平时客户端和服务端建立连接时的代码流程。 对应的是下面一段简化过的服务端伪代码。 int main() { /*Step 1: 创建服务器端监听socket描述符listen_fd*/ listen_fd = socket(AF_INET, SOCK_STREAM,...
    2023-02-22 00:00:00 | Net
  • NET 网络专题汇总-06-21-服务端没有 listen,客户端发起连接建立,会发生什么?
    问题 服务端如果只bind了ip和端口,但是没有调用Listen让这个socket监听连接,这时候如果客户端朝这个服务端socket发数据,会发生啥? 这位读者的角度是以为服务端没有调用 listen,客户端会 ping 不通服务器,很明显,搞错了。 ping 使用的协议是 ICMP,属于网络层的事情,而面试官问的是传输层的问题。 针对这个问题,服务端如果只 bind 了 IP 地址...
    2023-02-22 00:00:00 | Net
  • NET 网络专题汇总-06-20-TCP 和 UDP 可以使用同一个端口吗?
    问题 之前有读者在字节面试的时候,被问到:TCP 和 UDP 可以同时监听相同的端口吗? 关于端口的知识点,还是挺多可以讲的,比如还可以牵扯到这几个问题: 多个 TCP 服务进程可以同时绑定同一个端口吗? 重启 TCP 服务进程时,为什么会出现“Address in use”的报错信息?又该怎么避免? 客户端的端口可以重复使用吗?...
    2023-02-22 00:00:00 | Net
  • NET 网络专题汇总-06-19-如何基于 UDP 协议实现可靠传输?
    如何基于 UDP 协议实现可靠传输? 我记得之前在群里看到,有位读者字节一面的时候被问到:「如何基于 UDP 协议实现可靠传输?」 很多同学第一反应就会说把 TCP 可靠传输的特性(序列号、确认应答、超时重传、流量控制、拥塞控制)在应用层实现一遍。 实现的思路确实这样没错,但是有没有想过,既然 TCP 天然支持可靠传输,为什么还需要基于 UDP 实现可靠传输呢?这不是重复造轮子吗? ...
    2023-02-22 00:00:00 | Net
  • NET 网络专题汇总-06-18-TCP 协议有什么缺陷?
    TCP 协议有什么缺陷? 写的多了后,忽然思考一个问题,TCP 通过序列号、确认应答、超时重传、流量控制、拥塞控制等方式实现了可靠传输,看起来它很完美,事实真的是这样吗?TCP 就没什么缺陷吗? 所以,今天就跟大家聊聊,TCP 协议有哪些缺陷?主要有四个方面: 升级 TCP 的工作很困难; TCP 建立连接的延迟; TCP 存在队...
    2023-02-22 00:00:00 | Net
  • NET 网络专题汇总-06-17-TCP Keepalive 和 HTTP Keep-Alive 是一个东西吗?
    大致问题是,TCP 的 Keepalive 和 HTTP 的 Keep-Alive 是一个东西吗? 这是个好问题,应该有不少人都会搞混,因为这两个东西看上去太像了,很容易误以为是同一个东西。 事实上,这两个完全是两样不同东西,实现的层面也不同: HTTP 的 Keep-Alive,是由应用层(用户态) 实现的,称为 HTTP 长连接; TCP 的 K...
    2023-02-22 00:00:00 | Net
  • NET 网络专题汇总-06-16-HTTPS 中 TLS 和 TCP 能同时握手吗?
    面试 有位读者在面试的时候,碰到这么个问题: 面试官跟他说 HTTPS 中的 TLS 握手过程可以同时进行三次握手,然后读者之前看我的文章是说「先进行 TCP 三次握手,再进行 TLS 四次握手」,他跟面试官说了这个,面试官说他不对,他就感到很困惑。 我们先不管面试官说的那句「HTTPS 中的 TLS 握手过程可以同时进行三次握手」对不对。 但是面试官说「HTTPS 建立连接的过...
    2023-02-22 00:00:00 | Net
  • NET 网络专题汇总-06-15-tcp_tw_reuse 为什么默认是关闭的?
    问题 上周有个读者在面试微信的时候,被问到既然打开 net.ipv4.tcp_tw_reuse 参数可以快速复用处于 TIME_WAIT 状态的 TCP 连接,那为什么 Linux 默认是关闭状态呢? 当时看到读者这个问题的时候,我也是一脸懵逼的,经过我的一番思考后,终于知道怎么回答这题了。 其实这题在变相问「如果 TIME_WAIT 状态持续时间过短或者没有,会有什么问题?」 因为...
    2023-02-22 00:00:00 | Net