Metheo ea Tšepahalang ea ho fetisoa ha data

Metheo ea Tšepahalang ea ho fetisoa ha data

Ho ba batla E ikemiselitse ho utloisisa marang-rang le liprothokholo.

Ka bokhutšoanyane

Sehlooho sena se bua ka lintho tsa motheo tsa phetiso ea data e tšepahalang, lisebelisoa tsa mehlala ka Go, ho kenyelletsa UDP le TCP. Ho ipapisitsoe le linako, два, tse tharo le libuka "Computer Networks. Top-Down Approach", ho seng joalo bohle ba bua ka Tannenbaum le Oliferov feela.

Protocol ea lera la lipalangoang

E fana ka khokahano e utloahalang lipakeng tsa lits'ebetso tsa ts'ebeliso tse sebetsang ho baamoheli ba fapaneng. Ho latela pono ea ts'ebeliso, khokahano e utloahalang e shebahala joaloka mocha o hokahanyang lits'ebetso ka kotloloho.

Metheo ea Tšepahalang ea ho fetisoa ha data

Liprothokholo tsa lera la lipalangoang li tšehetsoa ke litsamaiso tsa ho qetela, empa eseng ke li-routers tsa marang-rang (ntle le - DPI). Ka lehlakoreng la motho ea romelang, lera la lipalangoang le fetola data ea lera la kopo eo e e fumanang ho tsoa ts'ebetsong ea kopo ho lipakete tsa lera la lipalangoang tse bitsoang likarolo.

Metheo ea Tšepahalang ea ho fetisoa ha data

Sena se etsoa ka ho arola (haeba ho hlokahala) melaetsa ea lera la kopo likotoana le ho eketsa hlooho ea lera la lipalangoang ho e 'ngoe le e' ngoe ea tsona.

Metheo ea Tšepahalang ea ho fetisoa ha data

Joale lera la lipalangoang le fetisetsa karolo ho lera la marang-rang la motho ea romelang, moo karolo e kenngoa ka har'a pakete ea marang-rang (datagram) ebe e romeloa. Qetellong ea ho amohela, marang-rang a marang-rang a ntša karolo ea lera la lipalangoang ho tloha ho datagram ebe o e fetisetsa ho lera la lipalangoang. Ka mor'a moo, karolo ea lipalangoang e sebetsana le karolo e amoheloang e le hore data ea eona e fumanehe ho kopo e amoheloang.

Metheo ea Tšepahalang ea ho fetisoa ha data

Melao-motheo ea phetiso ea data e tšepahalang

Phetiso ea data e tšepahalang ka mocha o sireletsehileng ka ho felletseng

Taba e bonolo ka ho fetisisa. Lehlakore la ho romela le amohela feela data ho tloha karolong e ka holimo, le etsa pakete e nang le eona, ebe le e romela mocha.

Seva

package main

import (
    "log"
    "net"
)

func main() {
    // IP-адрес сервера и порт
    serverAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:12000")
    if err != nil {
        log.Fatal(err)
    }

    // создаем сокет с портом
    serverConn, err := net.ListenUDP("udp", serverAddr)
    if err != nil {
        log.Fatal(err)
    }
    // отложенное закрытие соединения
    defer serverConn.Close()

    // создаем буфер для данных
    buf := make([]byte, 1024)

    // ждем соединение
    for {
        // читаем запрос
        n, addr, err := serverConn.ReadFromUDP(buf)
        // передаем данные в ВЕРХНИЙ уровень: в нашем случае stdout
        println(string(buf[0:n]), " form ", addr.IP.String())
        if err != nil {
            log.Fatal(err)
        }
        // ответа нет, т.к. это UDP + надежный канал
    }
}

Moreki

package main

import (
    "fmt"
    "log"
    "net"
    "time"
)

