
Ho an'ireo izay Natokana ho amin'ny fahazoana tambajotra sy protocols.
fohifohy
Ny lahatsoratra dia miresaka momba ny fototry ny fampitana angon-drakitra azo antoka, mampihatra ohatra momba ny , anisan'izany ny UDP sy TCP. Miankina amin'ny , , ary ny boky "Computer Networks. Top-Down Approach", raha tsy izany dia i Tannenbaum sy Oliferov ihany no resahin'ny rehetra.
Ny protocol layer transport
Manome fifandraisana lojika eo amin'ny fizotran'ny fampiharana mandeha amin'ny mpampiantrano samihafa. Amin'ny fomba fijery fampiharana, ny fifandraisana lojika dia toy ny fantsona mampifandray mivantana ny fizotrany.

dia tohanan'ny rafitra farany, fa tsy amin'ny routers tambajotra (afa-tsy - ). Eo amin'ny lafiny mpandefa, ny soson'ny fitaterana dia mamadika ny angon-drakitra sosona fampiharana azony avy amin'ny fizotran'ny fangatahana fandefasana ho lasa fonosana sosona fitaterana antsoina hoe fizarana.

Izany dia atao amin'ny alalan'ny fisarahana (raha ilaina) ny hafatra sosona fampiharana ho sombiny ary manampy lohapejy sosona fitaterana ho an'ny tsirairay amin'izy ireo.

Ny soson'ny fitaterana avy eo dia mandalo ny fizarana mankany amin'ny soson'ny tambazotran'ny mpandefa, izay misy ny fizarana ao anaty fonosana sosona tambajotra (datagrama) ary alefa. Eo amin'ny faran'ny fandraisana, ny soson-tambajotra dia mamoaka ny fizarana sosona fitaterana avy amin'ny datagrama ary mampita izany mankany amin'ny soson'ny fitaterana. Manaraka, ny soson'ny fitaterana dia manodina ny ampahany voaray mba ho azon'ny fampiharana mandray ny angonany.

Fitsipiky ny fampitana angona azo antoka
Fandefasana angona azo itokisana amin'ny fantsona azo antoka tanteraka
Ny tranga tsotra indrindra. Ny lafiny fandefasana dia mandray fotsiny ny angona avy amin'ny sosona ambony, mamorona fonosana misy azy, ary mandefa izany any amin'ny fantsona.
mpizara
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 + надежный канал
}
}mpanjifa
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)
}
}Fifindran'ny angona azo itokisana amin'ny fantsona misy lesoka mety hitranga
Ny dingana manaraka dia ny fiheverana fa ny fonosana rehetra alefa dia raisina amin'ny filaharan'ny nandefasana azy, fa ny bits ao aminy dia mety ho simba noho ny zava-misy fa ny fantsona indraindray mampita angona miaraka amin'ny distortions.

Amin'ity tranga ity, ny mekanika manaraka dia ampiasaina:
- famandrihana fahadisoana;
- fanehoan-kevitra;
- retransmission.
Ireo protocole famindrana angon-drakitra azo itokisana izay manana fomba fiasa mitovy amin'ny famerimberenana ny fandefasana imbetsaka dia antsoina hoe protocols Automatic Repeat ReQuest (ARQ).
Fanampin'izany, ilaina ny mandinika ny mety hisian'ny fahadisoana amin'ny fandraisana, rehefa tsy mahazo fampahalalana momba ny vokatry ny famindrana ny fonosana farany ny mpandray anjara.
Ny vahaolana amin'ity olana ity, ampiasaina amin'ny TCP ihany koa, dia ny manampy saha vaovao amin'ny fonosana data misy ny laharan'ny fonosana.

