1. 網站上傳圖片總是被限制大小,網站已設置了,還不行,linux雲主機上該如何設置
web伺服器裡面設置參數上傳大小
或者程序上設置參數 上傳大小限制
2. 如何設置網卡的MTU大於1500-Linux系統管理
1.本地MTU值大於網路MTU值時,老敬本地傳輸的數據包過大導致網路會拆包後傳輸,不但產生額外的數據包,而且消耗了「拆包、組包」的時間 。
2.本地MTU值小於網路MTU值時,本地傳輸的數據包可以直接傳輸,但是未能完全利用網路給予的數據包傳輸尺寸的上限值,傳輸能力未完全發揮 。
這樣我們就知道:
所謂合理的設置MTU值,就是讓本地的MTU值與網路的MTU值一致,既能完整發揮傳輸性能,又不讓數據包拆分。
Linux OS:
ping -s 1472 -M do 172.21.0.118
含義:
發送大小包大小是1472(+28)位元組,禁止路由器拆分數據包。
回復結果:
1.如果正常回復,說明網路允許最大MTU就是1500位元組,與系統默認相同,只需將自己的路由的MTU也設置為1500即可。凳盯
2.如果沒正常回復,說明數據包大小超過了網路限定的MTU大小。需要減小探侍粗慎測包大小再次嘗試。
3. Linux常用網路配置命令
一、查看網路配置
確保網路配置的正確性及網路連接的暢通是Linux系統作為伺服器應用的基礎,查看及測試網路配置是管理Linux網路服務的第一步。
1.ifconfig——查看網路配置
1) 查看所有活動網路介面的信息
執行 ifconfig 或ip addr或ip a命令,都可以顯示當前主機中已啟用(活動)的網路介面信息。、
2) 查看指定網路介面信息
格式:ifconfig 網路介面名
可以通過TX、RX等信息了解到通過該網路介面發送和接收的數據包個數,流量等跟多屬性。
2.hostname命令
在Linux系統中,相當一部分網路服務都會通過主機名來識別本機,如果主機名配置不當,可能會導致程序功能出現故障。
1) 查看主機名
使用hostname命令就可以查看當前主機的主機名,不添加任何選項參數。
2) 臨時更改主機名
hostname NewName
註:這種方法只是臨時的更改主機名,重啟後將失效。
3) 永久更改主機名
a. 修改配置文件
RHEL6和7的配置文件存放路徑不相同,修改配置文件中的主機名,重啟就可永久更改主機名。
RHEL6主機名配置文件路徑為:/etc/sysconfig/network
RHEL7主機名配置文件路徑為:/etc/hostname
示例
b. 使用命令修改(這種方法只適用於RHEL7或者CentOS7之後)
命令格式:
使用該命令更改後,更改後的主機名就自動寫入了配置文件中,所以可以永久更改主機名,其實就是修改了配置文件。
3.route命令
直接執行route命令可以查看當前主機中的路由表信息,若結合「-n」選項使用,可以將路由記錄中的地址顯示為數字形式,這可以跳過解析主機名的過程,在路由表條目較多的情況下能夠加快執行速度。
Destination列對應的是目標網段的地址,Gateway列對應的是嚇一跳路由器的地址,Iface列對應的是發送數據的網路介面。當目標網段為「default」是,表示此行是默認網關記錄,當嚇一跳為「*」是,表示目標網段是與本機直接相連的。
4.netstat命令——查看系統的網路連接狀態等
netstat命令是了解網路狀態及排除網路服務故障的有效工具。
常用選項:
-a:顯示所有活動連接(包括監聽、非監聽狀態的服務埠)
-n:以數字形式顯示
-p:顯示相關的進程信息
-t:查看 TCP 協議相關信息
-u:查看UDP協議相關信息
-r:顯示路由表信息
-l:顯示處於監聽(listening)狀態的網路連接及埠信息
通常使用「-anput」組合選項,結合管道使用「grep」命令,來查看一些服務的埠是否開啟。
示例:
Tcp21為ftp服務的埠
二、測試網路連接
1.ping命令——測試網路連通性
常用選項:
-c<完成次數>:設置完成要求回應的次數
-i<間隔秒數>:指定收發信息的間隔時間
-q:不顯示指令執行過程,開頭和結尾的相關信息除外
-s<數據包大小>:設置數據包的大小
-t<存活數值>:設置存活數值TTL的大小
-v:詳細顯示指令的執行過程
若返回「Destination Host Unreachable」的反饋信息,則表示目標主機不可達,可能目標地址不存在或主機已關閉;返回「Network is unreachable」的反饋信息,則表示沒有可用的路由記錄(如默認網關),無法到達目標主機所在的網路;返回「Request timeout」的反饋信息,表示與目標主機間的連接超時(數據包緩慢或丟失),若有嚴格的防火牆限制,也可能返回此信息。
2.traceroute命令——跟蹤數據包的路由途徑
使用traceroute命令可以測試從當前主機到目的主機之間經過的網路節點,並顯示各中間結點的連接狀態(響應時間)。對於無法響應的節點,連接狀態將顯示為「*」。
示例:traceroute IP_ADDR
在網路測試與排錯的過程中,通常會先使用ping命令測試與主機的網路連接,如果發現網路有故障,再使用traceroute命令跟蹤查看是在哪個中間結點存在故障。
3.nslookup命令——測試DNS域名解析
nslookup是用來測試(DNS)域名解析的專用工具。(DNS服務後面再詳細講解,通俗的說就是將域名解析為ip地址的一個服務)
示例:nslookup www..com
若成功反饋要查詢域名的IP地址,則表示域名解析沒有問題;若出現「...... no servers could be reached」的信息,表示不能連接到指定的DNS伺服器;若出現「...... cant』t find xxx.yyy.zzz:NXDOMAIN」的信息,表示要查詢的域名不存在。
三、設置網路地址參數
設置網路參數的方法:
• 臨時配置 —— 使用命令調整網路參數簡單、快速,可直接修改運行中的網路參數
一般只適合在調試網路的過程中使用
系統重啟以後,所做的修改將會失效
• 永久配置 —— 通過配置文件修改網路參數修改各項網路參數的配置文件
適合對伺服器設置固定參數時使用
需要重載網路服務或者重啟以後才會生效
1.臨時配置——使用網路配置命令(註:RHEL6中網路介面的名稱為eth,RHEL7中為ens)
1)使用ifconfig命令修改網卡的地址、狀態
ifconfig命令不僅可以用於查看網卡配置,還可以修改網卡的ip地址,子網掩碼,也可以綁定網路介面、激活或停用網路介面
a. 修改網卡的ip地址(臨時修改)
命令格式:
示例:
b. 禁用或者重新激活網卡
命令格式:
示例:
c. 設置虛擬網路介面(相當於一塊網卡配置多個IP地址)
命令格式:
示例:
可以根據需要添加更多的虛擬介面,如「eth0:1」「eth0:2」等
2)使用route命令添加、刪除靜態路由記錄
• 刪除路由表中的默認網關記錄命令格式:route del default gw IP地址
• 向路由表中添加默認網關記錄命令格式:route add default gw IP地址
• 添加到指定網段的路由記錄命令格式:route add -net 網段地址 gw IP地址
• 刪除到指定網段的路由記錄命令格式:router del -net 網段地址
2.永久配置——修改網路配置文件
1)網路介面配置文件
網路介面的配置文件默認位於目錄「/etc/sysconfig/network-scripts/」中,文件名格式為:「ifcfg-XXX」,其中「XXX」是網路介面的名稱。例如:RHEL6中網卡eth0的配置文件是「ifcfg-eth0」,而RHEL7中網卡ens33的配置文件是「ifcfg-ens33」。
在網卡的配置文件中,可以看到靜態IP地址的部分內容如下圖所示:
上述個配置項的含義及作用:(圖示為RHEL6中的配置文件,7中也差不多,換湯不換葯,修改的都差不多)
• DEVICE:設置網路介面的名稱ONBOOT:設置網路介面是否在Linux系統啟動時激活BOOTPROTO:設置網路介面的配置方式,值為static時表示使用靜態ip地址,為dhcp時表示通過dhcp的方式動態獲取ip地址IPADDR:設置網路介面的ip地址NETMASK:設置網路介面的子網掩碼GATEWAY:設置網路介面的默認網關地址2)重啟 network 網路服務
當修改了網路介面的配置文件以後,若要使新的配置生效,可以重啟network服務或者重啟主機或者禁用、啟用網路介面。
示例:
• RHEL6中重啟network服務:service network restartRHEL7中重啟network服務:systemctl restart network註:這是我在做實驗時候的一個經驗:RHEL6修改完網卡配置重啟後,ip地址仍然沒有改過來,這時候我們經常會刪除「/etc/udev/rules.d/70-persistent-net.rules」這個文件。RHEL7不用管,RHEL7特別好改,RHEL6改的時候特別難受。(個人提示,不求認同)
3)域名解析配置文件
a.指定為本機提供DNS解析的伺服器地址
/etc/resolv.conf文件中記錄了本機默認使用的DNS伺服器的地址信息,對該文件所做的修改將會立刻生效。Linux系統中最多可以指定3個(第3個以後將被忽略)不同的DNS伺服器地址,優先使用第1個DNS伺服器。
示例:
其中「search localdomain」用來設置默認的搜索域(域名後綴)。例如,當訪問主機「localhost」時,就相當於訪問「localhost.localdomain」。
b.本地主機映射文件
/etc/hosts文件中記錄著一份主機名與ip地址的映射關系表,一般用來保存經常訪問的主機信息。當訪問一個未知的域名時,先查找該文件中是否有相應的映射記錄,如果找不到在去向DNS伺服器查詢。
hosts 文件和 DNS 伺服器的比較
• 默認情況下,系統首先從 hosts 文件查找解析記錄hosts 文件只對當前的主機有效hosts 文件可減少 DNS 查詢過程,從而加快訪問速度
4. 我的linux伺服器開啟著http 服務,但是網卡的接收數據包不大,發送的數據包非常的大,怎麼解決呀
你網路是怎麼一個結構。
公網->路由->linux伺服器
公網->linux服改備告務器
如果中間有個路由,可以設置一下上下行流量核明
如果直接接到linux伺服器上,不知道你是神馬linux.iptables也可以限制上下行流量
納悶,難道你接滾纖公網中間不加台防火牆嗎?
其實最好的方法還是抓包分析一下具體在干嗎。然後過濾掉無用的包。
5. linux系統,如何設置最大網路連接數量
linux設置最大網路連接數量有很多中方法:
1、直接用ulimit命令
ulimit -n 8192
2、修改/proc/sys/net/ipv4/ip_conntrack_max為8192
或者是/etc/sysctl.conf中加入ip_conntrack_max=8192
3、請首先編輯/usr/include/bits/types.h 文件,改變__FD_SETSIZE 的值:
#define _ _FD_SETSIZE 8192
下一步,使用這個命令增加內核文件描述符的限制:
# echo 8192 > /proc/sys/fs/file-max
最後,增加進程文件描述符的限制,在即將編譯squid 的同一個shell 里執行:
sh# ulimit -Hn 8192
6. dos命令下 如何定義ping 下發送數據包的大小Linux是ping -s 後面加入選項即
PING命令的每個參數意思和頃叢臘使用。
ping[-t][-a][-ncount][-llength][-f][-ittl][-vtos][-rcount][-scount][-jcomputer-list]|[-kcomputer-list][-wtimeout]destination-list
-t Ping指定的計算機直到中斷。
-a 將地址解析為計算機名。
-ncount發送count指定的ECHO數據包數。默認值為4。
-l雀滑length發送包含由length指定的數據量的ECHO數據包。默認為32位元組;最大值是65,527。
-f在數據包中發送"不要分段"鄭薯標志。數據包就不會被路由上的網關分段。
-ittl將"生存時間"欄位設置為ttl指定的值。
-vtos將"服務類型"欄位設置為tos指定的值。
-rcount在"記錄路由"欄位中記錄傳出和返回數據包的路由。count可以指定最少1台,最多9台計算機。
-scount指定count指定的躍點數的時間戳。
-jcomputer-list利用computer-list指定的計算機列表路由數據包。連續計算機可以被中間網關分隔(路由稀疏源)IP允許的最大數量為9。
-kcomputer-list利用computer-list指定的計算機列表路由數據包。連續計算機不能被中間網關分隔(路由嚴格源)IP允許的最大數量為9。
-wtimeout指定超時間隔,單位為毫秒。
destination-list指定要ping的遠程計算機。
所以應該是 ping-l1024 格式
運行結果如下:
7. Linux——網路配置命令
一、ifconfig
自ubuntu17起,已經不提供這個命令了,要自動安裝
sudo apt install net-tools
ifconfig -a :查看當前系統所有的網路介面
ifconfig interface(PS:這里是網路介面的名稱) down:禁用當前網路介面
ifconfig interface up :啟用網路介面
二、ip命令
1、管理網路介面
1)、ip link list 顯示網路設備的運行狀態
2)、ip -s link list 顯示更詳細的網路設備運行狀態
4)、ip link set dev ens33 mtu 1600: 改變網路設備最大傳輸單元 MTU的值為1600
2、管理ip地址
1)、ip a show dev ens33 顯示指定網路介面的ip
2)、ip addr ls ens33
5)、ip -4 addr flush ens33
通過id修改的ip地址重啟後會消失。如果要永久保存,則需要修改配置文件
3、管理路由表
1)、ip route show 顯示main 路由表的路由信息
每行定義一個路由表,前面的數字為路由編號,後面為路由名稱
以上的幾個路由表為默認路由表,用戶不可以修改
默認所有的路由表都會被插入到254的main表中。在進行路由查詢時,內核只使用路由表main
3)、ip route show table local 指定顯示路由表
4、管理策略路由
1)、ip route list 列出當前系統的策略路由規則
2、添加一條到達網路224.0.0.0/28的路由
route add -net 224.0.0.0/28 netmask 224.0.0.0 dev docker0
3、刪除指定的路由記錄224.0.0.0
route del -net 224.0.0.0 netmask 224.0.0.0
route -n 查看路由
5、刪除默認網關
route del default gw 172.17.0.0 dev docker0
route -n
四、netstat命令
1、netstat(network status) 查看各種網路信息的,包括網路連接、路由表以及網路介面的各種統計數據
netstat [options]
常用的幾個選項:
-a :顯示所有處於活動狀態的套接字
-t :顯示TCP/IP協議的連接信息
-l:列出所有處於監聽狀態的套接字
-n:直接顯示ip地址,不轉換成域名
-i :列出所有的網路介面
-p:顯示使用套接字的進程id和程序名
-r:顯示路由表信息
2、netstat -a
顯示所有的埠,包含未監聽的和監聽的
3、nestat -at
只顯示TCP/IP協議的連接
4、netstat -tl
只顯示處於監聽狀態的TCP連接
5、netstat -tlanx
顯示數字形式的ip地址
6、netstat -anp | grep ":80"
排查處於某個埠被佔用導致伺服器無法啟動
7、netstat -i
列出當前系統的所有網路介面
8、netstat -r
查看路由表信息
該命令是向某台主機( www..com )發送ICMP數據包,並接收響應
Ctrl+C退出ping 命令
8. linux下怎麼設置tcp
Socket的send函數在執行時報EAGAIN的錯誤 當客戶通過Socket提供的send函數發送大的數據包時,就可能返回一個EGGAIN的錯誤。該錯誤產生的原因是由於send 函數中的size變數大小超過了tcp_sendspace的值。tcp_sendspace定義了應用在調用send之前能夠在kernel中緩存的數據量。當應用程序在socket中設置了O_NDELAY或者O_NONBLOCK屬性後,如果發送緩存被占滿,send就會返回EAGAIN的錯誤。 為了消除該錯誤,有三種方法可以選擇: 1.調大tcp_sendspace,使之大於send中的size參數 ---no -p -o tcp_sendspace=65536 2.在調用send前,在setsockopt函數中為SNDBUF設置更大的值 3.使用write替代send,因為write沒有設置O_NDELAY或者O_NONBLOCK 1. tcp 收發緩沖區默認值 [root@qljt core]# cat /proc/sys/net/ipv4/tcp_rmem 4096 87380 4161536 87380 :tcp接收緩沖區的默認值 [root@qljt core]# cat /proc/sys/net/ipv4/tcp_wmem 4096 16384 4161536 16384 : tcp 發送緩沖區的默認值 2. tcp 或udp收發緩沖區最大值 [root@qljt core]# cat /proc/sys/net/core/rmem_max 131071 131071:tcp 或 udp 接收緩沖區最大可設置值的一半。 也就是說調用 setsockopt(s, SOL_SOCKET, SO_RCVBUF, &rcv_size, &optlen); 時rcv_size 如果超過 131071,那麼 getsockopt(s, SOL_SOCKET, SO_RCVBUF, &rcv_size, &optlen); 去到的值就等於 131071 * 2 = 262142 [root@qljt core]# cat /proc/sys/net/core/wmem_max 131071 131071:tcp 或 udp 發送緩沖區最大可設置值得一半。 跟上面同一個道理 3. udp收發緩沖區默認值 [root@qljt core]# cat /proc/sys/net/core/rmem_default 111616:udp接收緩沖區的如虛賀默認值 [root@qljt core]# cat /proc/sys/net/core/wmem_default 111616 111616:udp發送緩沖區的默認值 . tcp 或udp收發緩沖區最渣派小值 tcp 或udp接收緩沖區的最小值為 256 bytes,由內核的宏決定; tcp 或udp發送緩沖區的最小值為 2048 bytes,由內核的宏決定 setsockopt設置socket狀態 1.closesocket(一般不會立即關閉而經歷TIME_WAIT的過程)後想繼續重用該socket: BOOL bReuseaddr=TRUE; setsockopt(s,SOL_SOCKET ,SO_REUSEADDR,(const char*)&bReuseaddr,sizeof(BOOL)); 2. 如果要已經處於連接狀態的soket在調用譽仿closesocket後強制關閉,不經歷TIME_WAIT的過程: BOOL bDontLinger = FALSE; setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLinger,sizeof(BOOL)); 3.在send(),recv()過程中有時由於網路狀況等原因,發收不能預期進行,而設置收發時限: int nNetTimeout=1000;//1秒 //發送時限 setsockopt(socket,SOL_S0CKET,SO_SNDTIMEO,(char *)&nNetTimeout,sizeof(int)); //接收時限 setsockopt(socket,SOL_S0CKET,SO_RCVTIMEO,(char *)&nNetTimeout,sizeof(int)); 4.在send()的時候,返回的是實際發送出去的位元組(同步)或發送到socket緩沖區的位元組(非同步);系統默認的狀態發送和接收一次為8688位元組(約為8.5K);在實際的過程中發送數據 和接收數據量比較大,可以設置socket緩沖區,而避免了send(),recv()不斷的循環收發: // 接收緩沖區 int nRecvBuf=32*1024;//設置為32K setsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int)); //發送緩沖區 int nSendBuf=32*1024;//設置為32K setsockopt(s,SOL_SOCKET,SO_SNDBUF,(const char*)&nSendBuf,sizeof(int)); 5. 如果在發送數據的時,希望不經歷由系統緩沖區到socket緩沖區的拷貝而影響程序的性能: int nZero=0; setsockopt(socket,SOL_S0CKET,SO_SNDBUF,(char *)&nZero,sizeof(nZero)); 6.同上在recv()完成上述功能(默認情況是將socket緩沖區的內容拷貝到系統緩沖區): int nZero=0; setsockopt(socket,SOL_S0CKET,SO_RCVBUF,(char *)&nZero,sizeof(int)); 7.一般在發送UDP數據報的時候,希望該socket發送的數據具有廣播特性: BOOL bBroadcast=TRUE; setsockopt(s,SOL_SOCKET,SO_BROADCAST,(const char*)&bBroadcast,sizeof(BOOL)); 8.在client連接伺服器過程中,如果處於非阻塞模式下的socket在connect()的過程中可以設置connect()延時,直到accpet()被呼叫(本函數設置只有在非阻塞的過程中有顯著的 作用,在阻塞的函數調用中作用不大) BOOL bConditionalAccept=TRUE; setsockopt(s,SOL_SOCKET,SO_CONDITIONAL_ACCEPT,(const char*)&bConditionalAccept,sizeof(BOOL)); 9.如果在發送數據的過程中(send()沒有完成,還有數據沒發送)而調用了closesocket(),以前我們一般採取的措施是"從容關閉"shutdown(s,SD_BOTH),但是數據是肯定丟失了,如何設置讓程序滿足具體應用的要求(即讓沒發完的數據發送出去後在關閉socket)? struct linger { u_short l_onoff; u_short l_linger; }; linger m_sLinger; m_sLinger.l_onoff=1;//(在closesocket()調用,但是還有數據沒發送完畢的時候容許逗留) // 如果m_sLinger.l_onoff=0;則功能和2.)作用相同; m_sLinger.l_linger=5;//(容許逗留的時間為5秒) setsockopt(s,SOL_SOCKET,SO_LINGER,(const char*)&m_sLinger,sizeof(linger)); 設置套介面的選項。 #include <winsock.h> int PASCAL FAR setsockopt( SOCKET s, int level, int optname, const char FAR* optval, int optlen); s:標識一個套介面的描述字。 level:選項定義的層次;目前僅支持SOL_SOCKET和IPPROTO_TCP層次。 optname:需設置的選項。 optval:指針,指向存放選項值的緩沖區。 optlen:optval緩沖區的長度。 注釋: setsockopt()函數用於任意類型、任意狀態套介面的設置選項值。盡管在不同協議層上存在選項,但本函數僅定義了最高的「套介面」層次上的選項。選項影響套介面的操作,諸如加急數據是否在普通數據流中接收,廣播數據是否可以從套介面發送等等。 有兩種套介面的選項:一種是布爾型選項,允許或禁止一種特性;另一種是整形或結構選項。允許一個布爾型選項,則將optval指向非零整形數;禁止一個選項optval指向一個等於零的整形數。對於布爾型選項,optlen應等於sizeof(int);對其他選項,optval指向包含所需選項的整形數或結構,而optlen則為整形數或結構的長度。SO_LINGER選項用於控制下述情況的行動:套介面上有排隊的待發送數據,且 closesocket()調用已執行。參見closesocket()函數中關於SO_LINGER選項對closesocket()語義的影響。應用程序通過創建一個linger結構來設置相應的操作特性: struct linger { int l_onoff; int l_linger; }; 為了允許SO_LINGER,應用程序應將l_onoff設為非零,將l_linger設為零或需要的超時值(以秒為單位),然後調用setsockopt()。為了允許SO_DONTLINGER(亦即禁止SO_LINGER),l_onoff應設為零,然後調用setsockopt()。 預設條件下,一個套介面不能與一個已在使用中的本地地址捆綁(參見bind())。但有時會需要「重用」地址。因為每一個連接都由本地地址和遠端地址的組合唯一確定,所以只要遠端地址不同,兩個套介面與一個地址捆綁並無大礙。為了通知WINDOWS套介面實現不要因為一個地址已被一個套介面使用就不讓它與另一個套介面捆綁,應用程序可在bind()調用前先設置SO_REUSEADDR選項。請注意僅在bind()調用時該選項才被解釋;故此無需(但也無害)將一個不會共用地址的套介面設置該選項,或者在bind()對這個或其他套介面無影響情況下設置或清除這一選項。 一個應用程序可以通過打開SO_KEEPALIVE選項,使得WINDOWS套介面實現在TCP連接情況下允許使用「保持活動」包。一個WINDOWS套介面實現並不是必需支持「保持活動」,但是如果支持的話,具體的語義將與實現有關,應遵守RFC1122「Internet主機要求-通訊層」中第 4.2.3.6節的規范。如果有關連接由於「保持活動」而失效,則進行中的任何對該套介面的調用都將以WSAENETRESET錯誤返回,後續的任何調用將以WSAENOTCONN錯誤返回。 TCP_NODELAY選項禁止Nagle演算法。Nagle演算法通過將未確認的數據存入緩沖區直到蓄足一個包一起發送的方法,來減少主機發送的零碎小數據包的數目。但對於某些應用來說,這種演算法將降低系統性能。所以TCP_NODELAY可用來將此演算法關閉。應用程序編寫者只有在確切了解它的效果並確實需要的情況下,才設置TCP_NODELAY選項,因為設置後對網路性能有明顯的負面影響。TCP_NODELAY是唯一使用IPPROTO_TCP層的選項,其他所有選項都使用SOL_SOCKET層。 如果設置了SO_DEBUG選項,WINDOWS套介面供應商被鼓勵(但不是必需)提供輸出相應的調試信息。但產生調試信息的機制以及調試信息的形式已超出本規范的討論范圍。 setsockopt()支持下列選項。其中「類型」表明optval所指數據的類型。 選項 類型 意義 SO_BROADCAST BOOL 允許套介面傳送廣播信息。 SO_DEBUG BOOL 記錄調試信息。 SO_DONTLINER BOOL 不要因為數據未發送就阻塞關閉操作。設置本選項相當於將SO_LINGER的l_onoff元素置為零。 SO_DONTROUTE BOOL 禁止選徑;直接傳送。 SO_KEEPALIVE BOOL 發送「保持活動」包。 SO_LINGER struct linger FAR* 如關閉時有未發送數據,則逗留。 SO_OOBINLINE BOOL 在常規數據流中接收帶外數據。 SO_RCVBUF int 為接收確定緩沖區大小。 SO_REUSEADDR BOOL 允許套介面和一個已在使用中的地址捆綁(參見bind())。 SO_SNDBUF int 指定發送緩沖區大小。 TCP_NODELAY BOOL 禁止發送合並的Nagle演算法。 setsockopt()不支持的BSD選項有: 選項名 類型 意義 SO_ACCEPTCONN BOOL 套介面在監聽。 SO_ERROR int 獲取錯誤狀態並清除。 SO_RCVLOWAT int 接收低級水印。 SO_RCVTIMEO int 接收超時。 SO_SNDLOWAT int 發送低級水印。 SO_SNDTIMEO int 發送超時。 SO_TYPE int 套介面類型。 IP_OPTIONS 在IP頭中設置選項。 返回值: 若無錯誤發生,setsockopt()返回0。否則的話,返回SOCKET_ERROR錯誤,應用程序可通過WSAGetLastError()獲取相應錯誤代碼。 錯誤代碼: WSANOTINITIALISED:在使用此API之前應首先成功地調用WSAStartup()。 WSAENETDOWN:WINDOWS套介面實現檢測到網路子系統失效。 WSAEFAULT:optval不是進程地址空間中的一個有效部分。 WSAEINPROGRESS:一個阻塞的WINDOWS套介面調用正在運行中。 WSAEINVAL:level值非法,或optval中的信息非法。 WSAENETRESET:當SO_KEEPALIVE設置後連接超時。 WSAENOPROTOOPT:未知或不支持選項。其中,SOCK_STREAM類型的套介面不支持SO_BROADCAST選項,SOCK_DGRAM 類型的套介面不支持SO_DONTLINGER 、SO_KEEPALIVE、SO_LINGER和SO_OOBINLINE選項。 WSAENOTCONN:當設置SO_KEEPALIVE後連接被復位。 WSAENOTSOCK:描述字不是一個套介面。
9. Linux中的網路配置怎麼設置
設置網路地址:
cat/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=statics
HWADDR=00:0C:29:13:D1:6F
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.0.212
NETMASK=255.255.255.0
BOOTPROTO=statics :表示使用靜態IP地址
ONBOOT=yes:表示開機時,啟動這個網卡。
取動態IP地址地址
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=dhcp
設置好IP地址,現在還不能生效哦,要重新啟動網卡才可以。
Ifconfig <網路介面名稱> network <子網掩碼>
例:# ifconfig eth0 192.168.1.222 netmask 255.255.255.0
註:手工配置linux網路只限於臨時使用,配置不保存。
擴展:# ifconfig eth0:1 10.0.0.1 netmask 255.0.0.0 一塊網卡配置多個子ip地址。
# ifconfig eth0 hw ether MAC地址 修改網卡的mac地址,
#/etc/rc.d/init.d/networkstart啟動network
#/etc/rc.d/init.d/networkstop停止network
#/etc/rc.d/init.d/networkrestart重啟network
主機名稱配置文件,修改主機名
/etc/sysconfig/network
例:# vi /etc/sysconfig/network 使用vi編輯器打開主機名配置文件。
#vi/etc/sysconfig/network
NETWORKING=yes 網路是否可用。
HOSTNAME=xxxx xxxx為新設置的主機名。
本地主機名稱解析文件
/etc/hosts
Hosts 和 DNS具有類似的主機名稱解析功能
域名伺服器配置文件
/etc/resolv.conf
最多可以設置3行,前面的生效 有些看似很復雜的操作,可能幾個命令就解決了,建議多學習些Linux命令
10. 在Linux系統中數據如何發送
從網路設備驅動程序的結構分析可知,Linux網路子系統在發送數據包時,會調用驅動程序提供的hard_start_transmit()函數,該函數用於啟動數據包的發送。在設備初始化的時候,這個函數指針需被初始化以指向設備的xxx_tx ()函數。網路設備驅動完成數據包發送的流程如下:
1)網路設備驅動程燃凳吵序從上層協議傳遞過來的sk_buff參數獲得數據包的有效數據和長度,將有效數據放入臨時緩沖區。
2)對於乙太網,如果有效數據的長度小於乙太網沖突檢測所要求數據幀的最小長度ETH ZLEN,則給臨時緩沖區的末尾填充0。
3)設置硬體的寄存器,驅使網路設備進行數據發送操作。
特別要強調對netif_ stop_queue()的調用,當發送隊列為滿或因其他原因來不及發送當前上層傳下來的數據包時,則調用此函數阻止上層繼續向網路設備驅動傳遞數據包。當忙於發送的數據包被發送完成後,在以TX結束的中斷處理中,應該調用netif_wake_queue ()喚醒被阻塞的上層,以啟動它繼續向網路設備驅動傳送數據包。當數皮侍據傳輸超時時,意味著當前的發送操作失敗或硬體已陷入未知狀態,此時,數據包發送超時處理函數xxx _tx _timeout ()將被調粗孫用。這個函數也需要調用由Linux內核提供的netif_wake _queue()函數以重新啟動設備發送隊列。