คำถามติดแท็ก socket

เป็นจุดปลายการสื่อสารข้อมูลสำหรับการแลกเปลี่ยนข้อมูลระหว่างกระบวนการที่ดำเนินการภายในระบบปฏิบัติการโฮสต์เดียวกัน

4
ฉันจะสื่อสารกับซ็อกเก็ตโดเมน Unix ผ่านเชลล์บน Debian Squeeze ได้อย่างไร
ฉันใช้งานเว็บเซิร์ฟเวอร์ Debian Squeeze ฉันได้ติดตั้ง memcached ในนั้นและกำหนดค่า memcached เพื่อฟังในซ็อกเก็ตโดเมน Unix (ที่/tmp/memcached.sock) เนื่องจากต้องการเพียงรับข้อความจากเว็บไซต์ซึ่งอยู่บนเซิร์ฟเวอร์เดียวกัน ดูเหมือนว่าจะทำงานได้ดี แต่ฉันต้องการสื่อสารกับ memcached ผ่านเชลล์เพื่อตรวจสอบว่ามันทำในสิ่งที่ฉันคิดว่าทำอยู่ memcached ยอมรับข้อความผ่านโปรโตคอล ASCII แบบง่าย (ถ้าฉันเข้าใจถูกต้อง) หากกำลังฟังบน TCP / IP ฉันสามารถส่งข้อความถึงมันผ่านเช่นnc: $ echo "stats settings" | nc localhost 11211 แต่ฉันไม่สามารถหาวิธีส่งข้อความนั้นไปยังซ็อกเก็ตโดเมนแทนได้ บนแล็ปท็อปของฉัน (ซึ่งใช้ OS X Lion) ทั้งคู่ncและtelnetมีตัวเลือก ( -Uและ-uตามลำดับ) เพื่อใช้ซ็อกเก็ตโดเมน อย่างไรก็ตามบนเว็บเซิร์ฟเวอร์ Debian Squeeze ของฉันตัวเลือกเหล่านี้จะไม่ปรากฏ
99 shell  debian  socket  telnet 

7
ใครมีปลายอีกด้านของซ็อกเก็ตยูนิกซ์นี้?
ฉันต้องการตรวจสอบว่ากระบวนการใดมีส่วนอื่น ๆ ของซ็อกเก็ต UNIX โดยเฉพาะฉันถามเกี่ยวกับสิ่งที่สร้างขึ้นด้วยsocketpair()แม้ว่าปัญหาจะเหมือนกันสำหรับซ็อกเก็ต UNIX ใด ๆ ผมมีโปรแกรมparentที่สร้างsocketpair(AF_UNIX, SOCK_STREAM, 0, fds)และfork()s กระบวนการหลักปิดfds[1]และfds[0]ทำการสื่อสารต่อไป close(fds[0]); s=fds[1]เด็กไม่ตรงข้าม จากนั้นเด็กก็เข้าexec()ร่วมโปรแกรมอื่น, child1. ทั้งสองสามารถสื่อสารไปมาผ่านซ็อกเก็ตคู่นี้ได้ ตอนนี้ขอบอกว่าฉันรู้ว่าใครparentเป็น แต่ฉันต้องการที่จะคิดออกที่child1เป็น ฉันจะทำสิ่งนี้ได้อย่างไร มีเครื่องมือหลายอย่างที่ฉันจัดการ แต่ไม่มีใครสามารถบอกได้ว่ากระบวนการใดอยู่ที่ปลายอีกด้านของซ็อกเก็ต ฉันเหนื่อย: lsof -c progname lsof -c parent -c child1 ls -l /proc/$(pidof server)/fd cat /proc/net/unix โดยพื้นฐานแล้วฉันสามารถเห็นซ็อกเก็ตทั้งสองและทุกอย่างเกี่ยวกับพวกเขา แต่ไม่สามารถบอกได้ว่าพวกเขาเชื่อมต่อกัน ฉันพยายามระบุว่า FD ใดในผู้ปกครองกำลังสื่อสารกับกระบวนการลูก

6
ซ็อกเก็ตคืออะไร?
ใครช่วยอธิบายให้ฉันรู้ว่าซ็อกเก็ตคืออะไร? ฉันเห็นมันในหลาย ๆ คำย่อในบริบทของ SSL เป็นต้น ทำไมมันถึงเรียกว่าซ็อกเก็ต? มันล้วนๆเพราะเป็นชื่อที่พวกเขาคิดค้น? หรือเป็นชื่อแรกที่พวกเขาสร้างขึ้นมาด้วย?

