TCP/IP协议栈之数据包怎样穿越各层协议
在172.17.0.2上操作MySQL客户端呼吁会见172.17.0.3上面的3306处事,如下图: 功效颠末长时刻守候,最终表现毗连不上。 处事器端抓包功效如下: 我们看到第一次握手数据包重复重传,跟上一个抓包功效险些千篇一律 操作netstat呼吁,查察有没有响应的TCP状态,功效发明有SYN_RECV状态,如下图: 有TCP状态,声名数据包进入处事器端TCP,并进入SYN_RECV状态,处事器端TCP会发送第二次握手数据包,但抓包表现并没有第二次握手数据包,声名被iptables设置干掉了。 查察netstat -s功效: 上图表现了尝试之前的值,下图表现了尝试之后的值。 从TCP层面信息来看,发送了17个数据分段,声名处事器端TCP发送了第二次握手数据包,并且发送了许多次,但由于配置了iptables,这些数据包被拦截掉了,以是到不了数据链路层,也就没法被tcpdump捕捉到。 从这两个尝试来看,tcpdump抓的数据包是一样的,都是在全力重传第一次握手数据包,但iptables配置的位置纷歧样,一个在进口,在TCP层无状态,一个在出口,在TCP层有状态。 进一步的说明可以实行下面两个偏向:
通过上面尝试,我们看出tcpdump抓包只是从一个点来调查天下,并不能看到全貌,这个时辰就必要通过推理来帮助办理题目。 4. 隐藏协议层的滋扰 (1) 吸取数据 下图展示了数据包从NIC到协议栈,再到应用措施的进程。 TCP offload由NIC完成,目标是减轻TCP的事变量,但存在隐藏坑;在数据链路层,存在抓包接口,供tcpdump等抓包器材抓包,同时也存在着raw socket原始抓包方法接口;在收集层,存在raw socket抓包接口,IP Forward转发成果,尚有一整套Netfilter框架(存在大量坑的处所);在TCP层则相比拟力太平,滋扰少;用户措施通过socket接口从TCP取出数据可能获取新建毗连。 (2) 发送数据 下图展示了数据包从应用发送数据到NIC的进程。 用户措施通过socket接口来委托TCP发送数据可能成立毗连;在收集层,存在raw socket发包接口,尚有一整套Netfilter框架(存在大量坑的处所);在数据链路层,存在pcap发包接口,同时也存在着raw socket原始发包接口;TCP offload是NIC做的,目标为了晋升减轻TCP的事变量(好比分段,checksum),我们也碰着过因为TCP offload不妥导致的丢包题目。 (3) 案例 下面是一个从NIC吸取数据包,并一起到应用,再发送相应出去的案例: 我们的应用措施是Nginx(Web处事器软件),个中Nginx设置监听端口为8080,且开启access log。 上图配置了nginx keepalive_timeout = 0,即保持客户端空闲毗连(利便尝试)。 启动nginx,通过netstat查察,nginx已经在监听8080端口的毗连哀求。 刚开始nginx没有任何会见,access log都为空,iptables也没有配置。 在172.17.0.2呆板,操作telnet会见172.17.0.3上面的8080端口处事,如下图: 这样telnet跟nginx成立毗连,下图可以看出处事器端响应毗连已经进入ESTABLISHED状态。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |