【Socket网络通信 | 1.协议-工具分享】

本文介绍了网络协议的概念,包括OSI模型和TCP/IP模型,强调了理解协议在解决网络问题中的重要性。此外,详细探讨了WireShark的捉包原理,包括在不同网络环境下的捉包方法,如直接捉包、集线器环境和交换机环境。最后,阐述了Socket在网络通信中的应用,不仅限于网络通信,还可用在蓝牙、红外等领域。

目录

第一章 协议概念的理解

前言

一、WireShark捉包

二、Socket 可以用于哪些地方?


第一章 协议概念的理解


前言

        为什么要学习网络编程?对于大多复杂的网络环境,单纯的学习Socket网络编程,相互发送协议,完成网络之间的数据收发已经无法满足。明白整个协议的过程,可以帮助解决实际问题,碰到网络问题,能迅速定位原因。

        这里先提一下大家见得,或者听得比较多的一个,叫OSI模型的东西,它定义了在七个层次结构上的不同系统/不同网络之间,实现可靠通信的模型;而现在大家更多见识到的,应该是TCP/IP模型,实际上,TCP/IP模型只是目前对OSI模型的一种实现。(封装的每一层实际上都为了解决在各个层级结构所会碰到的问题)

        抽象出来的TCP/IP模型只有4层结构(5层,视乎是否有把物理层作为单独一层做理解),为了更好理解网络协议,先简化按4层进行理解:

        ①网络介质层(封装成网络通信所需要的地址,也就是大家熟知的 mac 地址)

        物理层——为了解决在硬件设备上,如何进行通信(类似百兆网口、千兆网口,在物理意义上用的通信线数量上也不对等;其中网卡更是帮我们解决了模拟信号和数字信号的转变)

        ②网络(IP)层(IPv4/IPv6)——实现 源IP 地址 -->目标 IP 地址

        上层其实已经完成了设备与设备物理层的连接,而物理连接有很多设备同时挂载的时候,如何确定具体由某个设备发送或者具体哪个设备接收;再举个栗子,局域网内都挂载着多个设备,此时经由交换机传输过来的信息,需要具体哪个设备接收,单单依靠上层已经无法解决,此时需要把设备封装出一个IP地址。那么程序猿在这一层需要做的就是,实现IP层的通信

既然MAC地址是唯一的,为什么还需要IP地址?_一直走,不要回头-CSDN博客_为什么需要ip地址

        (普及一下,虽然IPv6推出很久了,但IPv4仍然是主流,因为目前很多虚拟网络技术,使得当初出于对 IPv4 只用4个字节存储 IP地址的种类不够的担忧,得到很好缓解,目前仍然足够使用)

        


        实际上,数据在发送过程中,在不同的层级结构上,对其数据做不同的封装,会在原始数据中添加相应的报头,这个操作俗称:“打包”。

 

 上图假设右边从一个客户端发送信息到服务端,类似FTP向服务端借助输入的用户名以及密码发起登录请求时,

        用户数据:登录指令或者其他信息请求

        APP头部:把用户登录的信息作为APP头加入到数据中(FTP是应用层协议)

                                          ↓

                                          ↓(Socket Send)

                                          ↓ 

        TCP头部:系统会根据用户配置的属性,把源端口信息、目标端口信息、序列信息等,作为TCP头部添加至数据前

        IP头部:再根据源IP地址、发送目标的IP地址作为IP头部加入到数据

        以太网字段:最终经过网卡时(因为需要硬件上的支持,经过硬件上的传输校验),会把以太网的头部尾部整理到数据的前后两端

 以上是数据进入协议栈时,封装的信息↑


 当然最终解包也是按照当前的打包过程来进行反向操作



一、WireShark捉包

1、捉包原理

1)网络原理

①本机环境——直接捉包本机网卡的进出流量

WireShark直接绑定网卡,不需要借助外界的集线器、路由器等第三方设备,直接捉取网卡的进出流量。

②集线器环境——流量泛洪

