Считает ли ядро Linux чексуммы для пакетов IP и TCP?
Пишу сервер, принимающий GET запрос и отвечающий на него через socket_raw. Принимаю от клиента пакет с флагом SYN; чтобы установить соединение с клиентом, приходится полностью конструировать заголовки IP И TCP чтобы поставить флаг SYN-ACK для поднятия TCP-сессии. Реализация через socket_raw обязательна, другой вариант не подойдет.
Вопрос:
1. Заполняет ли ядро Linux чексуммы для пакетов IP и TCP автоматически, если оставить их пустыми, или нужно делать это самому?
2. Можно ли реализовать отправку SYN-ACK через socket_raw, не редактируя заголовки, т.е. передать флаг и оставить построение заголовков ядру?
Жесть. Вот тут читал: habrahabr.ru/company/smart_soft/blog/184430/, что ядро таки что-то само делает, но ввиду необходимости менять флаги, судя по всему, придется все самому делать. Сумму IP посчитал, с TCP посложнее будет.
Верно ли, что клиенту TCP для поднятия сессии будет достаточно получить пакет SYN-ACK с правильными адресами, суммами и номером последовательности в TCP + 1?
Почти, после получения Syn-ack еще нужно отправить ack, что бы закончить рукопожатие, и тогда соединение будет установлено. Если мы не будем этого делать, у нас получится SYN-флуд.
@Color немного не понятно почему жесть. Если вы хотите реализовать свой протокол аналогичный TCP - обычно за основу берут UDP и не парятся с заголовками (тот же торрентовский utp). Вы же взяли тот вид сокетов, который используется только если нужно собрать нестандартные пакеты.
Я получаю от клиента запрос HTTP GET, а он идет поверх TCP. А жесть потому, что умаялся с суммами и с преобразованием данных в питоне)
Насчет отправки ACK: сессию инициирует клиент, я со стороны сервера только получаю SYN, отправляю SYN-ACK и жду ACK, а затем и данных, если я правильно понимаю. Клиент работает через обычные сокеты (не на низком уровне)
@Color именно так. Вообще мне очень сложно представить что заставило вас писать свой HTTP сервер на raw сокетах. Вам же столько всего нужно имплементить, и буферизацию пакетов, и контроль насыщения, и много прочего...