Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
Да, фрагментация идет уровне ниже, но фрагментированные пакеты никуда не дойдут в современном Интернете, думаю.
Я к тому, что если если sendto в UDP более допустимного размера пакета (в случае запрета фрагментаци размер наверное ограничен MTU), то тебе дадут пососать EMSGSIZE , не?
А про MTU и запрет фрагментации не уверен. Скорее молча дропнет и/или какое-нибудь ICMP кинет в ответ, на которое всем пофиг. Ну короче я бы не надеялся на внятную ошибку тут.
By default, Linux UDP does path MTU (Maximum Transmission Unit)
discovery. This means the kernel will keep track of the MTU to a
specific target IP address and return EMSGSIZE when a UDP packet
write exceeds it. When this happens, the application should
decrease the packet size.
Случайная ОС может отлично фрагментнуть твой пакет, и послать его в далнее плавание, где его ебанёт первый маршрутизатор, не послав в ответ никакого ICMP.
Будет такая черная дыра. Собссно, ради этого MTU black hole discovery и запилили.
Но в UDP вообще никаких гарантий нет:) Ты просто пишшеь себе, и надеешься, что оно куда-то дойдет
Опять же, откуда твоё ядро знает, какое там MTU по дороге? Разве что по ICMP ответам, на которые все ложат хуй. Кто-нибудь по дороге проебёт это ICMP и ты никогда и не узнаешь, что пакет великоват был.
>Разве что по ICMP ответам, на которые все ложат хуй.
Есть такое. И тогда MTU приходится вручную уменьшать.
У меня такое было пару раз: вроде работает Интернет, но хуёво. Значит, какой-то пидор по дороге грохает пакет без отсылки ICMP. Уменьшаешь MTU -- работает хорошо.
> А иногда наоборот могут на 2 пакета развалиться и половинками придти. TCP сокет -- это поток байтов без чётких границ между ними.
О, про это тоже смешная история была. Приходит как-то в @elasticsearch_ru человек и спрашивает: Ребят, а у меня почему-то логи длиннее килобайта не приходят, в чем дело? В смысле зачем я TCP input выбрал?
бля
Это нормально. А иногда наоборот могут на 2 пакета развалиться и половинками придти. TCP сокет -- это поток байтов без чётких границ между ними.
Deal with it.
Я к тому, что если если sendto в UDP более допустимного размера пакета (в случае запрета фрагментаци размер наверное ограничен MTU), то тебе дадут пососать EMSGSIZE , не?
А про MTU и запрет фрагментации не уверен. Скорее молча дропнет и/или какое-нибудь ICMP кинет в ответ, на которое всем пофиг. Ну короче я бы не надеялся на внятную ошибку тут.
https://man7.org/linux/man-pages/man7/udp.7.html
Но там дальше написано, что можно и отключить.
> Linux
Ну ты понел. Т.е. ошибку получить можно, но гарантий тут никаких, может и молча дропнуть по дороге.
Случайная ОС может отлично фрагментнуть твой пакет, и послать его в далнее плавание, где его ебанёт первый маршрутизатор, не послав в ответ никакого ICMP.
Будет такая черная дыра. Собссно, ради этого MTU black hole discovery и запилили.
Но в UDP вообще никаких гарантий нет:) Ты просто пишшеь себе, и надеешься, что оно куда-то дойдет
Но там еще часто идет на заголовок IP, и на всякие порты UDP, так что наверное ты прав, где-то 500
а, так вот как форма на kremlin.ru работает
Ну Борманд, ты же старый админ
https://tools.ietf.org/html/rfc1191
>Разве что по ICMP ответам, на которые все ложат хуй.
Есть такое. И тогда MTU приходится вручную уменьшать.
У меня такое было пару раз: вроде работает Интернет, но хуёво. Значит, какой-то пидор по дороге грохает пакет без отсылки ICMP. Уменьшаешь MTU -- работает хорошо.
О, про это тоже смешная история была. Приходит как-то в @elasticsearch_ru человек и спрашивает: Ребят, а у меня почему-то логи длиннее килобайта не приходят, в чем дело? В смысле зачем я TCP input выбрал?
Я сам когда-то налетал на эти грабли когда свою первую прогу с сетью писал. Мелкие редкие сообщения то норм доходят.