举例:PC1/2/3连接到集线器中,并进行通信;当PC2、PC3发送序包给集线器的网络中,由于集线器的特性是物理层产品,无法看懂MAC地址/IP地址,工作方式又是从源端口收到信息后,发送给除源端口外的其他端口都泛洪。而其中PC1安装了WireShark工具,就可以捉取到同一个集线器(局域网)中,其他电脑发送来的序包

③交换机环境——端口镜像、ARP欺骗、MAC泛洪

端口镜像

上面说到集线器是一种物理层产品,而交换机是一种链路层和网络层产品,转包是完全按照内部的MAC地址表进行通信,PC2和PC3的包是很难通过交换机流到PC1的网卡上,因而很难捉得到。但是也不是完全没有办法,可以通过在交换机中做一个策略,就是一个(SPAN技术)端口镜像,实际上就是将交换机其他两个端口的流量拷贝一份到PC1端口,把PC1网卡设置成混杂模式,就能进行捉包。(目前校园网络管理软件等进行安全监控都会用到)

ARP欺骗

没有权限在端口处做镜像技术,但又想窃取其他端口的流量时,可以通过 Cain & Abel 软件进行ARP攻击。平常由于交换机有MAC地址表存在,PC2和PC3的流量没法到PC1处,如果PC2想和PC3通信,一般都会发起ARP请求(广播),交换机收到广播包后,会发给其他端口,而PC1收到时,正常情况下会丢弃掉,因为不属于自己的IP地址,而PC3会回复交换机,说明自己是IP3,对应着MAC3;PC1如果安装了 ARP 软件的话,会进行ARP欺骗,说自己是IP3,对应MAC1。

PC2本来应该收到来自IP3对应MAC3的数据包, 并给予回复,而PC1和PC3实际上都给了PC2回复,由于ARP特性后到优先,PC2会拿到PC1回复的信息也给予回复,此时就能实现PC1获取到PC2和PC3的序包。

MAC泛洪

PC1通过泛洪大量的垃圾包,产生大量的MAC地址,交换机会被产生的大量MAC地址“爆表”,原来对应的MAC地址表则被挤出去了,而交换机如果收到的序包是一种未知帧,则会对外泛洪,PC2和PC3查不到对应的MAC地址表,就会泛洪出去

2)底层原理

①Win/Libpcap 底层驱动:WireShark捉包依赖的库文件,提供通用捉包接口

②Capture 捉包引擎:利用底层驱动捉取网络数据包,从不同类型的网络接口捉取数据

③Wiretap 格式支持:从捉包文件中读取数据包,支持多种文件格式,帮助解读

④Core核心引擎:通过函数调用将其他模块连接,联动调度

Protocol-Tree:保存数据包协议消息,WireShark协议结构采用树形结构,解析协议报文时只需要从根节点通过函数句柄依次调用各层解析函数

Dissector:各种协议解码器,对于各种解码器,都能识别出协议字段(field),并显示出字段值

Plugin:一些协议解码器以插件的形式出现

Display-Filter:显示过滤引擎

⑤GTK 1/2 图形处理工具:处理用户的输入输出显示(也是用户最终看到的整个页面)

二、Socket 可以用于哪些地方?

        Socket 虽然在网络通信上遇到较多,不单单可以用于网络通信;甚至蓝牙、红外等等都可以用得上;因此说它只是个,通过操作系统与底层硬件进行通信的介质;

        当用户往 Socket 接口里写入数据时,操作系统会不断从 Socket 接口中读取,调用接口按协议对数据进行封装并借由硬件进行发送;因此接收程序和发送程序,都不是实时的。并不是一调用函数就会立马发出去;当然在单片机系统的话,由于硬件原因,很多通信都是直接给电平信号过去,因此看起来像是实时的;而WINDOWS和LINUX系统都不是实时的系统,这也是他们不同的地方。而 Socket 的好处就在于数据相对安全,稳定可靠,因为如果是由用户去实现两个程序之间的收发同步,是非常难实现的,发出去的数据,对方程序不一定立刻就能接收;但 Socket 不需要用户去管理底层,底层的收发同步已经给实现了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值