日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

php socket keepalive,linux keepalive探测对应用层socket api的影响

發(fā)布時(shí)間:2024/7/23 linux 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 php socket keepalive,linux keepalive探测对应用层socket api的影响 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

問(wèn)題

大部分人都知道tcp的keepalive. 假設(shè)讀者知道keepalive會(huì)如何觸發(fā). 這篇文章想討論keepalive觸發(fā)后, 對(duì)socket使用者的影響.

keepalive設(shè)置

修改/etc/sysctl.conf

ubuntu# vim /etc/sysctl.conf

ubuntu# sysctl -p

fs.file-max = 131072

net.ipv4.tcp_keepalive_time = 10

net.ipv4.tcp_keepalive_intvl = 5

net.ipv4.tcp_keepalive_probes = 3

驗(yàn)證

ubuntu# sysctl -a | grep keepalive

net.ipv4.tcp_keepalive_intvl = 5

net.ipv4.tcp_keepalive_probes = 3

net.ipv4.tcp_keepalive_time = 10

tcp_server.py

import socket

import sys

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

server_address = ('localhost', 22345)

sock.bind(server_address)

sock.listen(1)

connection, client_address = sock.accept()

while True:

data = connection.recv(1024)

print("data", data)

tcp_client.py

import socket

import sys

import time

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)

server_address = ('localhost', 22345)

sock.connect(server_address)

time.sleep(999999999)

可以看到, 因?yàn)閠cp_client開(kāi)啟了SO_KEEPALIVE, 所以tcp_client主動(dòng)往tcp_server發(fā)起KEEPALIVE探測(cè).

若tcp_server開(kāi)啟SO_KEEPALIVE, 則是tcp_server往tcp_client發(fā)送KEEPALIVE探測(cè).

如果tcp_server/tcp_client都開(kāi)啟KEEPALIVE, 則會(huì)雙向探測(cè).

對(duì)應(yīng)用層socket api的影響

準(zhǔn)備工作

為了模擬keepalive生效的情況, 用docker模擬斷網(wǎng)線(xiàn)的情況.

準(zhǔn)備好安裝有docker, python, vim, tcpdump的ubuntu鏡像, 創(chuàng)建好docker 網(wǎng)絡(luò).

跑起來(lái), 修改heartbeat設(shè)置.

ubuntu# sudo docker run -it \

--volume=//home/enjolras/code_repo/python/keepalive_test://home/enjolras/code_repo/python/keepalive_test \

--detach=true \

--name=tcp_server \

--privileged=true \

--network=multi-host-network \

ubuntu_with_python

08f89dcff3547bb15c7aed975dfa5a0821e4d0246d6d812e02fd1470f3cef6c3

ubuntu# sudo docker run -it \

--volume=//home/enjolras/code_repo/python/keepalive_test://home/enjolras/code_repo/python/keepalive_test \

--detach=true \

--name=tcp_client \

--privileged=true \

--network=multi-host-network \

ubuntu_with_python

對(duì)阻塞式send/recv的影響

tcp_server

import socket

import sys

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

server_address = ('0.0.0.0', 22345)

sock.bind(server_address)

sock.listen(1)

connection, client_address = sock.accept()

connection.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)

data = connection.recv(1024)

print("data", data)

tcp_client

import socket

import sys

import time

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)

server_address = ('tcp_server', 22345)

sock.connect(server_address)

time.sleep(999999999)

send/recv會(huì)以異常/錯(cuò)誤碼方式得知 heartbeat 檢測(cè)到的鏈接斷開(kāi).

可以看到, tcp_server/tcp_client互發(fā)心跳.

root@0b3f1ee81446:/# tcpdump -i any port 22345

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on any, link-type LINUX_SLL (Linux cooked), capture size 262144 bytes

12:29:34.491239 IP tcp_client.multi-host-network.57130 > 0b3f1ee81446.22345: Flags [S], seq 2347845399, win 28200, options [mss 1410,sackOK,TS val 951128354 ecr 0,nop,wscale 7], length 0

12:29:34.491279 IP 0b3f1ee81446.22345 > tcp_client.multi-host-network.57130: Flags [S.], seq 1169988006, ack 2347845400, win 27960, options [mss 1410,sackOK,TS val 2298965862 ecr 951128354,nop,wscale 7], length 0