Fifindran'ny angona azo itokisana amin'ny fantsona tsy azo ianteherana iharan'ny fanodinkodinana sy fahaverezan'ny fonosana
Miaraka amin'ny fanodinkodinana, indrisy, misy ny fahaverezan'ny fonosana ao amin'ny tambajotra.
Ary mba hamahana ity olana ity dia ilaina ny mekanika:
- famaritana ny zava-misy ny packet very;
- fanaterana indray ny fonosana very amin'ny mpandray.
Fanampin'izany, ankoatry ny fahaverezan'ny fonosana dia ilaina ny manome ny mety hisian'ny fahaverezan'ny tapakila na, raha tsy misy very, ny fandefasana azy miaraka amin'ny fahatarana lehibe. Amin'ny tranga rehetra dia mitovy ny atao: averina alefa ny fonosana. Mba hifehezana ny fotoana, ity mekanika ity dia mampiasa fameram-potoana fanisana, izay ahafahanao mamaritra ny fiafaran'ny elanelam-piandrasana. Ka ao anaty fonosana TCPKeepAlive dia napetraka amin'ny 15 segondra amin'ny alàlan'ny default:
// defaultTCPKeepAlive is a default constant value for TCPKeepAlive times
// See golang.org/issue/31510
const (
defaultTCPKeepAlive = 15 * time.Second
)Mila manomboka fameram-potoana isaky ny alefa ny fonosana iray (na voalohany na faharoa), mitantana ny fiatoana avy amin'ny fameram-potoana ary atsaharo izany.
Noho izany, nanjary nahafantatra ireo hevi-dehibe momba ny protocols famindrana angon-drakitra azo antoka izahay:
- checksums;
- laharan'ny fonosana;
- timer;
- fandraisana tsara sy ratsy.
Tsy izay ihany anefa!
Protokol famindrana angona azo itokisana miaraka amin'ny pipelining
Ao amin'ny variana izay efa nodinihintsika, ny protocol fanaterana azo antoka dia tena tsy mahomby. Manomboka "manalefaka" ny fampitana omen'ny fantsom-pifandraisana rehefa mitombo ny RTT. Mba hampitomboana ny fahombiazany sy ny fampiasana tsara kokoa ny fahafahan'ny fantsom-pifandraisana dia ampiasaina ny pipelining.

Ny fampiasana pipelining dia mitarika amin'ny:
- mampitombo ny isan'ny filaharana, satria ny fonosana nalefa rehetra (afa-tsy ny retransmissions) dia tsy maintsy fantatra manokana;
- ilaina ny hampitombo ny buffers amin'ny lafiny fampitana sy fandraisana.
Miankina amin'ny hetsika ataon'ny protocole amin'ny famaliana ny kolikoly, ny fahaverezana ary ny fahatarana ny laharan'ny filaharana sy ny haben'ny buffer. Raha ny pipelining dia misy fomba roa hanitsiana ny lesoka:
- avereno indray ny fonosana N;
- famerimberenana mifantina.
Miverina amin'ny fonosana N - protocole sliding window

