ম্যাক ওএস এক্স-এ আমার টিআইএমE_WAIT গুলি কোথায়?


9

TIME_WAITম্যাক ওএস এক্সে কোনও এস

সাধারণত, যখন কোনও টিসিপি সংযোগ বন্ধ থাকে, তখন সকেটটি যেখানে close()প্রথমে বলা হয় সেই TIME_WAITরাজ্যে রেখে দেওয়া হয় ।

যখন সমবয়সীদের মধ্যে একটি হ'ল ম্যাক ওএস এক্স (লায়ন) মেশিন থাকে তখন ম্যাকের TIME_WAITদ্বারা প্রথমে ম্যাক দিকে বলা netstat -anহয় তবে ম্যাকের দ্বারা তালিকাভুক্ত নয় close()। যাইহোক, এটা মনে হচ্ছে যে সকেট হয় আসলে TIME_WAITরাষ্ট্র, কারণ কল করতে চাইছেন listen()আবার (সকেট বিকল্প ব্যবহার না করেই SO_REUSEADDR) ঘটায় listen()ব্যর্থ।

2 * এমএসএলের জন্য অপেক্ষা করা (ম্যাক ওএস এক্স লায়ন অনুসারে সর্বোচ্চ সেগমেন্ট লাইফটাইম যা 15 সেকেন্ড হয় sysctl net.inet.tcp.msl) TIME_WAITরাষ্ট্র সাফ করে , এবং listen()ত্রুটি ছাড়াই আবার কল করা যেতে পারে।

আমি কেন সকেটটি দেখতে পাচ্ছি না TIME_WAIT?

পরীক্ষামূলক

পাইথনে এখানে দুটি সাধারণ পরীক্ষা প্রোগ্রাম রয়েছে।

সার্ভার

#!/usr/bin/env python

import socket

HOST = ''
PORT = 50007
l = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
l.bind((HOST, PORT))
l.listen(1)
print("Listening on %d" % PORT)
(s, _) = l.accept()
print("Connected")
raw_input("Press <enter> to close...")
l.close()
s.close()
print("Closed")

মক্কেল

#!/usr/bin/env python

import socket
import sys

HOST = sys.argv[1]
PORT = 50007

print("Opening connection to server")
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
raw_input("Press <enter> to close...")
s.close()
print("Closed")

দুটি ভিন্ন লিনাক্স মেশিনে সার্ভার এবং ক্লায়েন্ট উভয়ই চলাকালীন, প্রথমে <enter>কল করার জন্য যে পিয়ারটি টিপতে হবে তা প্রত্যাশার মতো হয়ে যায়:close()TIME_WAIT

$ ./server-timewait.py 
Listening on 50007
Connected
Press <enter> to close...
Closed
$ netstat -an | grep 50007
tcp        0      0 172.16.185.219:50007    172.16.185.42:49818     TIME_WAIT  
$ 

যখন সমবয়সীদের মধ্যে একজন ম্যাক (চলমান ওএস এক্স সিংহ) TIME_WAITতখন কখনই দেখি netstat -an | grep 50007না ম্যাকের উপরে প্রথমে বন্ধ হওয়ার পরে দৌড়ানো ।


ভাল প্রশ্ন. আমি নিজেও একই জিনিসটি দেখছি, এবং সেগুলি অন্তর্ভুক্ত করার জন্য
— নেটস্যাটেটের

2
FWIW, sudo lsof -i -Pপ্রক্রিয়া ইতিমধ্যে পারেন থেকে বেরিয়ে গিয়েছেন জন্য TIME_WAIT অবস্থা দেখায় না।
— নভেম্বর

@নাটভু জেনে খুশি যে আমি একা নই। :-)
— mgd

উত্তর:


2

এই বাগ রিপোর্টটি দাবি করেছে যে সমস্যাটি নেটস্যাট বাস্তবায়নের মধ্যে রয়েছে । বাগ রিপোর্টের সাথে সংযুক্ত কোডটি TIME_WAIT রাজ্যে সকেটগুলি সঠিকভাবে দেখায়। আপনাকে নিম্নলিখিত লাইনগুলি সরিয়ে ফেলতে হবে

if (lip == INADDR_LOCALHOST ||
  lip == INADDR_ANY
  ) { continue; }

এটি স্থানীয় হোস্টের সাথে আবদ্ধ সকেটগুলি দেখানোর জন্য।


0

এটি কোনও উত্তর নয়, তবে কেউ হয়ত এ থেকে আরও খোঁজ নিতে সক্ষম হন।

tcpdump -i lo0 -vv port 50007

## Press Enter at the server window

# Server send a FIN (note the flag)
23:33:04.283768 IP (tos 0x0, ttl 64, id 4134, offset 0, flags [DF], proto TCP (6), length 52, bad cksum 0 (->2c9c)!)
    localhost.50007 > localhost.56030: Flags [F.], cksum 0xfe28 (incorrect -> 0xeff9), seq 1, ack 1, win 9186, options [nop,nop,TS val 432165676 ecr 432157913], length 0

# Client send back ACK
23:33:04.283803 IP (tos 0x0, ttl 64, id 44906, offset 0, flags [DF], proto TCP (6), length 52, bad cksum 0 (->8d57)!)
    localhost.56030 > localhost.50007: Flags [.], cksum 0xfe28 (incorrect -> 0xd1a6), seq 1, ack 2, win 9186, options [nop,nop,TS val 432165676 ecr 432165676], length 0

# Server confirm the ACK is received
23:33:04.283812 IP (tos 0x0, ttl 64, id 18284, offset 0, flags [DF], proto TCP (6), length 52, bad cksum 0 (->f555)!)
    localhost.50007 > localhost.56030: Flags [.], cksum 0xfe28 (incorrect -> 0xd1a6), seq 2, ack 1, win 9186, options [nop,nop,TS val 432165676 ecr 432165676], length 0

## After this point, the server process is actually exit but client still running.
## It's strange that re-run server script gives "OSError: [Errno 48] Address already in use"
## and netstat shows this connection is in CLOSE_WAIT status

## Press Enter at the client window

# Client send a FIN to server
23:33:09.731728 IP (tos 0x0, ttl 64, id 51478, offset 0, flags [DF], proto TCP (6), length 52, bad cksum 0 (->73ab)!)
    localhost.56030 > localhost.50007: Flags [F.], cksum 0xfe28 (incorrect -> 0xbcb6), seq 1, ack 2, win 9186, options [nop,nop,TS val 432171035 ecr 432165676], length 0

# WTH!? Who send back this packet? The server process is closed!
23:33:09.731764 IP (tos 0x0, ttl 64, id 18754, offset 0, flags [DF], proto TCP (6), length 52, bad cksum 0 (->f37f)!)
    localhost.50007 > localhost.56030: Flags [.], cksum 0xfe28 (incorrect -> 0xa7c7), seq 2, ack 2, win 9186, options [nop,nop,TS val 432171035 ecr 432171035], length 0

"ডাব্লুটিএইচ !? এই প্যাকেটটি কে ফেরত পাঠায়? সার্ভার প্রক্রিয়াটি বন্ধ!" মনে হচ্ছে এটি সার্ভার দ্বারা প্রেরিত হয়েছে যা TIME_WAIT অবস্থায় রয়েছে, কারণ এটিই প্রথম এফআইএন প্রেরণ করার অংশ। যদিও সার্ভার প্রক্রিয়াটি শেষ হয়ে গিয়েছিল, টিসিপি স্ট্যাকটি সর্বশেষ এসিকে প্রেরণের জন্য সংযোগের অবস্থা জানিয়েছে।
— neverov
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.