-
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