func main() {
    // IP-адрес сервера и порт
    serverAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:12000")
    if err != nil {
        log.Fatal(err)
    }
    // локальный IP-адрес и порт
    localAddr, err := net.ResolveUDPAddr("udp", "127.0.0.1:0")
    if err != nil {
        log.Fatal(err)
    }
    // установка соединения
    conn, err := net.DialUDP("udp", localAddr, serverAddr)
    if err != nil {
        log.Fatal(err)
    }
    // отложенное закрытие соединения
    defer conn.Close()

    for {
        // получение данных от ВЕРХНЕГО уровня
        fmt.Print("Введите строчное предложение > ")
        var msg string
        _, err := fmt.Scanf("%s", &msg)
        if err != nil {
            log.Fatal(err)
        }
        // передается поток байт, а не строка
        buf := []byte(msg)
        // запись (передача) в соединение
        _, err = conn.Write(buf)
        if err != nil {
            log.Fatal(err)
        }
        // 1 секундочку
        time.Sleep(time.Second * 1)
    }
}

Phetiso ea data e tšepahalang ka mocha o nang le liphoso tse ka bang teng

Mohato o latelang ke ho nka hore lipakete tsohle tse fetisitsoeng li amoheloa ka tatellano eo li rometsoeng ka eona, empa likotoana tse ho tsona li ka 'na tsa senyeha ka lebaka la hore ka linako tse ling mocha o fetisetsa data ka ho sotha.

Metheo ea Tšepahalang ea ho fetisoa ha data

Tabeng ena, mekhoa e latelang e sebelisoa:

  • ho lemoha liphoso;
  • maikutlo;
  • phetiso.

Liprothokholo tse tšepahalang tsa phetisetso ea data tse nang le mekhoa e ts'oanang ea ho pheta phetiso ea phetisetso hangata li bitsoa liprothokholo tsa Automatic Repeat reQuest (ARQ).
Ho feta moo, ho bohlokoa ho nahana ka monyetla oa liphoso ho lirisiti, ha mokga o amohelang o ke ke oa fumana tlhahisoleseling mabapi le liphetho tsa phetisetso ea pakete ea ho qetela.
Tharollo ea bothata bona, e sebelisoang hape ho TCP, ke ho eketsa tšimo e ncha ho pakete ea data e nang le nomoro ea tatellano ea pakete.

Metheo ea Tšepahalang ea ho fetisoa ha data

Phetiso ea data e tšepahalang ka mocha o sa tšepahaleng o ipapisitse le ho sothoa le tahlehelo ea pakete

Hammoho le ho sotha, ka bomalimabe, ho na le tahlehelo ea pakete marang-rang.
'Me ho rarolla bothata bona, ho hlokahala mekhoa e latelang:

  • ho khetholla 'nete ea tahlehelo ea pakete;
  • ho tlisa diphuthelwana tse lahlehileng ho motho ya amohelang.

Ho phaella moo, ho phaella ho tahlehelo ea sephutheloana, hoa hlokahala ho fana ka monyetla oa ho lahleheloa ke rasiti kapa, haeba ho se letho le lahlehileng, ho tsamaisoa ha eona ka ho lieha ho hoholo. Maemong 'ohle, ho etsoa ntho e tšoanang: pakete e fetisetsoa hape. Ho laola nako, mochine ona o sebelisa nako ea ho bala, e u lumellang hore u tsebe hore na nako ea ho ema e felile neng. Kahoo ka har'a sephutheloana letlooa TCPKeepAlive e behiloe ho metsotsoana e 15 ka ho sa feleng:

// defaultTCPKeepAlive is a default constant value for TCPKeepAlive times
// See golang.org/issue/31510
const (
    defaultTCPKeepAlive = 15 * time.Second
)

Lehlakore le romellang le hloka ho qala sebali nako le nako ha pakete e fetisoa (ka lekhetlo la pele le la bobeli), sebetsana le litšitiso tse tsoang ho sebali sa nako ebe o se emisa.

Kahoo, re se re tloaelane le mehopolo ea bohlokoa ea liprothokholo tse tšepahalang tsa phetisetso ea data:

  • lichelete tsa lichelete;
  • linomoro tsa tatellano ea liphutheloana;
  • li-timers;
  • lirisiti tse ntle le tse mpe.