Ny mpandefa dia tsy maintsy manohana karazana hetsika telo:
- antso amin'ny protocola avo lenta kokoa. Rehefa antsoina hoe "avy any ambony" ny asa fandefasana angon-drakitra, ny lafiny fandefasana dia manamarina aloha ny haavon'ny famenoana ny varavarankely (izany hoe ny fisian'ny hafatra nalefan'i N miandry ny fandraisana ny fandraisana). Raha foana ny varavarankely, dia misy fonosana vaovao avoaka sy ampitaina, ary havaozina ny sanda miovaova. Raha tsy izany, ny lafiny fandefasana dia mamerina ny angona any amin'ny sosona ambony, ary izany dia fanehoana an-kolaka fa feno ny varavarankely. Matetika ny sosona ambony dia hiezaka hampita ny angona indray rehefa afaka fotoana vitsivitsy. Amin'ny fampiharana tena izy, ny mpandefa dia mety hanohana ny angon-drakitra (fa tsy handefa izany avy hatrany) na hanana mekanika fampifanarahana (toy ny semaphore na saina) izay mamela ny sosona ambony hiantso ny asa fandefasana raha tsy misy ny varavarankely. .
- mandray fanamafisana. Ao amin'ny protocole, ho an'ny fonosana misy laharana N, dia misy fanekena ankapobeny navoaka izay manondro fa ny fonosana rehetra misy laharan'ny filaharana alohan'ny N dia voaray soa aman-tsara.
- tapitra ny elanelam-piandrasana. Mba hamaritana ny zava-misy momba ny fatiantoka sy ny fahatarana ny fonosana sy ny tapakila, ny protocol dia mampiasa fameram-potoana. Raha lany ny elanelam-potoanan'ny fe-potoana, dia alefan'ny lafiny fandefasana indray ireo fonosana tsy fantatra rehetra.
Famerimberenana mifantina
Rehefa lehibe ny haben'ny varavarankely sy ny vokatra fanemorana ny fampielezam-peo, dia mety hisy fonosana marobe ao anaty fantsona. Amin'ny tranga toy izany, ny hadisoan'ny fonosana tokana dia mety hahatonga ny fonosana marobe haverina, izay tsy nilaina ny ankamaroany.
ohatra
Ny tsara indrindra angonina amin'ny fampiharana azo ampiharina . Ary raha misy mahafantatra ny fomba tsara indrindra - .
mpizara
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"))
}
}mpanjifa
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)
}
}famaranana
Mekanisma hiantohana ny famindrana angona azo antoka sy ny fampiasana
rafitra
Fampiharana, hevitra
Jereo ny isa
Ampiasaina hamantarana ny lesoka bitika ao anaty fonosana alefa
fameram-potoana
Manisa ny elanelam-potoana fiatoana ary manondro ny fotoana lany. Ity farany dia midika fa amin'ny ambaratonga ambony dia very ny fonosana na ny tapakilany mandritra ny fandefasana. Raha misy fanemorana aterina ny fonosana, nefa tsy very (farany aloha ny fe-potoana tapitra), na very ny tapakila, ny fandefasana indray dia mitondra any amin'ny fonosana dika mitovy amin'ny lafiny fandraisana.
Nomeraon-tandahatra
Ampiasaina amin'ny fanisana isa amin'ny packet data alefa avy amin'ny mpandefa mankany amin'ny mpandray. Ny banga eo amin'ny laharan'ny packet voaray dia ahafahan'ny mpandray mahita ny fahaverezan'ny fonosana. Ny laharan'ny filaharan'ny fonosana mitovy dia midika fa dika mitovy ny fonosana
ny fandraisana ho mpikambana
Namboarina tamin'ny faran'ny mpandray ary manondro amin'ny faran'ny fandefasana fa voaray soa aman-tsara ny fonosana na vondron'ny fonosana mifanaraka amin'izany. Amin'ny ankapobeny dia misy ny laharan'ireo fonosana voaray soa aman-tsara ny fanekena. Miankina amin'ny protocole, ny fanamafisana ny tsirairay sy ny vondrona dia miavaka
Fanamafisana ratsy
Ampiasain'ny mpandray mba hampahafantarana ny mpandefa fa diso ny voaray ilay fonosana. Ny fanekena ratsy dia matetika ahitana ny laharan'ny fonosana izay tsy voaray tsara
Window, conveyorization
Fehezo ny isan'ny laharana azo ampiasaina handefasana fonosana. Ny multicast sy ny fifanomezan-tànana dia afaka mampitombo be ny fidirana amin'ny protocol raha ampitahaina amin'ny fiandrasana ny fankasitrahana. Araka ny ho hitantsika, ny haben'ny varavarankely dia azo kajy mifototra amin'ny fahaiza-manaon'ny fandraisana sy ny buffering amin'ny faran'ny fandraisana, ary koa ny haavon'ny enta-tambajotra.
Ohatra bebe kokoa amin'ny fampiasana Go ho an'ny tambajotra
В .
Source: www.habr.com
