当前位置: 首页 > news >正文

重头开始嵌入式第三十天(Linux系统编程 ip头)

目录

1.常用网络测试工具

1、telnet  远程登录工具,默认都是系统安装。

2、netstat  测试查看网络端口使用情况

3、ping 命令  测试网路的联通状况

4、arp 地址解析命令

5.1 wireshark  ==>可视化界面

5.2 tcpdump  ==》命令行 ===>www.tcpdump.com

2.ip头

3.TCP头

4.UDP头

5.HTTP协议

6.setsockopt函数

7.网络爬虫


1.常用网络测试工具


大概介绍 :telnet  netstat  ping  arp   wireshark  tcpdump
ssh2。

安装命令: 
secure crt 
sudo ufw disable
sudo apt-get install openssh-server openssh-client 
sudo apt-get install wireshark


1、telnet  远程登录工具,默认都是系统安装。


使用格式: telnet ip地址  端口
   eg: telnet 192.168.1.1  8888
注意:如果没有写端口,则默认登录23 号端口。


2、netstat  测试查看网络端口使用情况


netstat -anp 
netstat -n  ===>列出当前所有网络端口使用情况
netstat -n -t  ===>列出所有TCP通信的端口信息
netstat -n -u  ===>列出所有UDP通信的端口信息

netstat -n -i   ===>列出默认接口上的通信信息
netstat -lnp |grep 8888  ===>查看指定端口上的通信详情


3、ping 命令  测试网路的联通状况


ping ip地址
ping 域名


4、arp 地址解析命令


arp -an  ===>列出当前主机的地址ARP表
arp -d  ip地址


5、抓包工具  


5.1 wireshark  ==>可视化界面

选择指定IP,端口抓包:tcp.port == 50000 && tcp.ip  == 192.168.0.183
tcpdump 
过滤规则:
1、根据ip地址过滤:ip.src == x.x.x.x
   ip.dst == x.x.x.x
2、根据端口过滤:tcp.srcport == xx;
 tcp.dstport == xx;
 udp.srcport == xx;
 udp.dstport == xx;
3、根据协议类型过滤:
tcp   udp  icmp .....
4、任意组合以上条件抓包:
如果与的关系:  and
ip.src == 192.168.1.100 and tcp.dstport == 9999
如果或关系 :   or
ip.src == 192.168.1.100 or ip.dst == 192.168.1.102

tcp host 192.168.1.100
sudo tcpdump -n -i eth0 -xx src or dst www.taobao.com -AXX -vv|less 


5.2 tcpdump  ==》命令行 ===>www.tcpdump.com


1、tcpdump -n ===>在默认的网卡上开始抓包。
2、根据ip过滤: tcpdump -n  src  x.x.x.x  
    tcpdump -n  dst x.x.x.x
  抓192.168.0.130上面发出和接受到的数据包
  sudo tcpdump -n -x src or dst  192.168.0.130 
3、查看包中的内容:
tcpdump -n -x src x.x.x.x
tcpdump -n -x dst x.x.x.x

tcpdump -n -x src x.x.x.x  >xxx.log

4、根据端口过滤:
tcpdump -n src port xx
tcpdump -n dst port xx
tcpdump -n -p tcp port xx
tcpdump -n udp port xx
tcpdump -n port xx
5、根据协议过滤:
    tcpdump -n -p icmp/tcp/udp

6、根据指定接口过滤:
tcpdump -n -i eth0
tcpdump -n -i lo

7、根据以上各种条件组合抓包:
与关系:  and
或关系:  or


2.ip头


(1)版本 占4位,指IP协议的版本。通信双方使用的IP协议版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)。关于IPv6,目前还处于草案阶段。 

(2)首部长度 占4位,可表示的最大十进制数值是15。请注意,这个字段所表示数的单位是32位字长(1个32位字长是4字节),因此,当IP的首部长度为1111时(即十进制的15),首部长度就达到60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此数据部分永远在4字节的整数倍开始,这样在实现IP协议时较为方便。首部长度限制为60字节的缺点是有时可能不够用。但这样做是希望用户尽量减少开销。最常用的首部长度就是20字节(即首部长度为0101),这时不使用任何选项。 

(3)区分服务 占8位,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998年IETF把这个字段改名为区分服务DS(Differentiated Services)。只有在使用区分服务时,这个字段才起作用。 

(4)总长度 总长度指首部和数据之和的长度,单位为字节。总长度字段为16位,因此数据报的最大长度为216-1=65535字节。 
在IP层下面的每一种数据链路层都有自己的帧格式,其中包括帧格式中的数据字段的最大长度,这称为最大传送单元MTU(Maximum Transfer Unit)。当一个数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层的MTU值。 

(5)标识(identification) 占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。 

(6)标志(flag) 占3位,但目前只有2位有意义。 
● 标志字段中的最低位记为MF(More Fragment)。MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个 
● 标志字段中间的一位记为DF(Don’t Fragment),意思是“不能分片”。只有当DF=0时才允许分片。 

(7)片偏移 占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,每个分片的长度一定是8字节(64位)的整数倍。 