Empa ha se eona feela!

Protocol e tšepahalang ea phetisetso ea data e nang le pipelining

Phapang eo re seng re e nahanne, protocol e tšepahalang ea ho fana ha e sebetse haholo. E qala ho "fokotsa" phetiso e fanoang ke mocha oa puisano ha RTT e ntse e eketseha. Ho eketsa ts'ebetso ea eona le ho sebelisa matla a mocha oa puisano hamolemo, ho sebelisoa liphaephe.

Metheo ea Tšepahalang ea ho fetisoa ha data

Tšebeliso ea pipelining e lebisa ho:

  • ho eketsa palo ea linomoro tsa tatellano, kaha lipakete tsohle tse rometsoeng (ntle le bakeng sa li-retransmissions) li tlameha ho tsejoa ka mokhoa o ikhethileng;
  • tlhoko ea ho eketsa li-buffer mahlakoreng a ho fetisa le ho amohela.

Lenane la tatellano ea linomoro le litlhoko tsa boholo ba buffer li itšetlehile ka liketso tseo protocol e li nkang ho arabela bobolu ba pakete, tahlehelo le tieho. Tabeng ea pipelining, ho na le mekhoa e 'meli ea ho lokisa liphoso:

  • khutlisetsa lipakete tsa N morao;
  • phetapheto e kgethileng.

Ho khutlela morao lipakete tsa N - protocol ea fensetere e thellang

Metheo ea Tšepahalang ea ho fetisoa ha data

Motho ea rometseng o tlameha ho tšehetsa mefuta e meraro ea liketsahalo:

  • letsa ka protocol ea boemo bo holimo. Ha mosebetsi oa ho romela data o bitsoa "ho tloha holimo", lehlakore le romellang pele le hlahloba tekanyo ea ho tlatsa fensetere (ke hore, ho ba teng ha N melaetsa e rometsoeng e emetseng ho fumana li-receipt). Haeba fensetere e se na letho, ho hlahisoa pakete e ncha ebe e fetisoa, 'me litekanyetso tse fapaneng lia ntlafatsoa. Ho seng joalo, lehlakore le romellang le khutlisetsa data karolong e ka holimo, 'me sena ke pontšo e hlakileng ea hore fensetere e tletse. Ka tloaelo lera le ka holimo le tla leka ho fetisetsa data hape ka mor'a nako e itseng. Ts'ebetsong ea 'nete, moromelli a kanna a boloka data (ho e-na le ho e romela hang-hang) kapa a be le mokhoa oa ho hokahanya (joalo ka semaphore kapa folakha) o ka lumellang karolo e ka holimo ho letsetsa mosebetsi ha feela fensetere e se na letho. .
  • ho amohela netefatso. Ho protocol, bakeng sa pakete e nang le nomoro ea tatellano ea N, ho fanoa ka tumello e akaretsang e bontšang hore lipakete tsohle tse nang le linomoro tsa tatellano pele ho N li ile tsa amoheloa ka katleho.
  • nako ea ho leta e felile. Ho fumana lintlha tsa tahlehelo le ho lieha ha lipakete le lirisiti, protocol e sebelisa nako. Haeba nako ea nako e felile, lehlakore le romellang le romella lipakete tsohle tse sa amoheloang.

Pheta-pheta e khethang

Ha boholo ba fensetere le sehlahisoa sa ho lieha ho phatlalatsoa ha tlhahiso-pele se le seholo, palo e kholo ea lipakete e ka 'na ea e-ba liphaepheng. Boemong bo joalo, phoso e le 'ngoe ea pakete e ka etsa hore palo e kholo ea lipakete li fetisetsoe hape, tseo boholo ba tsona li neng li sa hlokehe.

Mohlala:

Ea mantlha teori litloaelo li bokelloa ts'ebetsong e sebetsang TCP. 'Me haeba motho e mong a tseba ho molemo ka ho fetisisa - amohelehile.

Seva

package main

import (
    "bufio"
    "fmt"
    "log"
    "net"
    "strings"
)

