Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
Socket±à³Ìʵս
 

×÷Õߣºjiacai2050 À´Ô´:51CTO ·¢²¼ÓÚ 2016-11-17

  2941  次浏览      28

SocketÔÚÓ¢ÎÄÖеĺ¬ÒåΪ¡°(Á¬½ÓÁ½¸öÎïÆ·µÄ)°¼²Û¡±£¬Ïñthe eye socket£¬ÒâΪ¡°ÑÛÎÑ¡±£¬´ËÍ⻹ÓС°²å×ù¡±µÄÒâ˼¡£ÔÚ¼ÆËã»ú¿ÆÑ§ÖУ¬socket ͨ³£ÊÇÖ¸Ò»¸öÁ¬½ÓµÄÁ½¸ö¶Ëµã£¬ÕâÀïµÄÁ¬½Ó¿ÉÒÔÊÇͬһ»úÆ÷Éϵģ¬Ïñunix domain socket£¬Ò²¿ÉÒÔÊDz»Í¬»úÆ÷Éϵģ¬Ïñnetwork socket¡£

±¾ÎÄ×ÅÖØ½éÉÜÏÖÔÚÓõÄ×î¶àµÄ network socket£¬°üÀ¨ÆäÔÚÍøÂçÄ£ÐÍÖеÄλÖá¢API µÄ±à³Ì·¶Ê½¡¢³£¼û´íÎóµÈ·½Ã棬×îºóÓà Python ÓïÑÔÖÐµÄ socket API ʵÏÖ¼¸¸öʵ¼ÊµÄÀý×Ó¡£Socket ÖÐÎÄÒ»°ã·­ÒëΪ¡°Ì×½Ó×Ö¡±£¬²»µÃ²»ËµÕâÊǸöÈÃÈËÃþ²»×ÅÍ·ÄԵķ­Ò룬ÎÒҲûÏ뵽ɶ¡°ÐÅ´ïÑÅ¡±µÄ·­Ò룬ËùÒÔ±¾ÎÄÖ±½ÓÓÃÆäÓ¢ÎıíÊö¡£±¾ÎÄÖÐËùÓдúÂë¾ù¿ÉÔÚ socket.py ²Ö¿âÖÐÕÒµ½¡£

¸ÅÊö

Socket ×÷ΪһÖÖͨÓõļ¼Êõ¹æ·¶£¬Ê×´ÎÊÇÓÉ Berkeley ´óѧÔÚ 1983 Ϊ 4.2BSD Unix ÌṩµÄ£¬ºóÀ´Öð½¥ÑÝ»¯Îª POSIX ±ê×¼¡£Socket API ÊÇÓɲÙ×÷ϵͳÌṩµÄÒ»¸ö±à³Ì½Ó¿Ú£¬ÈÃÓ¦ÓóÌÐò¿ÉÒÔ¿ØÖÆÊ¹Óà socket ¼¼Êõ¡£Unix ÕÜѧÖÐÓÐÒ»ÌõÒ»ÇнÔΪÎļþ£¬ËùÒÔ socket ºÍfile µÄ API ʹÓúÜÀàËÆ£º¿ÉÒÔ½øÐÐread¡¢write¡¢open¡¢closeµÈ²Ù×÷¡£

ÏÖÔÚµÄÍøÂçϵͳÊÇ·Ö²ãµÄ£¬ÀíÂÛÉÏÓÐOSIÄ£ÐÍ£¬¹¤Òµ½çÓÐTCP/IPЭÒé´Ø¡£Æä¶Ô±ÈÈçÏ£º

ÿ²ãÉ϶¼ÓÐÆäÏàÓ¦µÄЭÒ飬socket API ²»ÊôÓÚTCP/IPЭÒé´Ø£¬Ö»ÊDzÙ×÷ϵͳÌṩµÄÒ»¸öÓÃÓÚÍøÂç±à³ÌµÄ½Ó¿Ú£¬¹¤×÷ÔÚÓ¦ÓòãÓë´«Êä²ãÖ®¼ä£º