(8)生存时间 占8位,生存时间字段常用的的英文缩写是TTL(Time To Live),表明是数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在因特网中兜圈子,因而白白消耗网络资源。最初的设计是以秒作为TTL的单位。每经过一个路由器时,就把TTL减去数据报在路由器消耗掉的一段时间。若数据报在路由器消耗的时间小于1秒,就把TTL值减1。当TTL值为0时,就丢弃这个数据报。 

(9)协议 占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。 

(10)首部检验和 占16位。这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。 

(11)源IP地址 占32位。 

(12)目的IP地址 占32位。

98f85001b4ce4cc0ad8d6adf7bdfe4df.png

3.TCP头

TCP(Transmission Control Protocol,传输控制协议)头是 TCP 报文段的首部。
 
一、结构组成
 
1. 源端口和目的端口:各占 16 位,用于标识发送方和接收方的应用程序。
2. 序号:占 32 位,指出本报文段所发送数据的第一个字节的序号。
3. 确认号:占 32 位,期望收到对方下一个报文段的第一个数据字节的序号。
4. 数据偏移:占 4 位,指出 TCP 报文段的数据起始处距离 TCP 报文段起始处有多远。
5. 保留:占 6 位,保留为今后使用,目前应置为 0。
6. 标志位:
- URG:紧急指针有效标志。
- ACK:确认序号有效标志。
- PSH:接收方应该尽快将这个报文段交给应用层。
- RST:重置连接标志。
- SYN:同步序号,用于建立连接。
- FIN:发送方完成数据发送标志。
7. 窗口:占 16 位,告诉对方自己的接收窗口大小,用于流量控制。
8. 校验和:占 16 位,用于检验 TCP 报文段在传输过程中是否出现错误。
9. 紧急指针:占 16 位,指出本报文段中紧急数据的最后一个字节的序号。
 
二、作用
 
1. 建立和终止连接:通过 SYN、ACK、FIN 等标志位实现连接的建立和关闭。
2. 可靠传输:利用序号和确认号确保数据的按序到达和不丢失。
3. 流量控制:通过窗口字段控制发送方的数据发送速度,避免接收方缓冲区溢出。
4. 错误检测:校验和用于检测报文段在传输过程中的错误。
090071a78068444cb6e11c881da7f291.png

4.UDP头

UDP(User Datagram Protocol,用户数据报协议)头是 UDP 数据报的首部。

一、结构组成

1. 源端口:占 16 位,标识发送方的应用程序。

2. 目的端口:占 16 位,标识接收方的应用程序。

3. 长度:占 16 位,指出 UDP 数据报的长度,包括首部和数据部分。

4. 校验和:占 16 位,用于检测 UDP 数据报在传输过程中是否出现错误。如果校验和计算结果为 0,则表明不进行校验。

二、作用

1. 简单快速传输:UDP 是一种无连接的协议,不需要建立连接的过程,因此传输速度快,适用于对实时性要求较高的应用,如视频流、音频流等。

2. 低开销:UDP 头部相对简单,比 TCP 头部的开销小。

3. 不可靠传输:UDP 不提供可靠传输机制,不保证数据的按序到达、不重复和不丢失。但在一些特定场景下,如实时通信,对少量数据丢失的容忍度较高,可以通过上层应用进行错误处理。

e28187eb208a465da3a6859614cb8638.png

5.HTTP协议

HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。

一、主要特点

1. 简单快速:客户端向服务器请求服务时,只需传送请求方法和路径。

2. 灵活:HTTP 允许传输任意类型的数据对象,正在传输的类型由 Content-Type 加以标记。

3. 无连接:每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接,以节省传输时间。(HTTP/1.1 版本后默认采用持续连接,即只要客户端服务端双方都没有提出断开连接,则保持连接状态,以提升传输效率。)

4. 无状态:HTTP 协议是无状态协议,对事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。

二、工作流程

1. 客户端与服务器建立连接。

2. 客户端向服务器发送请求,请求包括请求方法(如 GET、POST 等)、请求 URI 和协议版本等信息。

3. 服务器接收请求并进行处理,然后向客户端返回响应,响应包括协议版本、状态码、响应头和响应体等内容。

4. 客户端接收响应并进行处理,根据响应内容进行相应的操作,如显示网页、下载文件等。

三、常用请求方法

1. GET:用于请求指定的资源,通常用于获取数据。

2. POST:用于向指定资源提交数据,通常用于提交表单数据或上传文件。

3. PUT:用于向指定资源上传其最新内容。

4. DELETE:用于删除指定的资源。

四、状态码

1. 1xx:指示信息,表示请求已接收,继续处理。

2. 2xx:成功,表示请求已被成功接收、理解、接受。例如 200 OK 表示请求成功。

3. 3xx:重定向,表示要完成请求,需要进一步操作。例如 301 Moved Permanently 表示资源已被永久移动到新位置。

4. 4xx:客户端错误,表示客户端请求有错误。例如 404 Not Found 表示请求的资源不存在。

5. 5xx:服务器错误,表示服务器在处理请求时发生错误。例如 500 Internal Server Error 表示服务器内部错误。

9cb3c640fecb481b94827edfa8a5ef45.png

