Kan någon förklara för mig vad ett uttag är? Jag ser det i många akronymer i samband med SSL osv.
Varför kallas det också ett uttag? Är det bara för att det var vilket namn de uppfann? Eller var det förnamnet de kom med?
Kommentarer
- I lekman ’ s termer: ett uttag är en telefon. Det är ’ som du håller i handen som låter dig prata med en annan telefon. Analogin går sönder lite: De flesta telefonsamtal är peer-to-peer. Socket-anslutningar är klient till server. Klienten (som, men inte begränsat till, arbetsstationsprogramvara som webbläsare) ansluter till en server (t.ex. en webbserver, filserver, autentiseringsserver eller annat). En annan brist i analogin: när du stänger en sockelanslutning förstörs sockeln och du måste skapa ett nytt sockel innan du kan upprätta en ny anslutning.
- Det ’ är inte så illa för en analogi. En server är bara ett callcenter och kan ha många hundra aktiva samtal samtidigt.
Svar
Ett uttag är bara en logisk slutpunkt för kommunikation. De finns på transportlagret. Du kan skicka och ta emot saker i ett uttag, du kan binda och lyssna på ett uttag. Ett uttag är specifikt för ett protokoll, en maskin och en port och adresseras som sådan i rubriken på ett paket.
Beejs guider till Nätverk Programmering och Kommunikation mellan processer har båda bra information om hur man använder uttag och till och med svara på denna exakta fråga .
Svar
I de enklaste termerna är ett uttag en pseudofil som representerar en nätverksanslutning. När ett uttag har skapats (med rätt primitiv och rätt parametrar för att identifiera den andra värden), skrivs till uttaget om till nätverkspaket som skickas ut och data som tas emot från nätverket kan läsas från sockeln.
I ett avseende är sockets mycket lik rör: de ser ut som filer till programmen som använder dem, men resulterar inte i läsning eller skrivning till en skiva, utan tillåter kommunikation med ett annat program (lokalt när det gäller rör, och po väldigt avlägsna när det gäller uttag). De erbjuder också, som du nämner, dubbelriktad kommunikation (ungefär som ett par korrekt anslutna rör kan).
Slutligen är det vanligt att program på en enda maskin kommunicerar med standardnätverksprotokoll, som TCP ; det skulle vara slösaktigt att gå hela vägen till nätverkshårdvaran (om någon!), beräkna kontrollsummor, etc., bara för att gå tillbaka till samma värd: det är där Unix-domänuttag kommer in. Det är ungefär som vanliga uttag , förutom att de ansluter processer på samma värd snarare än fjärrprocesser, och inte försöker använda några nätverksresurser alls. På detta sätt är de ett medium för kommunikation mellan processerna.
Som trippelnämnde , under BSD: s historia introducerades rör tidigare än socklar och implementerades på nytt med socklar när de fanns. Samma referens, Design och implementering av FreeBSD-operativsystemet , nämner att rör återställdes sedan till en icke-sockelimplementering av prestationsskäl: detta understryker verkligen det faktum att rör delar likheter.
Kommentarer
- Kanske också nämna att rör före socklar, men när sockelgränssnittet har lagts till i Unix var det mycket vettigt t o reimplementera rör med lokala uttag.
- @ tripleee: Att ’ är en fantastisk historisk punkt. Vill du ge en referens?
- Snabb googling dyker upp sida 40 i Design och implementering av FreeBSD-operativsystemet ; texten nämner denna ändring i 4.2BSD men klargör också att det inte längre är så det ’ görs av prestationsskäl.
- Utmärkt, jag ’ Jag lägger till detta i mitt svar.
- Det bästa teknosvaret i alla
Svar
Vad är det nu?
Ett uttag eller ”uttag” kan vara flera saker:
Först och främst är det en tanke modell och ett applikationsprogrammeringsgränssnitt (API) . Det betyder att du har en uppsättning regler du behöver följa och en uppsättning funktioner som du kan använda för att skriva program som gör något enligt ett exakt specificerat kontrakt. I detta speciella fall betyder något att utbyta data med ett annat program.
Sockets API abstraktar i stort sett detaljerna i ”kommunikation” i allmänhet. Det inkapslar vem du pratar med och hur, genom en (nästan) konsekvent och identisk cookie-cutter-form.
Du kan skapa uttag i olika ”domäner” (som t.ex.ett ”unix-uttag” eller ett ”internetuttag”) och av olika typer av kommunikation (t.ex. ett ”datagram” -uttag eller ett ”ström” -uttag) och prata med olika mottagare, och allt fungerar exakt samma (ja, 99%, det finns uppenbarligen små skillnader som du måste redogöra för.
Du behöver inte veta (och du vill inte ens veta!) om du pratar med ett annat program på samma dator eller på en annan dator, eller om det finns IPv4- eller IPv6-nätverk mellan dessa datorer, eller kanske något annat protokoll som du aldrig har hört talas om.
socket
är också namnet på biblioteksfunktionen (eller syscall) som skapar ”sockeln ”, vilket är en speciell typ av fil (allt i Unix är en fil).
Hur jämförs det med …
uttag faller i samma kategori som rör och namnrör
Ett rör är ett medel för o ne sätt kommunikation mellan en läsare och en författare (båda är program) på samma dator. Den simulerar en ström av data (precis som t.ex. TCP).
Det vill säga inga individuella ”meddelanden” eller ”datablock” finns ur rörets synvinkel. Du kan kopiera vilken mängd data som helst i ”ena änden”, och någon annan kan läsa vilken mängd data som helst (inte nödvändigtvis samma och inte nödvändigtvis på en gång) i ”andra änden” i samma byteordning som du ”har tryckt in den .
Ett namn rör är, ja, helt enkelt ett rör som äger ett namn i filsystemet . Det vill säga att det är något som ser ut och beter sig precis som en fil, det visas i kataloglistan och du kan öppna den, skriva till den, etc. etc. Observera att du också kan skapa specialfiler för socklar (det skulle vara uttag.
Ett uttag är å andra sidan ett medel för tvåvägs (” duplex ”) -kommunikation, det betyder att du kan skriva till och läsa från samma uttag, och du behöver inte två separata uttag för en tvåvägskommunikation.
Ett uttag kan också fungera som en ström (identisk med ett rör ), eller det kan skicka diskreta, opålitliga meddelanden, eller det kan skicka diskreta, beställda meddelanden (de två första fungerar på vilken domän som helst, den sista bara på ”unix-domän”). Den kan skicka meddelanden (eller simulera en ström) till någon på en helt annan dator. Ett uttag kan till och med göra en form av en-till-många-kommunikation (multicast) under vissa förhållanden.
Med detta i åtanke är det uppenbart att uttag gör något mycket mer komplicerat och i allmänhet har mer overhead än rör (som i grunden inte är mer än en enkel memcpy
till och från en buffert!), men om du skapar lokala uttag (dvs. på samma dator), använder operativsystemet vanligtvis en kraftigt optimerad snabbväg, så det är verkligen inte så stor skillnad.
kommunikation mellan processer ibland nämns med avseende på nätverk
Ja, uttag är ett möjligt sätt för kommunikation mellan processer (delat minne och rör är exempel på alternativ). Allt på samma gång används de för ”nätverk”, som förklarats ovan.
Svar
Ett uttag en abstraktion . Det ger ett gränssnitt för applikationer för att använda en systemresurs (i detta fall nätverksanslutningen) på ett sätt som gör att operativsystemet kan förmedla och organisera användningen av en begränsad resurs av valfritt antal applikationer.
Om data som skickas genom uttaget kan ses som kuvert med post, så är uttaget din brevlåda. Du bifogar en brevlåda (uttag) till ditt hus (program) och lägger in din utgående e-post (data) i den. Vid en schemalagd tidpunkt kommer brevbäraren (operativsystemet) med och hämtar din utgående e-post och släpper in inkommande e-post i samma brevlåda. Din utgående post förmedlas på dina vägnar till mottagaren via postbilsbilen (nätverksanslutning) tillsammans med alla dina grannars post. Detta gör att du kan korrespondera med människor långt borta utan att det behövs kostnad, tid, svårigheter etc. att leverera brevet själv.
När det gäller varför de ”kallas” sockets ”väl, tanken att uppfinnarna får kalla det vad de vill spelar förmodligen en stor roll där. Det är dock inte ett dåligt namn enligt min mening 🙂
Svar
För udp eller tcp över IP,
En uttagsadress är kombinationen av en IP-adress och ett portnummer.
En IP-adress är adressen till en maskin på internet t.ex. unix.stackexchange.com has address 198.252.206.140
Men varje maskin måste kunna tillhandahålla mer än en tjänst, så de flesta maskiner tillhandahåller http (webbsidor) på port 80 och ssh på port 22 och så vidare.
Så unix.stackexchange.com:80
port 80
av unix.stackexchange.com
(ett uttag) är åtkomstpunkten för denna webbplats.
Det finns dock andra typer av uttag, se kommentarer nedan.
Kommentarer
- tcp / ip är bara en typ av uttag. Det finns andra som inte har något att göra med tcp / ip.
- hur många olika socklar finns det?
- @AbdulAlHazred, jag känner till fyra vanliga typer som används ip-nätverk, samma med ip6, två med unix och två med IPX. Jag har inte tittat på ax25, bankomat eller appletalk. Det finns andra protokoll som stöds på Linux, och det finns protokoll som Linux inte stöder. I de flesta fall har varje protokoll stream (tcp) och datagram (udp) sockets. Rå socklar är också vanliga, och imcp kan också ha ett sockelgränssnitt.
- Poängen är att detta svar är ofullständigt genom att det bara täcker en typ av sockel och vilseledande genom att det representerar sockets i allmänhet om de alltid var nätverksuttag och specifikt IP-uttag (
AF_INET
).
Svar
Jag tror att du frågade om nätverk. Så TCP-tjänster använder uttag som kommunikationspunkt och består av en IP-adress, protokoll och portnummer.