ÎÒÃÇÆ½³£ä¯ÀÀÍøÕ¾ËùʹÓõÄhttpЭÒ飬ÊÕ·¢ÓʼþÓõÄsmtpÓëimap£¬¶¼ÊÇ»ùÓÚ socket API ¹¹½¨µÄ¡£

Ò»¸ö socket£¬°üº¬Á½¸ö±ØÒª×é³É²¿·Ö£º

1. µØÖ·£¬ÓÉ ip Óë ¶Ë¿Ú×é³É£¬Ïñ192.168.0.1:80¡£

2.ЭÒ飬socket ËùÊÇÓõĴ«ÊäЭÒ飬ĿǰÓÐÈýÖÖ£ºTCP¡¢UDP¡¢raw IP¡£

µØÖ·ÓëЭÒé¿ÉÒÔÈ·¶¨Ò»¸ösocket;һ̨»úÆ÷ÉÏ£¬Ö»ÔÊÐí´æÔÚÒ»¸öͬÑùµÄsocket¡£TCP ¶Ë¿Ú 53 µÄ socket Óë UDP ¶Ë¿Ú 53 µÄ socket ÊÇÁ½¸ö²»Í¬µÄ socket¡£

¸ù¾Ý socket ´«ÊäÊý¾Ý·½Ê½µÄ²»Í¬(ʹÓÃЭÒ鲻ͬ)£¬¿ÉÒÔ·ÖΪÒÔÏÂÈýÖÖ£º

1.Stream sockets£¬Ò²³ÆÎª¡°ÃæÏòÁ¬½Ó¡±µÄ socket£¬Ê¹Óà TCP ЭÒ顣ʵ¼ÊͨÐÅǰÐèÒª½øÐÐÁ¬½Ó£¬´«ÊäµÄÊý¾ÝûÓÐÌØ¶¨µÄ½á¹¹£¬ËùÒԸ߲ãЭÒéÐèÒª×Ô¼ºÈ¥½ç¶¨Êý¾ÝµÄ·Ö¸ô·û£¬µ«ÆäÓÅÊÆÊÇÊý¾ÝÊǿɿ¿µÄ¡£

2. Datagram sockets£¬Ò²³ÆÎª¡°ÎÞÁ¬½Ó¡±µÄ socket£¬Ê¹Óà UDP ЭÒ顣ʵ¼ÊͨÐÅǰ²»ÐèÒªÁ¬½Ó£¬Ò»¸öÓÅÊÆÊ± UDP µÄÊý¾Ý°ü×ÔÉíÊǿɷָîµÄ(self-delimiting)£¬Ò²¾ÍÊÇ˵ÿ¸öÊý¾Ý°ü¾Í±êʾÁËÊý¾ÝµÄ¿ªÊ¼Óë½áÊø£¬ÆäÁÓÊÆÊÇÊý¾Ý²»¿É¿¿¡£

3.Raw sockets£¬Í¨³£ÓÃÔÚ·ÓÉÆ÷»òÆäËûÍøÂçÉ豸ÖУ¬ÕâÖÖ socket ²»¾­¹ýTCP/IPЭÒé´ØÖеĴ«Êä²ã(transport layer)£¬Ö±½ÓÓÉÍøÂç²ã(Internet layer)ͨÏòÓ¦Óòã(Application layer)£¬ËùÒÔÕâʱµÄÊý¾Ý°ü¾Í²»»á°üº¬ tcp »ò udp Í·ÐÅÏ¢¡£

Python socket API

Python ÀïÃæÓÃ(ip, port)µÄÔª×éÀ´±íʾ socket µÄµØÖ·ÊôÐÔ£¬ÓÃAF_*À´±íʾЭÒéÀàÐÍ¡£

Êý¾ÝͨÐÅÓÐÁ½×鶯´Ê¿É¹©Ñ¡Ôñ£ºsend/recv »ò read/write¡£read/write ·½Ê½Ò²ÊÇ Java ²ÉÓõķ½Ê½£¬ÕâÀï²»»á¶ÔÕâÖÖ·½Ê½½øÐйý¶àµÄ½âÊÍ£¬µ«ÊÇÐèҪעÒâµÄÊÇ£º