12:29:34.491299 IP tcp_client.multi-host-network.57130 > 0b3f1ee81446.22345: Flags [.], ack 1, win 221, options [nop,nop,TS val 951128354 ecr 2298965862], length 0

12:29:44.666952 IP 0b3f1ee81446.22345 > tcp_client.multi-host-network.57130: Flags [.], ack 1, win 219, options [nop,nop,TS val 2298976038 ecr 951128354], length 0

12:29:44.666969 IP tcp_client.multi-host-network.57130 > 0b3f1ee81446.22345: Flags [.], ack 1, win 221, options [nop,nop,TS val 951138530 ecr 2298965862], length 0

12:29:44.666978 IP 0b3f1ee81446.22345 > tcp_client.multi-host-network.57130: Flags [.], ack 1, win 219, options [nop,nop,TS val 2298976038 ecr 951128354], length 0

12:29:44.666987 IP tcp_client.multi-host-network.57130 > 0b3f1ee81446.22345: Flags [.], ack 1, win 221, options [nop,nop,TS val 951138530 ecr 2298976038], length 0

12:29:54.907019 IP 0b3f1ee81446.22345 > tcp_client.multi-host-network.57130: Flags [.], ack 1, win 219, options [nop,nop,TS val 2298986278 ecr 951138530], length 0

12:29:54.907054 IP tcp_client.multi-host-network.57130 > 0b3f1ee81446.22345: Flags [.], ack 1, win 221, options [nop,nop,TS val 951148770 ecr 2298976038], length 0

12:29:54.907059 IP tcp_client.multi-host-network.57130 > 0b3f1ee81446.22345: Flags [.], ack 1, win 221, options [nop,nop,TS val 951148770 ecr 2298976038], length 0

12:29:54.907062 IP 0b3f1ee81446.22345 > tcp_client.multi-host-network.57130: Flags [.], ack 1, win 219, options [nop,nop,TS val 2298986278 ecr 951138530], length 0

將tcp_server/tcp_client斷網(wǎng).

ubuntu# docker network disconnect multi-host-network tcp_client

可以看到tcp_server在連續(xù)3個(gè)探測(cè)包沒(méi)有回復(fù)后, 往tcp_client發(fā)了一個(gè)RST.

12:31:47.547010 IP tcp_client.multi-host-network.57130 > 0b3f1ee81446.22345: Flags [.], ack 1, win 221, options [nop,nop,TS val 951261408 ecr 2299088676], length 0

12:31:47.547019 IP 0b3f1ee81446.22345 > tcp_client.multi-host-network.57130: Flags [.], ack 1, win 219, options [nop,nop,TS val 2299098916 ecr 951251168], length 0

12:31:47.547061 IP tcp_client.multi-host-network.57130 > 0b3f1ee81446.22345: Flags [.], ack 1, win 221, options [nop,nop,TS val 951261408 ecr 2299098916], length 0

12:31:57.787226 IP 0b3f1ee81446.22345 > tcp_client.multi-host-network.57130: Flags [.], ack 1, win 219, options [nop,nop,TS val 2299109156 ecr 951261408], length 0

12:32:02.906612 IP 0b3f1ee81446.22345 > tcp_client.multi-host-network.57130: Flags [.], ack 1, win 219, options [nop,nop,TS val 2299114276 ecr 951261408], length 0

12:32:08.026829 IP 0b3f1ee81446.22345 > tcp_client.multi-host-network.57130: Flags [.], ack 1, win 219, options [nop,nop,TS val 2299119396 ecr 951261408], length 0

12:32:13.146776 IP 0b3f1ee81446.22345 > tcp_client.multi-host-network.57130: Flags [R.], seq 1, ack 1, win 219, options [nop,nop,TS val 2299124516 ecr 951261408], length 0

可以看到, 在心跳機(jī)制檢測(cè)到socket狀態(tài)異常后, 會(huì)通過(guò)異常/錯(cuò)誤碼等方式通知調(diào)用者.

3f1ee81446:/home/enjolras/code_repo/python/keepalive_test# python tcp_serv

Traceback (most recent call last):

File "tcp_server.py", line 11, in

data = connection.recv(1024)

socket.error: [Errno 110] Connection timed out

對(duì)select的影響

tcp_server

import socket

import sys

import select

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

server_address = ('0.0.0.0', 22345)

sock.bind(server_address)

sock.listen(1)

