Size: a a a

2020 May 29

C

Constantine in Go-go!
был вроде особенный меншн, а-ля все админы, но я не помню как там делается )
источник

kr

kay rus in Go-go!
коллеги, а как TCP соединение понимает, что на вход получено N байт?
предположим у нас есть:
buf := make([]byte, 32)
n, err := conn.Read(buf)

n, предположим, присвоено 20. а err == nil. по какому принципу чтение прекратилось? почему не дожитается всех 32 байт?
источник

VM

Vladislav Milenin in Go-go!
Constantine
был вроде особенный меншн, а-ля все админы, но я не помню как там делается )
Не было
источник

p

pragus in Go-go!
kay rus
коллеги, а как TCP соединение понимает, что на вход получено N байт?
предположим у нас есть:
buf := make([]byte, 32)
n, err := conn.Read(buf)

n, предположим, присвоено 20. а err == nil. по какому принципу чтение прекратилось? почему не дожитается всех 32 байт?
странный вопрос
источник

kr

kay rus in Go-go!
pragus
странный вопрос
почему же? я бы понял если бы возвращалось io.EOF. но err же nil
источник

kr

kay rus in Go-go!
источник

p

pragus in Go-go!
kay rus
коллеги, а как TCP соединение понимает, что на вход получено N байт?
предположим у нас есть:
buf := make([]byte, 32)
n, err := conn.Read(buf)

n, предположим, присвоено 20. а err == nil. по какому принципу чтение прекратилось? почему не дожитается всех 32 байт?
ядро получает сегменты, смотрит на сиквенсы и отсылает передающей стороне (s)ack на них. но лучше посмотреть в книжку https://www.litres.ru/yon-sneyder/effektivnoe-programmirovanie-tcp-ip-45707295/
источник

kr

kay rus in Go-go!
pragus
ядро получает сегменты, смотрит на сиквенсы и отсылает передающей стороне (s)ack на них. но лучше посмотреть в книжку https://www.litres.ru/yon-sneyder/effektivnoe-programmirovanie-tcp-ip-45707295/
спасибо
источник

НС

Николай Сладкий... in Go-go!
крутая книжка!
источник

kr

kay rus in Go-go!
pragus
ядро получает сегменты, смотрит на сиквенсы и отсылает передающей стороне (s)ack на них. но лучше посмотреть в книжку https://www.litres.ru/yon-sneyder/effektivnoe-programmirovanie-tcp-ip-45707295/
я вот думаю избавиться от буффера и завернуть обработку трафика в reader/writer. но получив трафик, мне нужно знать размер TCP пакета. а как это сделать в reader/writer - хз.
источник

p

pragus in Go-go!
kay rus
коллеги, а как TCP соединение понимает, что на вход получено N байт?
предположим у нас есть:
buf := make([]byte, 32)
n, err := conn.Read(buf)

n, предположим, присвоено 20. а err == nil. по какому принципу чтение прекратилось? почему не дожитается всех 32 байт?
потому что в ядре сокет имеет пару буферов(для чтения и записи, регулируются через setsockopt SO_RCVBUF/SO_SNDBUF).  Когда вы зовёте read/recv в предоставленный буфер данные копируются. Если в ядре непрочитанных данных больше чем буфер что вы предоставили - вам положат что есть
источник

p

pragus in Go-go!
kay rus
я вот думаю избавиться от буффера и завернуть обработку трафика в reader/writer. но получив трафик, мне нужно знать размер TCP пакета. а как это сделать в reader/writer - хз.
в tcp нет пакетов.
источник

kr

kay rus in Go-go!
pragus
в tcp нет пакетов.
ipv4/ipv6
источник

p

pragus in Go-go!
kay rus
ipv4/ipv6
как только вы напишете свой userspace tcp/ip-стек.
источник

kr

kay rus in Go-go!
pragus
как только вы напишете свой userspace tcp/ip-стек.
т.е. просто так от buf := make([]byte, mssLen) не избавиться?
источник

p

pragus in Go-go!
kay rus
т.е. просто так от buf := make([]byte, mssLen) не избавиться?
зачем mssLen?
источник

kr

kay rus in Go-go!
pragus
зачем mssLen?
без разницы как оно называется. главное что от буфера типа []byte не избавиться? и переписать все на reader/writer не получится, если в пакет нужно преобразовать.
источник

p

pragus in Go-go!
kay rus
без разницы как оно называется. главное что от буфера типа []byte не избавиться? и переписать все на reader/writer не получится, если в пакет нужно преобразовать.
в какой пакет?  необходимость предоставлять буфер сделана умышленно
источник

p

pragus in Go-go!
kay rus
без разницы как оно называется. главное что от буфера типа []byte не избавиться? и переписать все на reader/writer не получится, если в пакет нужно преобразовать.
а какую проблему вы решаете?
источник

kr

kay rus in Go-go!
pragus
а какую проблему вы решаете?
пилю userspace vpn клиент. рабочий прототип есть, теперь пытаюсь оптимизацией заняться
источник