read/write ²Ù×÷µÄ¾ßÓÐ buffer µÄ¡°Îļþ¡±£¬ËùÒÔÔÚ½øÐжÁдºóÐèÒªµ÷ÓÃflush·½·¨È¥ÕæÕý·¢ËÍ»ò¶ÁÈ¡Êý¾Ý£¬·ñÔòÊý¾Ý»áһֱͣÁôÔÚ»º³åÇøÄÚ¡£

TCP socket

TCP socket ÓÉÓÚÔÚͨÏòǰÐèÒª½¨Á¢Á¬½Ó£¬ËùÒÔÆäģʽ½Ï UDP socket ¸ºÔðЩ¡£¾ßÌåÈçÏ£º

ÿ¸öAPI µÄ¾ßÌ庬ÒåÕâÀï²»ÔÚ׸Êö£¬¿ÉÒԲ鿴ÊֲᣬÕâÀï¸ø³ö Python ÓïÑÔµÄʵÏÖµÄ echo server¡£

# echo_server.py 
# coding=utf8
import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# ÉèÖà SO_REUSEADDR ºó,¿ÉÒÔÁ¢¼´Ê¹Óà TIME_WAIT ״̬µÄ socket
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('', 5500))
sock.listen(5)

def handler(client_sock, addr): 
print('new client from %s:%s' % addr)
msg = client_sock.recv(1024)
client_sock.send(msg)
client_sock.close()
print('client[%s:%s] socket closed' % addr)

if __name__ == '__main__':
while 1:
client_sock, addr = sock.accept()
handler(client_sock, addr)

# echo_client.py 
# coding=utf8
import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('', 5500))
sock.send('hello socket world')
print sock.recv(1024)

ÉÏÃæ¼òµ¥µÄecho server ´úÂëÖÐÓÐÒ»µãÐèҪעÒâµÄÊÇ£ºserver ¶ËµÄ socket ÉèÖÃÁËSO_REUSEADDRΪ1£¬Ä¿µÄÊÇ¿ÉÒÔÁ¢¼´Ê¹Óô¦ÓÚTIME_WAIT״̬µÄsocket£¬ÄÇôTIME_WAITÓÖÊÇʲôÒâË¼ÄØ?ºóÃæÔÚ½²½â tcp ״̬±ä¸üͼʱÔÙ×öÏêϸ½éÉÜ¡£

UDP socket

UDP socket server ¶Ë´úÂëÔÚ½øÐÐbindºó£¬ÎÞÐèµ÷ÓÃlisten·½·¨¡£

# udp_echo_server.py 
# coding=utf8
import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# ÉèÖà SO_REUSEADDR ºó,¿ÉÒÔÁ¢¼´Ê¹Óà TIME_WAIT ״̬µÄ socket
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('', 5500))
# ûÓе÷Óà listen

if __name__ == '__main__':
while 1:
data, addr = sock.recvfrom(1024)

print('new client from %s:%s' % addr)
sock.sendto(data, addr)

# udp_echo_client.py
# coding=utf8
import socket

udp_server_addr = ('', 5500)

if __name__ == '__main__':
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
data_to_sent = 'hello udp socket'
try:
sent = sock.sendto(data_to_sent, udp_server_addr)
data, server = sock.recvfrom(1024)
print('receive data:[%s] from %s:%s' % ((data,) + server))
finally:
sock.close()

³£¼ûÏÝÚå

ºöÂÔ·µ»ØÖµ

±¾ÎÄÖÐµÄ echo server ʾÀýÒòΪƪ·ùÏÞÖÆ£¬Ò²ºöÂÔÁË·µ»ØÖµ¡£ÍøÂçͨÐÅÊǸö·Ç³£¸´ÔÓµÄÎÊÌ⣬ͨ³£ÎÞ·¨±£ÕÏͨÐÅË«·½µÄÍøÂç״̬£¬ºÜÓпÉÄÜÔÚ·¢ËÍ/½ÓÊÕÊý¾Ýʱʧ°Ü»ò²¿·Öʧ°Ü¡£ËùÒÔÓбØÒª¶Ô·¢ËÍ/½ÓÊÕº¯ÊýµÄ·µ»ØÖµ½øÐмì²é¡£±¾ÎÄÖÐµÄ tcp echo client ·¢ËÍÊý¾Ýʱ£¬Õýȷд·¨Ó¦¸ÃÈçÏ£º