func main() {
    // создаем сокет с портом 
    ln, err := net.Listen("tcp", ":8081")
    if err != nil {
        log.Fatalln(err)
    }
    // ожидание вызова
    conn, _ := ln.Accept()

    for {
        // считывание данных
        msg, err := bufio.NewReader(conn).ReadString('n')
        if err != nil {
            log.Fatalln(err)
        }
        // вывод сообщения в stdout
        fmt.Print("Message Received:", string(msg))
        // перевод строки в верхний регистр
        newMsg := strings.ToUpper(msg)
        // отправка данных
        conn.Write([]byte(newMsg + "n"))
    }
}

Moreki

package main

import (
    "bufio"
    "fmt"
    "log"
    "net"
    "os"
)

func main() {
    // установка соединения
    conn, err := net.Dial("tcp", "127.0.0.1:8081")
    if err != nil {
        log.Fatalln(err)
    }

    for {
        // считывание данных с stdin
        reader := bufio.NewReader(os.Stdin)
        fmt.Print("Text to send: ")
        // построчно
        text, err := reader.ReadString('n')
        if err != nil {
            log.Fatalln(err)
        }
        // отправка
        fmt.Fprintf(conn, text+"n")
        // прием
        msg, err := bufio.NewReader(conn).ReadString('n')
        if err != nil {
            log.Fatalln(err)
        }
        // вывод полученного ответа
        fmt.Print("Msg from Server: " + msg)
    }
}

fihlela qeto e

Mekhoa ea ho netefatsa phetiso le ts'ebeliso ea data e tšepahalang

Mokhoa
Kopo, maikutlo

Sheba kakaretso
E sebedisetsoa ho bona liphoso tse nyane ka har'a pakete e fetisoang

Selekanyi
E bala nako ea ho tsoa 'me e bontša hore na e felile neng. Ea ho qetela e bolela hore ka tekanyo e phahameng ea monyetla oa hore pakete kapa risiti ea eona e lahlehe nakong ea phetisetso. Haeba pakete e tlisoa ka tieho, empa e sa lahleha (ho fela pele ho nako ea nako ea ho qeta nako), kapa rasiti e lahlehile, phetisetso e lebisa ho pakete e kopitsoang lehlakoreng le amohelang.

Nomoro ea letoto
E sebelisoa bakeng sa lipalo tse latellanang tsa lipakete tsa data tse fetisoang ho tloha ho moromeli ho ea ho moamoheli. Likheo lipalong tsa tatellano ea lipakete tse amoheloang li lumella moamoheli ho bona tahlehelo ea pakete. Linomoro tse tšoanang tsa tatellano ea pakete li bolela hore lipakete li kopitsoa ho tse ling

Bopaki
E hlahisoa ke ntlha ea ho amohela le ho bontša ho isa pheletsong e romelloang hore pakete e tsamaellanang le eona kapa sehlopha sa lipakete se amohetsoe ka katleho. Ka tloaelo, tumello e na le linomoro tsa tatellano ea lipakete tse amohetsoeng ka katleho. Ho ipapisitsoe le protocol, netefatso ea motho ka mong le ea sehlopha e khetholloa

Netefatso e mpe
E sebelisoa ke moamoheli ho tsebisa motho ea e rometseng hore pakete e amohetsoe ka phoso. Kamohelo e mpe hangata e kenyelletsa nomoro ea tatellano ea pakete e sa amoheloang ka nepo

Fesetere, conveyorization
Fokotsa palo ea linomoro tsa tatellano tse ka sebelisoang ho fetisa lipakete. Multicast le handshake li ka eketsa haholo ts'ebetso ea protocol ha e bapisoa le ho emela liteboho. Joalo ka ha re tla bona, boholo ba fensetere bo ka baloa ho ipapisitsoe le bokhoni ba kamohelo le buffering ea pheletso e amohelang, hammoho le boemo ba mojaro oa marang-rang.

Mehlala e meng ea ho sebelisa Go for networking

В bobolokelo.

Source: www.habr.com

Eketsa ka tlhaloso