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

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

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

用户应用措施按照读变乱去执行读操纵,用户态空间进入到内核空间。内核把socket buffer内里的内容复制到用户指定的内存地区,然后把socket buffer读取过的内容开释,TCP增进吸取窗口巨细,假若有须要,会转达一个更新窗口的数据包给对端TCP。譬喻下图,TCP发送了一个ack数据包,用于关照对端TCP,本方TCP吸取窗口更新了。

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

读取操纵完成后,返回应用措施,应用措施就可以举办对数据举办处理赏罚了。

3. 抓包器材事变道理

知道了数据怎样发送和吸取往后,我们说明一下tcpdump抓包道理。

在数据链路层和IP层接壤的处所(属于数据链路层,如下图),是数据包被tcpdump捕捉的场合。

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

执行到这个接壤处时,内核会去查察tcpdump是否在监听,一旦有监听,就把数据包内容放入到tcpdump配置的缓冲区。理论上只要tcpdump实时去提取数据,在线上压力不大的环境下,抓包不会丢包。

tcpdump所抓到的数据包,仅仅是代表数据包颠末尾链路层和收集层之间的接壤处。从网卡进来的数据包将来的运气,也许是继承一起往前走到TCP,也有也许在IP层被干掉,尚有也许被路由转发出去;从本机发送出去的数据包,一旦被tcpdump捕捉到,声名已经到了数据链路层,没有被IP层过滤掉,由于假如数据包被IP层过滤掉,这些数据包就不会达到tcpdump捕捉点,也不会呈此刻抓包文件里。

下面我们通过一些尝试来验证上述结论。

尝试之前,我们先先容一下iptables器材。iptables是被普及行使的防火墙器材,它首要跟内核netfilter数据包过滤框架举办交互。

(1) 尝试 LOCAL_IN过滤

我们在处事器上面设置如下的iptables呼吁:

  1. iptables -I INPUT -p tcp --dport 3306 -s 172.17.0.2 -j QUEUE 

上述iptables呼吁配置了"-I INPUT"参数,意味着在netfilter LOCAL_IN钩子处执行上述iptables法则,即通往处事器端TCP之前,假如匹配到上述iptables法则,则会被放入方针QUEUE(默认环境下是直接扬弃数据包),不再继承前行。

详细呼吁执行见下图:

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

配置上述iptables后,当172.17.0.2会见172.17.0.3 3306处事时,IP数据包(如下图绿色箭头)会在处事器端IP层被扬弃掉,而赤色箭头所指偏向是tcpdump抓包的处所。

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

我们开启tcpdump抓包:

  1. tcpdump -i any tcp and port 3306 and host 172.17.0.2 -n -v 

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

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

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

处事器端抓包功效如下:

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

我们看到第一次握手数据包重复重传。

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

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

正常环境下,没有TCP状态,声名数据包没有进入处事器端TCP,第一次握手数据包在处事器端IP层被干掉了。

操作netstat -s呼吁,在处事器端TCP/IP统计参数里找线索:

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

上图处事器端IP层吸取到20079个数据包,下图吸取到20086个数据包,MySQL客户端登入进程累计增进了7个数据包,正好切合抓包文件表现的7个第一次握手数据包。

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

在处事器端TCP层,比拟上面两张图,数据没有任何变革,声名白处事器端TCP没有收到任何数据包。

尝试声名白在处事器端IP层进来的偏向干掉数据包,处事器端TCP层不会有任何变革。

(2) 尝试 LOCAL_OUT过滤

我们这次尝试的目标是查察IP层netfilter LOCAL_OUT环境下的抓包环境。

如下图:

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

我们配置如下iptables呼吁:

  1. iptables -I OUTPUT -p tcp --sport 3306 -d 172.17.0.2 -j QUEUE 

详细操纵如下图:

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

(编辑:湖南网)

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

热点阅读