total_send = 0 
content_length = len(data_to_sent)
while total_send < content_length:
sent = sock.send(data_to_sent[total_send:])
if sent == 0:
raise RuntimeError("socket connection broken")
total_send += total_send + sent

send/recv²Ù×÷µÄÊÇÍøÂ绺³åÇøµÄÊý¾Ý£¬ËüÃDz»±Ø´¦Àí´«ÈëµÄËùÓÐÊý¾Ý¡£

Ò»°ãÀ´Ëµ£¬µ±ÍøÂ绺³åÇøÌîÂúʱ£¬sendº¯Êý¾Í·µ»ØÁË;µ±ÍøÂ绺³åÇø±»Çå¿Õʱ£¬recv º¯Êý¾Í·µ»Ø¡£

µ± recv º¯Êý·µ»Ø0ʱ£¬Òâζ×ŶԶËÒѾ­¹Ø±Õ¡£

¿ÉÒÔͨ¹ýÏÂÃæµÄ·½Ê½ÉèÖûº³åÇø´óС¡£

s.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, buffer_size) 

ÈÏΪ TCP ¾ßÓÐ framing

TCP ²»Ìṩ framing£¬ÕâʹµÃÆäºÜÊʺÏÓÚ´«ÊäÊý¾ÝÁ÷¡£ÕâÊÇÆäÓë UDP µÄÖØÒªÇø±ðÖ®Ò»¡£UDP ÊÇÒ»¸öÃæÏòÏûÏ¢µÄЭÒ飬Äܱ£³ÖÒ»ÌõÏûÏ¢ÔÚ·¢ËÍÕßÓë½ÓÊÜÕßÖ®¼äµÄÍ걸ÐÔ¡£

´úÂëʾÀý²Î¿¼£ºframing_assumptions

TCP µÄ״̬»ú

ÔÚÇ°Ãæecho server µÄʾÀýÖУ¬Ìáµ½ÁËTIME_WAIT״̬£¬ÎªÁËÕýʽ½éÉÜÆä¸ÅÄÐèÒªÁ˽âÏ TCP ´ÓÉú³Éµ½½áÊøµÄ״̬»úÆ÷¡£

Õâ¸ö×´Í¼×ªÒÆÍ¼·Ç³£·Ç³£¹Ø¼ü£¬Ò²±È½Ï¸´ÔÓ£¬ÎÒ×Ô¼ºÎªÁË·½±ã¼ÇÒ䣬¶ÔÕâ¸öͼ½øÐÐÁ˲ð½â£¬×Ðϸ·ÖÎöÕâ¸öͼ£¬¿ÉÒԵóöÕâÑùÒ»¸ö½áÂÛ£¬Á¬½ÓµÄ´ò¿ªÓë¹Ø±Õ¶¼Óб»¶¯(passive)ÓëÖ÷¶¯(active)Á½ÖÖ£¬Ö÷¶¯¹Ø±Õʱ£¬Éæ¼°µ½µÄ×´Ì¬×ªÒÆ×î¶à£¬°üÀ¨FIN_WAIT_1¡¢FIN_WAIT_2¡¢CLOSING¡¢TIME_WAIT¡£

´ËÍ⣬ÓÉÓÚ TCP Êǿɿ¿µÄ´«ÊäЭÒ飬ËùÒÔÿ´Î·¢ËÍÒ»¸öÊý¾Ý°üºó£¬¶¼ÐèÒªµÃµ½¶Ô·½µÄÈ·ÈÏ(ACK)£¬ÓÐÁËÉÏÃæÕâÁ½¸ö֪ʶºó£¬ÔÙÀ´¿´ÏÂÃæµÄͼ£º