2
ประสิทธิภาพของ unix sockets เทียบกับพอร์ต TCP
ตัวอย่างเช่นใน php-fpm: #listen = 127.0.0.1:9000 listen = /var/run/php-fpm/php-fpm.sock มีความแตกต่างด้านประสิทธิภาพที่สำคัญระหว่างการใช้ unix socket-based Listeners ผ่านพอร์ต TCP หรือไม่? (ไม่ใช่เฉพาะสำหรับ PHP แต่โดยทั่วไปแล้วมันแตกต่างกันไปในแต่ละบริการหรือไม่)

2
หมายเลขลิงก์ / proc / PID / fd / X
ใน Linux /proc/PID/fd/Xลิงก์สำหรับตัวอธิบายไฟล์ที่เป็นไพพ์หรือซ็อกเก็ตจะมีตัวเลขเช่น: l-wx------ 1 user user 64 Mar 24 00:05 1 -> pipe:[6839] l-wx------ 1 user user 64 Mar 24 00:05 2 -> pipe:[6839] lrwx------ 1 user user 64 Mar 24 00:05 3 -> socket:[3142925] lrwx------ 1 user user 64 Mar 24 00:05 4 -> socket:[3142926] lr-x------ 1 user …

1
ฉันจะหาข้อมูลเพิ่มเติมเกี่ยวกับไฟล์ซ็อกเก็ตใน / proc / fd ได้อย่างไร
มองหาใน / proc / $ mypid / fd / ฉันเห็นไฟล์เหล่านี้ lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 0 -> /dev/pts/36 (deleted) lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 3 -> socket:[1424055856] lrwx------ 1 cm_user cm_user 64 Oct 14 03:21 4 -> socket:[1424055868] lrwx------ 1 cm_user cm_user 64 Oct …

5
FIFO, pipe & Unix socket socket เป็นสิ่งเดียวกันใน Linux kernel หรือไม่?
ฉันได้ยินมาว่า FIFO มีชื่อว่าไพพ์ และพวกเขามีความหมายเดียวกัน ในทางกลับกันฉันคิดว่าซ็อกเก็ตโดเมน Unix ค่อนข้างคล้ายกับไพพ์ (แม้ว่าฉันจะไม่เคยใช้มัน) ดังนั้นฉันสงสัยว่าพวกเขาทั้งหมดอ้างถึงการใช้งานเดียวกันในเคอร์เนล Linux ความคิดใด ๆ

3
ฉันจะจองพอร์ตสำหรับแอปพลิเคชันของฉันได้อย่างไร
ฉันจะจองรายการพอร์ตสำหรับแอปพลิเคชันที่กำหนดเองได้อย่างไร ความเฉพาะเจาะจงผลิตภัณฑ์ที่ฉันสร้างมีกระบวนการมากมายและการสื่อสารระหว่างกันมากมาย ปัญหาที่ฉันมีคือทุกครั้งที่ระบบปฏิบัติการขโมยพอร์ตของฉัน มันหายาก แต่มันเกิดขึ้น อาจเป็นเพราะแอปพลิเคชันอื่นใช้ ":: bind" โดยไม่ได้ระบุพอร์ต หรือบางครั้งแอปพลิเคชันของฉันเองขโมยพอร์ตเมื่อฉันเรียกว่า ":: connect" ด้วยซ็อกเก็ตที่ไม่ได้ผูกไว้ เท่าที่เห็นจากหน้าคน: หากซ็อกเก็ตยังไม่ได้ถูกผูกไว้กับที่อยู่ในท้องถิ่นเชื่อมต่อ () จะผูกไว้กับที่อยู่ซึ่งเว้นแต่ครอบครัวที่อยู่ของซ็อกเก็ตคือ AF_UNIX เป็นที่อยู่ในท้องถิ่นที่ไม่ได้ใช้ ดังนั้นคำถามของฉันคือฉันสามารถจองพอร์ตที่ฉันต้องการเพื่อให้ระบบปฏิบัติการไม่ได้ใช้งานได้หรือไม่? สามารถทำได้ด้วย / etc / services หรือไม่ หรือมีวิธีที่แตกต่างกันอย่างไร
29 tcp  udp  socket 

