三次握手

最近,由于需要模拟3次握手,所以把tcp协议稍微升入的了解了下。

最后完成一个demo,模拟web服务器同客户端建立tcp连接,并返回模拟的http响应。

代码量很小,注意点有几点。

一:seq和ack_seq需要变化,三次握手中,服务器的syn+ack响应中,seq为随机值,如为1,而ack_seq是客户端的seq + 1。

二:数据传输中,http响应的seq是三次握手中的seq + 1, 而ack_seq是客户端请求的seq + http报文的长度

三 : tcp和ip的校验和计算需要注意。计算之前需要先把checksum置0,并且校验和的长度是整个tcp报文的长度。既三次握手中直接是tcp->doff << 4,而数据传输中是tcp->doff + http的长度。

注:wireshake很坑爹,校验和计算不对,报文显示也是绿色(正常) 。所以我拷贝代码时,忘记修改tcp的长度,结果校验和计算不对,而wireshake显示正常,但是客户端死活收不到服务器模拟的http 响应。导致这个问题查了很久。 

你可能感兴趣的:(tcp三次握手)