1.ÔÚÖ÷¶¯¹Ø±ÕÁ¬½ÓµÄ socket µ÷Óà close·½·¨µÄͬʱ£¬»áÏò±»¶¯¹Ø±Õ¶Ë·¢ËÍÒ»¸ö FIN

2. ¶Ô¶ËÊÕµ½FINºó£¬»áÏòÖ÷¶¯¹Ø±Õ¶Ë·¢ËÍACK½øÐÐÈ·ÈÏ£¬Õâʱ±»¶¯¹Ø±Õ¶Ë´¦ÓÚ CLOSE_WAIT ״̬

3. µ±±»¶¯¹Ø±Õ¶Ëµ÷ÓÃclose·½·¨½øÐйرյÄͬʱÏòÖ÷¶¯¹Ø±Õ¶Ë·¢ËÍ FIN Ðźţ¬½ÓÊÕµ½ FIN µÄÖ÷¶¯¹Ø±Õ¶ËÕâʱ¾Í´¦ÓÚ TIME_WAIT ״̬

4.ÕâʱÖ÷¶¯¹Ø±Õ¶Ë²»»áÁ¢¿ÌתΪ CLOSED ״̬£¬¶øÊÇÐèÒªµÈ´ý 2MSL(max segment life£¬Ò»¸öÊý¾Ý°üÔÚÍøÂç´«ÊäÖÐ×î´óµÄÉúÃüÖÜÆÚ)£¬ÒÔÈ·±£±»¶¯¹Ø±Õ¶ËÄܹ»ÊÕµ½×îºó·¢³öµÄ ACK¡£Èç¹û±»¶¯¹Ø±Õ¶ËûÓÐÊÕµ½×îºóµÄ ACK£¬ÄÇô±»¶¯¹Ø±Õ¶Ë¾Í»áÖØÐ·¢ËÍ FIN£¬ËùÒÔ´¦ÓÚTIME_WAITµÄÖ÷¶¯¹Ø±Õ¶Ë»áÔٴη¢ËÍÒ»¸ö ACK Ðźţ¬ÕâôһÀ´(FINÀ´)Ò»»Ø(ACK)£¬ÕýºÃÊÇÁ½¸ö MSL µÄʱ¼ä¡£Èç¹ûµÈ´ýµÄʱ¼äСÓÚ 2MSL£¬ÄÇôеÄsocket¾Í¿ÉÒÔÊÕµ½Ö®Ç°Á¬½ÓµÄÊý¾Ý¡£

Ç°Ãæ echo server µÄʾÀýҲ˵Ã÷ÁË£¬´¦ÓÚ TIME_WAIT ²¢²»ÊÇ˵һ¶¨²»ÄÜʹÓ㬿ÉÒÔͨ¹ýÉèÖà socket µÄ SO_REUSEADDR ÊôÐÔÒÔ´ïµ½²»Óõȴý 2MSL µÄʱ¼ä¾Í¿ÉÒÔ¸´ÓÃsocket µÄÄ¿µÄ£¬µ±È»£¬Õâ½ö½öÊÊÓÃÓÚ²âÊÔ»·¾³£¬Õý³£Çé¿öϲ»ÒªÐÞ¸ÄÕâ¸öÊôÐÔ¡£

ʵս

HTTP UA

http ЭÒéÊÇÈç½ñÍòÎ¬ÍøµÄ»ùʯ£¬¿ÉÒÔͨ¹ý socket API À´¼òµ¥Ä£ÄâÒ»¸öä¯ÀÀÆ÷(UA)ÊÇÈçºÎ½âÎö HTTP ЭÒéÊý¾ÝµÄ¡£

#coding=utf8 
import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
baidu_ip = socket.gethostbyname('baidu.com')
sock.connect((baidu_ip, 80))
print('connected to %s' % baidu_ip)

req_msg = [
'GET / HTTP/1.1',
'User-Agent: curl/7.37.1',
'Host: baidu.com',
'Accept: */*',
]
delimiter = '\r\n'

sock.send(delimiter.join(req_msg))
sock.send(delimiter)
sock.send(delimiter)

print('%sreceived%s' % ('-'*20, '-'*20))
http_response = sock.recv(4096)
print(http_response)