3
เหตุใดซ็อกเก็ต TCP / IP จึงถือว่า“ เปิดไฟล์”
ฉันต้องการความช่วยเหลือในการเข้าใจสิ่งที่ฉันแน่ใจว่าเป็นแนวคิดพื้นฐานใน Linux: ขีด จำกัด สำหรับไฟล์ที่เปิด โดยเฉพาะฉันสับสนว่าทำไมซ็อกเก็ตเปิดสามารถนับรวมกับจำนวน "ไฟล์ที่เปิด" ในระบบ ใครบางคนช่วยอธิบายรายละเอียดเกี่ยวกับเหตุผลได้ไหม ฉันเข้าใจว่าสิ่งนี้อาจย้อนกลับไปที่หลักการ "ทุกอย่างเป็นไฟล์" ใน Linux แต่รายละเอียดเพิ่มเติมใด ๆ จะได้รับการชื่นชม

4
เซิร์ฟเวอร์ค้นหาว่าพอร์ตลูกค้าใดที่จะส่งไป?
ตามที่ฉันเข้าใจแล้วนี่เป็นสิ่งที่เกิดขึ้นเมื่อไคลเอนต์ทำการร้องขอการเชื่อมต่อ: เซิร์ฟเวอร์จะถูกผูกไว้กับหมายเลขพอร์ตเฉพาะ หมายเลขพอร์ตนั้นจะเชื่อมโยงกับกระบวนการรับฟังเสมอ เนื่องจากมีเพียงเซิร์ฟเวอร์เท่านั้นที่กำลังรับฟังการเชื่อมต่อขาเข้าเราจึงไม่จำเป็นต้องเชื่อมโยงฝั่งไคลเอ็นต์ เซิร์ฟเวอร์จะคอยฟังหมายเลขพอร์ตนั้นต่อไป ลูกค้าจะส่งconnect()คำขอ accept()เซิร์ฟเวอร์จะยอมรับคำขอใช้ ทันทีที่เซิร์ฟเวอร์ยอมรับคำขอของลูกค้าเคอร์เนลจะจัดสรรหมายเลขพอร์ตแบบสุ่มสำหรับเซิร์ฟเวอร์เพิ่มเติมsend()และreceive()เนื่องจากหมายเลขพอร์ตเดียวกันบนเซิร์ฟเวอร์ไม่สามารถใช้สำหรับการส่งและฟังได้และพอร์ตก่อนหน้ายังคงอยู่ กำลังฟังการเชื่อมต่อใหม่ จากทั้งหมดนั้นเซิร์ฟเวอร์จะหาพอร์ตที่ไคลเอ็นต์ได้รับอย่างไร ฉันรู้ว่าไคลเอนต์จะส่งเซกเมนต์ TCP พร้อมพอร์ตต้นทางและพอร์ตปลายทางดังนั้นเซิร์ฟเวอร์จะใช้พอร์ตต้นทางของเซ็กเมนต์นั้นเป็นพอร์ตปลายทาง แต่เซิร์ฟเวอร์เรียกใช้ฟังก์ชันใดเพื่อค้นหาข้อมูลเกี่ยวกับพอร์ตนั้น มันคือaccept()อะไร
26 tcp  socket 

4
ซ็อกเก็ต Unix Internet เป็นไฟล์หรือไม่?
ฉันเข้าใจว่า "ทุกอย่างเป็นไฟล์" เป็นหนึ่งในแนวคิดหลักของ Unix แต่ซ็อกเก็ตใช้ API ที่แตกต่างกันซึ่งให้บริการโดยเคอร์เนล (เช่นซ็อกเก็ต, sendto, recv และอื่น ๆ ) ไม่เหมือนอินเทอร์เฟซระบบไฟล์ทั่วไป "ทุกอย่างเป็นไฟล์" นำไปใช้ที่นี่ได้อย่างไร

3
มีไฟล์สำหรับแต่ละซ็อกเก็ตหรือไม่?
"ทุกอย่างเป็นไฟล์" ใน UNIX World ประโยคข้างต้นมีชื่อเสียง เมื่อฉันวิ่งecho "hello programmer" >> /dev/tty1ฉันสามารถดูสตริงที่กำหนดบนTeleType 1 , .... ไฟล์แต่ละไฟล์คืออะไรและที่ไหนsocket? สมมติว่าเพื่อนของฉันเชื่อมต่อกับพีซีของฉันและ IP คือh.h.h.hฉันจะเข้าถึงไฟล์ที่เกี่ยวข้องได้อย่างไร มันเป็นไปได้?
21 files  kernel  socket 

