ম্যাক ওএস এক্স-এ আমার টিআইএম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.