時間戳引發的網站訪問不了的問題

針對有些用戶能ping通咱們的網站,可是鏈接時超時服務器沒有任何響應,懷疑問題處在了了http的三次握手環節,這是決定經過抓包進行分析: web

一、發現問題 vim

從抓包數據發現,web服務器對出問題機器和正常機器系統的tcp syn包都返回ACK包,但存在問題發出的tcp syn包有時候響應,有時候不響應。不響應時,終端與web服務器之間的tcp鏈接沒法正常創建,致使頁面不能打開。對比這兩種數據包,就在時間戳上有差 異,存在問題的機器發出的tcp syn包帶有時間戳,所以懷疑時間戳問題致使的故障。 服務器

二、解決問題 tcp

既然懷疑是時間戳致使的,那咱們就着手分析若是將出現問題的機器的時間戳去掉會不會解決問題。針對帶有時間戳的tcp syn包不響應的問題,查閱了相關資料得知產生問題的緣由是出問題系統中的註冊表中有Tcp1323opts這個選項,會致使其在發包時加入時間戳,通過 nat以後,若是前面相同的端口被使用過,且時間戳大於這個連接發出的syn中的時間戳,服務器上就會忽略掉這個syn,不返會syn-ack消息,表現 爲用戶沒法正常完成tcp3次握手,從而不能打開web頁面。在業務閒時,若是用戶nat的端口沒有被使用過期,就能夠正常打開;業務忙時,nat端口重 復使用的頻率高,很難分到沒有被使用的端口,從而產生這種問題。 網站

解決方法以下: spa

首先咱們先查看一下咱們服務器net.ipv4.tcp_timestamps的默認值,若是該值爲0測說名不是該問題致使,若是是0咱們須要將該值設置爲1。 .net

查看默認值的方法:[root@localhost ~]# cat /proc/sys/net/ipv4/tcp_timestamps ip

修改該值的方法:vim /etc/sysctl.conf  添加 net.ipv4.tcp_timestamps=0 get

值爲0(禁用時間戳) web服務器

值爲1(啓用時間戳)

只有客戶端和服務端都開啓時間戳的狀況下,纔會出現能ping通不能創建tcp三次握手的狀況,因此作爲提供服務的公司,不可能保證全部的用戶都關閉時間戳,這個功能,因此咱們必須關閉時間戳,這樣才能給所用用戶提供正常的服務。

使用該命令使其立馬生效:/sbin/sysctl-p

相關文章
相關標籤/搜索