socket通信方式
通常使用的是socket通信模式為c/s模式,就是通過服務端創建連接,并綁定監聽相關的端口,客戶端通過連接至相應的端口,實現使用tcp的三次握手來進行可靠性連接,從而達到數據傳輸。如果對應的客戶端和服務端在同一臺服務器上,因是數據內部通信方式,可直接相連接。但是當我們的客戶端和服務端分別部署在不同的服務器上,有時候會出現客戶端連接的時候提示connect refuse,連接拒絕,的問題。這種情況是因為防火墻開啟(*前提是服務端程序正常啟動,并正常監聽對應的端口*),說明服務端監聽的端口沒有放行,解決方法,而通過關閉防火墻,但是這并不是一種好的方法,因為畢竟防火墻為了保護服務器免予收到外部的攻擊,從而導致服務癱瘓。為了解決該方法,可以將我們需要監聽的端口配置在防火墻配置表里,讓其放行服務監聽的端口,這樣客戶端就能正常的連接至服務端,并開始的數據的發送接收處理。
如何將監聽的端口配置防火墻配置表中,讓其放行端口,如下所示:
(1)可以在/etc/sysconfig/iptables文件中配置將需要放行的端口進行配置,之后重啟防火墻,這樣該端口每次接收連接請求的時候就會進行放行,就不會攔截,導致連接被拒絕的問題。如圖所示:
如上如所示,默認的放行的端口為22,可以將自己使用的端口添加至該文件中,之后重啟防火墻命令:service iptables restart.
(2)直接通過命令行累添加
查看防火墻規則及編號:
iptables -nL --line-number
添加端口命令:
iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 端口號 -j ACCEPT
保存執行的命令:
service iptalbes save
順帶介紹其他的幾個參數的含義:
–A 參數就看成是添加一條規則
–p 指定是什么協議,我們常用的tcp 協議,當然也有udp,例如53端口的DNS
–dport 就是目標端口,當數據從外部進入服務器為目標端口
–sport 數據從服務器出去,則為數據源端口使用
–j 就是指定是 ACCEPT -接收 或者 DROP 不接收
-s 禁止某個IP的訪問:
例如: iptables -A INPUT -p tcp -s 192.168.1.1 -j DROP 表示禁止該IP訪問該服務
-D 刪除某個規則
例如: iptables -D INPUT 2 表示刪除編號為2的規則、
- 還存在一種情況是,頻繁的啟動服務端程序導致系統內核中的文件描述符所占用的端口,尚未被釋放掉,需要等待一段時間釋放改端口的占用,之后再啟動方可成功啟動服務。但是并不能都等待,可在編寫程序的時候,設置socket地址重用,setblockopt該方法設置地址重用。
————————————————
版權聲明:本文為CSDN博主「一顆簡單的心」的原創文章,遵循CC 4.0 by-sa版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_26105397/article/details/82747401