> Вообще-то для идентификации сеанса должно хватить знания > ISSa и ISSb.
Но ведь они могут совпасть у двух сеансов. Вероятность этого конечно мала, но все-таки :)
> Не дело tcp забивать себе голову адресом, у > него и поля-то такого нет в заголовках, это осталось на > уровне ip.
Насколько я понял после беглого копания в ядре Линукса, в tcp-ресивер передаются daddr, saddr, ip-опции.
/*
* A TCP packet has arrived.
* skb->h.raw is the TCP header.
*/
int tcp_rcv(struct sk_buff *skb, struct device *dev, struct options *opt,
__u32 daddr, unsigned short len,
__u32 saddr, int redo, struct inet_protocol * protocol)
---
Вся инфа о состоянии сеанса (адреса и порты получателя и отправителя, seq, ack, window...) хранится в структуре sock. Как поступивший пакет асоциируется с соответсвующим сокетом? Эты строчка наводит на мысль, что все-таки по IP и порту, а не по seq/ack.
sk = get_tcp_sock(saddr, th->source, daddr, th->dest, dev->pa_addr, skb->redirport);
З.Ы. Осмотр ядра был беглый. Если что не так, ногами не пинать =)
|