connection, client_address = sock.accept()

connection.setsockopt(socket.SOL_SOCKET, socket.SO_KEEPALIVE, 1)

readable, writable, exeptional = select.select([connection], [], [])

print("readable", readable, writable, exeptional)

data = connection.recv(1024)

print("data", data)

對(duì)套接字select返回可讀事件.

3f1ee81446:/home/enjolras/code_repo/python/keepalive_test# python tcp_serv

('readable', [], [], [])

Traceback (most recent call last):

File "tcp_server.py", line 14, in

data = connection.recv(1024)

socket.error: [Errno 110] Connection timed out

對(duì)epoll的影響

不做實(shí)驗(yàn), 應(yīng)該和select一致.

結(jié)論

heartbeat檢測(cè)到tcp鏈接斷開(kāi)后, 會(huì)以可讀事件方式通知應(yīng)用層. 若無(wú)tcp heartbeat, 也無(wú)應(yīng)用層heartbeat, 應(yīng)用層無(wú)法得知鏈接的真實(shí)狀態(tài).

總結(jié)

以上是生活随笔為你收集整理的php socket keepalive,linux keepalive探测对应用层socket api的影响的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 专干老肥女人88av | 久久久18禁一区二区三区精品 | 国产精品无码粉嫩小泬 | 精精国产xxxx视频在线 | 亚洲黄色大片 | 一区二区三区亚洲 | 国产日韩欧美自拍 | 久久精品欧美一区二区三区麻豆 | 亚洲国产精品成人久久蜜臀 | 91精品国产闺蜜国产在线闺蜜 | 九热这里只有精品 | 风间由美一二三区av片 | 国产+高潮+白浆+无码 | 国产精品久久久久久久久久久久 | 久久久无码18禁高潮喷水 | 九草视频在线观看 | 网爆门在线 | www.成人av | 久久综合久久网 | 免费成人看片 | 久久国语精品 | 99青草| 国产美女自拍视频 | 91传媒在线播放 | 欧洲精品久久久久毛片完整版 | 黄色在线资源 | 国产在线色视频 | 免费av影片 | 精产国品一二三区 | 婷婷国产在线 | av中亚 | 天天碰天天碰 | 亚洲AV无码国产日韩久久 | 熟妇人妻av无码一区二区三区 | 综合色天天 | 日韩免费黄色 | av导航福利 | 无限资源日本好片 | proumb性欧美在线观看 | 悟空影视大全免费高清观看在线 | 午夜视频网址 | 亚洲综合免费观看高清完整版在线 | 人妻丰满熟妇岳av无码区hd | 亚洲情侣在线 | 亚洲aa在线观看 | 一区二区三区蜜桃 | 成人国产精品蜜柚视频 | 欧美特一级 | 国产欧美a | 91手机在线播放 | 亚洲激情视频网站 | 熟妇人妻中文av无码 | 春色影视 | 天堂8在线 | 欧美特级黄色录像 | 国产拍拍拍拍拍拍拍拍拍拍拍拍拍 | 亚洲25p| 超碰2023 | h片大全| 双性受孕h堵精大肚生子 | 黄色一级在线观看 | 日韩欧美卡一卡二 | 久久精品视频一区二区三区 | 三级色网| 亚洲生活片 | 黄色网在线 | 色一情一交一乱一区二区三区 | 麻豆国产原创 | 91av小视频| 一级黄色在线 | 成人动漫视频在线观看 | 91精品人妻一区二区三区蜜桃欧美 | 色丁香六月 | 久热只有精品 | jizz国产在线 | 福利午夜视频 | 久久午夜免费视频 | 污网站免费在线观看 | 欧美日韩一二三 | 九九视频在线观看 | 亚洲欧美在线一区二区 | 免费精品| 黄色国产毛片 | 久久99精品国产麻豆婷婷 | 欧美日韩一区二区三区在线观看 | 亚洲精品免费在线视频 | 精品免费国产一区二区三区四区 | 天堂最新资源在线 | 久久av喷吹av高潮av萌白 | 日韩wwww | 操比网站 | 欧美一级免费黄色片 | 你懂的国产 | 看片网站在线观看 | 亚洲va欧美va天堂v国产综合 | 成人手机看片 | 正在播放经典国语对白 | 国产日产欧美一区二区 | 亚洲一区二区观看播放 |