ÔËÐÐÉÏÃæµÄ´úÂë¿ÉÒԵõ½ÏÂÃæµÄÊä³ö

--------------------received-------------------- 
HTTP/1.1 200 OK
Date: Tue, 01 Nov 2016 12:16:53 GMT
Server: Apache
Last-Modified: Tue, 12 Jan 2010 13:48:00 GMT
ETag: "51-47cf7e6ee8400"
Accept-Ranges: bytes
Content-Length: 81
Cache-Control: max-age=86400
Expires: Wed, 02 Nov 2016 12:16:53 GMT
Connection: Keep-Alive
Content-Type: text/html

<html>
<meta http-equiv="refresh" content="0;url=http://www.baidu.com/">
</html>

http_responseÊÇͨ¹ýÖ±½Óµ÷ÓÃrecv(4096)µÃµ½µÄ£¬ÍòÒ»ÕæÕýµÄ·µ»Ø´óÓÚÕâ¸öÖµÔõô°ì?ÎÒÃÇÇ°ÃæÖªµÀÁË TCP ЭÒéÊÇÃæÏòÁ÷µÄ£¬Ëü±¾Éí²¢²»¹ØÐÄÏûÏ¢µÄÄÚÈÝ£¬ÐèÒªÓ¦ÓóÌÐò×Ô¼ºÈ¥½ç¶¨ÏûÏ¢µÄ±ß½ç£¬¶ÔÓÚÓ¦ÓòãµÄ HTTP ЭÒéÀ´Ëµ£¬Óм¸ÖÖÇé¿ö£¬×î¼òµ¥µÄÒ»ÖÖʱͨ¹ý½âÎö·µ»ØÖµÍ·²¿µÄContent-LengthÊôÐÔ£¬ÕâÑù¾ÍÖªµÀbodyµÄ´óСÁË£¬¶ÔÓÚ HTTP 1.1°æ±¾£¬Ö§³ÖTransfer-Encoding: chunked´«Ê䣬¶ÔÓÚÕâÖÖ¸ñʽ£¬ÕâÀï²»ÔÚÕ¹¿ª½²½â£¬´ó¼ÒÖ»ÐèÒªÖªµÀ£¬ TCP ЭÒé±¾ÉíÎÞ·¨Çø·ÖÏûÏ¢Ìå¾Í¿ÉÒÔÁË¡£¶ÔÕâ¿é¸ÐÐËȤµÄ¿ÉÒԲ鿴 CPython ºËÐÄÄ£¿é http.client

Unix_domain_socket

UDS ÓÃÓÚͬһ»úÆ÷Éϲ»Í¬½ø³ÌͨÐŵÄÒ»ÖÖ»úÖÆ£¬ÆäAPIÊÊÓÃÓë network socket ºÜÀàËÆ¡£Ö»ÊÇÆäÁ¬½ÓµØÖ·Îª±¾µØÎļþ¶øÒÑ¡£

´úÂëʾÀý²Î¿¼£ºuds_server.py¡¢uds_client.py

ping

ping ÃüÁî×÷Ϊ¼ì²âÍøÂçÁªÍ¨ÐÔ×î³£ÓõŤ¾ß£¬ÆäÊÊÓõĴ«ÊäЭÒé¼È²»ÊÇTCP£¬Ò²²»ÊÇ UDP£¬¶øÊÇ ICMP£¬ÀûÓà raw sockets£¬ÎÒÃÇ¿ÉÒÔÊÊÓô¿ Python ´úÂëÀ´ÊµÏ֯书ÄÜ¡£

´úÂëʾÀý²Î¿¼£ºping.py

netstat vs ss

netstat Óë ss ÊÇÀà Unix ϵͳÉϲ鿴 Socket ÐÅÏ¢µÄÃüÁî¡£netstat ÊDZȽÏÀÏÅÆµÄÃüÁÎÒ³£ÓõÄÑ¡ÔñÓÐ

-t£¬Ö»ÏÔʾ tcp Á¬½Ó

-u£¬Ö»ÏÔʾ udp Á¬½Ó

