加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

TCP/IP协议栈之数据包怎样穿越各层协议

发布时间:2019-08-21 20:25:04 所属栏目:教程 来源:架构师之路
导读:全部互联网处事,均依靠于TCP/IP协议栈。分明数据是如安在协议栈传输的,将会辅佐你晋升互联网措施的机能息争决TCP相干题目的手段。 我们报告在Linux场景下数据包是如安在协议层传输的。 1. 发送数据 应用层发送数据的进程大抵如下: 我们把上述处理赏罚进程的

在172.17.0.2上操作MySQL客户端呼吁会见172.17.0.3上面的3306处事,如下图:

TCP/IP协议栈之数据包怎样穿越各层协议(绝对干货)

功效颠末长时刻守候,最终表现毗连不上。

处事器端抓包功效如下:

我们看到第一次握手数据包重复重传,跟上一个抓包功效险些千篇一律

TCP/IP协议栈之数据包怎样穿越各层协议(绝对干货)

操作netstat呼吁,查察有没有响应的TCP状态,功效发明有SYN_RECV状态,如下图:

TCP/IP协议栈之数据包怎样穿越各层协议(绝对干货)

有TCP状态,声名数据包进入处事器端TCP,并进入SYN_RECV状态,处事器端TCP会发送第二次握手数据包,但抓包表现并没有第二次握手数据包,声名被iptables设置干掉了。

查察netstat -s功效:

TCP/IP协议栈之数据包怎样穿越各层协议(绝对干货)

上图表现了尝试之前的值,下图表现了尝试之后的值。

TCP/IP协议栈之数据包怎样穿越各层协议(绝对干货)

从TCP层面信息来看,发送了17个数据分段,声名处事器端TCP发送了第二次握手数据包,并且发送了许多次,但由于配置了iptables,这些数据包被拦截掉了,以是到不了数据链路层,也就没法被tcpdump捕捉到。

从这两个尝试来看,tcpdump抓的数据包是一样的,都是在全力重传第一次握手数据包,但iptables配置的位置纷歧样,一个在进口,在TCP层无状态,一个在出口,在TCP层有状态。

进一步的说明可以实行下面两个偏向:

  • 通过说明TCP状态来区分这两种环境
  • 操作netstat -s给出的TCP/IP统计参数变革

通过上面尝试,我们看出tcpdump抓包只是从一个点来调查天下,并不能看到全貌,这个时辰就必要通过推理来帮助办理题目。

4. 隐藏协议层的滋扰

(1) 吸取数据

下图展示了数据包从NIC到协议栈,再到应用措施的进程。

TCP offload由NIC完成,目标是减轻TCP的事变量,但存在隐藏坑;在数据链路层,存在抓包接口,供tcpdump等抓包器材抓包,同时也存在着raw socket原始抓包方法接口;在收集层,存在raw socket抓包接口,IP Forward转发成果,尚有一整套Netfilter框架(存在大量坑的处所);在TCP层则相比拟力太平,滋扰少;用户措施通过socket接口从TCP取出数据可能获取新建毗连。

TCP/IP协议栈之数据包怎样穿越各层协议(绝对干货)

(2) 发送数据

下图展示了数据包从应用发送数据到NIC的进程。

用户措施通过socket接口来委托TCP发送数据可能成立毗连;在收集层,存在raw socket发包接口,尚有一整套Netfilter框架(存在大量坑的处所);在数据链路层,存在pcap发包接口,同时也存在着raw socket原始发包接口;TCP offload是NIC做的,目标为了晋升减轻TCP的事变量(好比分段,checksum),我们也碰着过因为TCP offload不妥导致的丢包题目。

TCP/IP协议栈之数据包怎样穿越各层协议(绝对干货)

(3) 案例

下面是一个从NIC吸取数据包,并一起到应用,再发送相应出去的案例:

我们的应用措施是Nginx(Web处事器软件),个中Nginx设置监听端口为8080,且开启access log。

TCP/IP协议栈之数据包怎样穿越各层协议(绝对干货)

上图配置了nginx keepalive_timeout = 0,即保持客户端空闲毗连(利便尝试)。

启动nginx,通过netstat查察,nginx已经在监听8080端口的毗连哀求。

TCP/IP协议栈之数据包怎样穿越各层协议(绝对干货)

刚开始nginx没有任何会见,access log都为空,iptables也没有配置。

TCP/IP协议栈之数据包怎样穿越各层协议(绝对干货)

在172.17.0.2呆板,操作telnet会见172.17.0.3上面的8080端口处事,如下图:

TCP/IP协议栈之数据包怎样穿越各层协议(绝对干货)

这样telnet跟nginx成立毗连,下图可以看出处事器端响应毗连已经进入ESTABLISHED状态。

TCP/IP协议栈之数据包怎样穿越各层协议(绝对干货)

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读