2
วิธีการทำให้ซ็อกเก็ต TCP หมดเวลา
สำหรับการจำลองภัยพิบัติทางเครือข่ายของสภาพแวดล้อมเซิร์ฟเวอร์ของเราเรากำลังมองหาวิธีที่จะหมดเวลาซ็อกเก็ต TCP โดยเจตนา มีวิธีง่าย ๆ สำหรับซ็อกเก็ตที่มีอยู่หรือไม่? นอกจากนี้โปรแกรมกรณีทดสอบ C เล็ก ๆ น้อย ๆ จะเป็นบวก เราได้ลองใส่อินเตอร์เฟสเครือข่ายระหว่างการอ่านบัฟเฟอร์ TCP และการอ่านจากทรัพยากรที่เชื่อมต่อแล้ว (samba) เซิร์ฟเวอร์ทดสอบคือ Ubuntu 12.04.4
20 socket  timeout 

2
เหตุใดความยาวเส้นทางซ็อกเก็ตจึง จำกัด เพียงหนึ่งร้อยตัวอักษร
บนชื่อพา ธ ของระบบ Unix มักจะไม่จำกัดความยาว (เช่น 4096 ตัวอักษรบน Linux) ... ยกเว้นเส้นทางของไฟล์ซ็อกเก็ตซึ่ง จำกัด อยู่ที่ประมาณ 100 ตัวอักษร (107 ตัวอักษรบนLinux ) คำถามแรก: ทำไมถึงมีข้อ จำกัด ต่ำ ผมได้ตรวจสอบว่ามันดูเหมือนเป็นไปได้ที่จะหลีกเลี่ยงข้อ จำกัด นี้โดยการเปลี่ยนไดเรกทอรีการทำงานปัจจุบันและการสร้างในไดเรกทอรีต่างๆหลายซ็อกเก็ตไฟล์ทั้งหมดที่ใช้เส้นทางเดียวกัน./myfile.sock: ใช้งานของลูกค้าดูเหมือนจะถูกต้องเชื่อมต่อกับเซิร์ฟเวอร์กระบวนการคาดว่าแม้แม้ว่าlsofการแสดงทั้งหมด ของพวกเขาฟังบนเส้นทางไฟล์ซ็อกเก็ตเดียวกัน วิธีนี้เป็นวิธีที่เชื่อถือได้หรือฉันแค่โชคดี? พฤติกรรมนี้มีเฉพาะกับ Linux หรืออาจใช้วิธีแก้ปัญหานี้กับ Unixes อื่นเช่นกัน?

3
โครงสร้างซ็อกเก็ตเคอร์เนลและ TCP_DIAG
ฉันกำลังทำงานกับซอฟต์แวร์ที่เชื่อมต่อกับเซิร์ฟเวอร์ข้อมูลแบบเรียลไทม์ (โดยใช้ TCP) และฉันมีการเชื่อมต่อลดลง ฉันเดาว่าลูกค้าไม่อ่านข้อมูลที่มาจากเซิร์ฟเวอร์เร็วพอ ดังนั้นฉันต้องการตรวจสอบซ็อกเก็ต TCP ของฉัน สำหรับสิ่งนี้ฉันพบเครื่องมือ "ss" เครื่องมือนี้อนุญาตให้เห็นสถานะของซ็อกเก็ตทุกอัน - นี่คือตัวอย่างบรรทัดของเอาต์พุตของคำสั่ง ss -inm 'src *:50000' ESTAB 0 0 184.7.60.2:50000 184.92.35.104:1105 mem:(r0,w0,f0,t0) sack rto:204 rtt:1.875/0.75 ato:40 คำถามของฉันคืออะไรส่วนความจำหมายถึงอะไร ดูที่ซอร์สโค้ดของเครื่องมือฉันพบว่าข้อมูลมาจากโครงสร้างเคอร์เนล ( sockในsock.h) แม่นยำยิ่งขึ้นมันมาจากฟิลด์: r = sk->sk_rmem_alloc w = sk->sk_wmem_queued; f = sk->sk_forward_alloc; t = sk->sk_wmem_alloc; มีใครรู้บ้างว่าพวกเขาหมายถึงอะไร? ฉันเดาว่า: rmem_alloc : ขนาดของบัฟเฟอร์ขาเข้า wmem_alloc …
18 linux  tcp  socket 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.