Skip to content

Commit 1e09e14

Browse files
committed
add SO_REUSEADDR & SO_REUSEPORT related and other tcp questions
1 parent a40b89b commit 1e09e14

File tree

1 file changed

+15
-3
lines changed

1 file changed

+15
-3
lines changed

network.txt

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,17 @@
137137
(tips:TCP_NODELAY用来关闭nagle算法)
138138

139139
35、SO_REUSEADDR 标志有什么作用?
140+
(tips:作用有如下几个
141+
1、默认情况下,如果有两个socket,socketA=ipA:portA,socketB=ipB:portB,
142+
只要ipA 和 ipB不冲突,就可以bind成功,
143+
如果有一个socket绑定了 0.0.0.0:21,如果不打开SO_REUSEADDR,那么其他socket
144+
就不能再bind 192.168.0.1:21,同样绑定其他端口也不行,因为地址冲突了。
145+
总结而言就是 SO_REUSEADDR可以让0.0.0.0地址和其他地址共同使用)
146+
2、还有一点就是当socket处于 TIME_WAIT状态时,如果不指定SO_REUSEADDR,那么
147+
后续如果有socket想绑定相同的addr:port,就会失败,这里不考虑SO_REUSEPORT)
140148

141149
36、SO_REUSEPORT 标志有什么作用?
150+
(tips:SO_REUSEPORT则条件更为宽松,ip+port都相等也可以,由内核来分配对应的链接sock)
142151

143152
37、SO_REUSEADDR 和 SO_REUSEPORT有什么区别?使用中分别要注意什么?
144153

@@ -270,7 +279,8 @@
270279

271280
89、TCP_DEFER_ACCEPT 标志有什么作用?
272281
(tips:设置了这个option的listen socket 只有在连接上真正收到了数据时,listener才会被唤醒,
273-
这样会减少listener的wake up次数,提高效率)
282+
这样会减少listener的wake up次数,提高效率
283+
客户端socket同样可以设置这个标志,这样会减少一次客户端向服务器发送的ack)
274284

275285
90、sysctl -a | grep "tcp" | grep "re" 中各种重试次数与时间的设置都有哪些作用?
276286

@@ -372,8 +382,10 @@
372382
服务端发送SYN包,服务端回复ACK里面带有seq数据,这样就可以拿到正确的seqid,然后手动构造RST包给服务端)
373383

374384
113、TCP头中的PSH 标志什么意思?
375-
(tips:当接收端收到带有PSH标志的包时,不会继续等待数据,而是直接唤醒上层的socket接收数据,
376-
所以,PSH一般用在 发送端 已经发送完数据,在最后一个包上带上PSH标志
385+
(tips:
386+
接收端收到带有PSH标志的包时,不会继续等待数据,而是直接唤醒上层的socket接收数据
387+
发送端看到有PSH标志的包时,不会继续等待后续数据,而是立即将对应数据包发送出去,
388+
PSH一般用在 发送端 已经发送完数据,在最后一个包上带上PSH标志
377389
应用层无法控制TCP头中的PSH)
378390

379391
114、TCP头中的URG 标志什么意思?

0 commit comments

Comments
 (0)