-n£¬²»ÓýâÎöhostname£¬Óà IP ÏÔʾÖ÷»ú£¬¿ÉÒÔ¼Ó¿ìÖ´ÐÐËÙ¶È

-p£¬²é¿´Á¬½ÓµÄ½ø³ÌÐÅÏ¢

-l£¬Ö»ÏÔʾ¼àÌýµÄÁ¬½Ó

ss ÊÇÐÂÐ˵ÄÃüÁÆäÑ¡ÏîºÍ netstat ²î²»¶à£¬Ö÷񻂿±ðÊÇÄܹ»½øÐйýÂË(ͨ¹ýstateÓëexclude¹Ø¼ü×Ö)

$ ss -o state time-wait -n | head 
Recv-Q Send-Q Local Address:Port Peer Address:Port
0 0 10.200.181.220:2222 10.200.180.28:12865 timer:(timewait,33sec,0)
0 0 127.0.0.1:45977 127.0.0.1:3306 timer:(timewait,46sec,0)
0 0 127.0.0.1:45945 127.0.0.1:3306 timer:(timewait,6.621ms,0)
0 0 10.200.181.220:2222 10.200.180.28:12280 timer:(timewait,12sec,0)
0 0 10.200.181.220:2222 10.200.180.28:35045 timer:(timewait,43sec,0)
0 0 10.200.181.220:2222 10.200.180.28:42675 timer:(timewait,46sec,0)
0 0 127.0.0.1:45949 127.0.0.1:3306 timer:(timewait,11sec,0)
0 0 127.0.0.1:45954 127.0.0.1:3306 timer:(timewait,21sec,0)
0 0 ::ffff:127.0.0.1:3306 ::ffff:127.0.0.1:45964 timer:(timewait,31sec,0)

ÕâÁ½¸öÃüÁî¸ü¶àÓ÷¨¿ÉÒԲο¼£º

SS Utility: Quick Intro

10 basic examples of linux netstat command

×ܽá

ÎÒÃǵÄÉú»îÒѾ­Àë²»¿ªÍøÂ磬ƽʱµÄ¿ª·¢Ò²³ä³âן÷ÖÖ¸´ÔÓµÄÍøÂçÓ¦Ó㬴Ó×î»ù±¾µÄÊý¾Ý¿â£¬µ½¸÷ÖÖ·Ö²¼Ê½ÏµÍ³£¬²»ÂÛÆäÓ¦ÓòãÔõô¸´ÔÓ£¬Æäµ×²ã´«ÊäÊý¾ÝµÄµÄЭÒé´ØÊÇÒ»Öµġ£Socket ÕâÒ»¸ÅÄîÎÒÃǺÜÉÙÖ±½ÓÓëÆä´ò½»µÀ£¬µ«Êǵ±ÎÒÃǵÄϵͳ³öÏÖÎÊÌâʱ£¬ÍùÍùÊǶԵײãµÄЭÒéÈÏʶ²»×ãÔì³ÉµÄ£¬Ï£ÍûÕâÆªÎÄÕÂÄܶԴó¼Ò±à³ÌÍøÂç·½ÃæµÄ³ÌÐòÓÐËù°ïÖú¡£

   
2941 ´Îä¯ÀÀ       28
????

HTTP????
nginx??????
SD-WAN???
5G?????
 
????

??????????
IPv6???????
??????????
???????
????

????????
????????
???????????????
??????????
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

ÖйúÒÆ¶¯ ÍøÂç¹æ»®Óë¹ÜÀí
Ò½Ôº°²·ÀϵͳԶ³Ì̽ÊÓ·½°¸½âÎö
»ùÓÚRFID¼¼ÊõµÄÎïÁªÍøÑо¿
»ùÓÚÎïÁªÍø¡¢ÔƼÆËã¼Ü¹¹...
»ùÓÚRFID¼¼ÊõÎïÁªÍøÑо¿ÓëÓ¦ÓÃ
ÎïÁªÍøµÄ·¢Õ¹Æ¿¾±ºÍ¹Ø¼ü¼¼Êõ