6.setsockopt函数

setsockopt 是一个在网络编程中常用的函数,用于设置套接字选项。

一、函数原型

在 C 和 C++中,其函数原型通常如下:

int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen);

-  sockfd :套接字描述符,指定要操作的套接字。

-  level :选项级别,通常是 SOL_SOCKET(套接字级别选项)或 IPPROTO_TCP(TCP 协议级别选项)等。

-  optname :要设置的具体选项名称。

-  optval :指向包含选项值的缓冲区。

-  optlen :选项值缓冲区的长度。

二、主要用途

1. 设置套接字的各种属性和行为:

- 例如,设置套接字为可重用地址(SO_REUSEADDR),在服务器快速重启时很有用,可以避免“Address already in use”错误。

- 设置发送和接收缓冲区大小(SO_SNDBUF 和 SO_RCVBUF),以优化网络性能。

- 设置超时时间(如 SO_RCVTIMEO 和 SO_SNDTIMEO),防止在某些操作上无限等待。

2. 影响网络通信的特定方面:

- 开启或关闭广播选项(SO_BROADCAST),允许或禁止套接字发送广播数据。

- 设置 TCP_NODELAY 选项以禁用 Nagle 算法,减少小数据包的延迟,但可能会增加网络流量。

三、返回值

成功时返回 0,失败时返回 -1,并设置  errno  以指示错误类型。常见的错误包括无效的套接字描述符、不支持的选项级别或选项名称等。

7.网络爬虫

网络爬虫是一种自动获取网页内容的程序。

一、工作原理

1. 首先,指定一个或多个起始 URL。

2. 爬虫程序向这些 URL 发送请求,服务器响应后,爬虫接收网页内容。

3. 分析网页内容,提取出其中的链接。

4. 对新发现的链接重复上述过程,不断地遍历网页,以获取更多的信息。

二、主要用途

1. 搜索引擎构建:搜索引擎使用网络爬虫来收集互联网上的网页信息,建立索引,以便用户能够快速搜索到相关内容。

2. 数据采集:企业或研究者可以利用网络爬虫收集特定领域的数据,如商品价格、新闻文章、社交媒体信息等,进行数据分析和挖掘。

3. 网站监测:监测竞争对手的网站变化、行业动态等。

三、面临的挑战

1. 反爬机制:许多网站为了保护自己的内容和资源,会设置各种反爬措施,如验证码、IP 封锁、限制访问频率等。爬虫需要不断改进技术来应对这些反爬机制。

2. 法律和道德问题:在进行网络爬虫时,必须遵守法律法规和道德规范,不得侵犯他人的知识产权和隐私,也不能对网站造成过大的负担。

3. 数据质量:爬取到的数据可能存在不完整、不准确或格式不一致等问题,需要进行数据清洗和验证。

相关文章:

  • 骨灵冷火!Solon Cloud Gateway 照面发布
  • rabbitmq高可用集群搭建
  • 【软件测试专栏】软件测试 — 用例篇
  • docker 启动ElasticSearch
  • 小程序的页面跳转方式
  • 【go-zero】goctl笔记
  • FastAPI 进阶:使用 Pydantic 验证器增强 Query 参数验证
  • 汽车功能安全--TC3xx SMU之看门狗alarm处理
  • C语言操作符详解1(含进制转换,原反补码)
  • edge跟谷歌浏览器配置浏览器可跨域
  • SecurityHeaders:为.Net网站添加安全标头,让Web更加安全、避免攻击!
  • Quartz.Net_侦听触发器
  • C语言典型例题59
  • python 并发100个请求
  • IoT客户端+联邦学习微调大模型
  • Apache Zeppelin在Apache Trafodion上的可视化
  • ES6 学习笔记(一)let,const和解构赋值
  • JS数组方法汇总
  • ng6--错误信息小结(持续更新)
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • PHP 7 修改了什么呢 -- 2
  • PHP变量
  • python3 使用 asyncio 代替线程
  • Python爬虫--- 1.3 BS4库的解析器
  • react-native 安卓真机环境搭建
  • sessionStorage和localStorage
  • SpriteKit 技巧之添加背景图片
  • 从0实现一个tiny react(三)生命周期
  • 基于 Babel 的 npm 包最小化设置
  • 前端路由实现-history
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • #pragma once
  • $.each()与$(selector).each()
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (ISPRS,2021)具有遥感知识图谱的鲁棒深度对齐网络用于零样本和广义零样本遥感图像场景分类
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (九)One-Wire总线-DS18B20
  • (利用IDEA+Maven)定制属于自己的jar包
  • (六)vue-router+UI组件库
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (三)mysql_MYSQL(三)
  • (一)基于IDEA的JAVA基础10
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • .mp4格式的视频为何不能通过video标签在chrome浏览器中播放?
  • .Net Core和.Net Standard直观理解
  • .net framework profiles /.net framework 配置
  • .net MySql
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .net8.0与halcon编程环境构建
  • .NET企业级应用架构设计系列之结尾篇
  • .net通过类组装数据转换为json并且传递给对方接口
  • .net项目IIS、VS 附加进程调试