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

目录

1.常用网络测试工具

[1、telnet 远程登录工具,默认都是系统安装。](#1、telnet 远程登录工具,默认都是系统安装。)

[2、netstat 测试查看网络端口使用情况](#2、netstat 测试查看网络端口使用情况)

[3、ping 命令 测试网路的联通状况](#3、ping 命令 测试网路的联通状况)

[4、arp 地址解析命令](#4、arp 地址解析命令)

[5.1 wireshark ==>可视化界面](#5.1 wireshark ==>可视化界面)

[5.2 tcpdump ==》命令行 ===>www.tcpdump.com](#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位。

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:发送方完成数据发送标志。

  1. 窗口:占 16 位,告诉对方自己的接收窗口大小,用于流量控制。

  2. 校验和:占 16 位,用于检验 TCP 报文段在传输过程中是否出现错误。

  3. 紧急指针:占 16 位,指出本报文段中紧急数据的最后一个字节的序号。

二、作用

  1. 建立和终止连接:通过 SYN、ACK、FIN 等标志位实现连接的建立和关闭。

  2. 可靠传输:利用序号和确认号确保数据的按序到达和不丢失。

  3. 流量控制:通过窗口字段控制发送方的数据发送速度,避免接收方缓冲区溢出。

  4. 错误检测:校验和用于检测报文段在传输过程中的错误。

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

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 表示服务器内部错误。

6.setsockopt函数

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

一、函数原型

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

cs 复制代码
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),防止在某些操作上无限等待。

  1. 影响网络通信的特定方面:
  • 开启或关闭广播选项(SO_BROADCAST),允许或禁止套接字发送广播数据。

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

三、返回值

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

7.网络爬虫

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

一、工作原理

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

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

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

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

二、主要用途

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

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

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

三、面临的挑战

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

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

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

相关推荐
朱一头zcy几秒前
C语言复习第9章 字符串/字符/内存函数
c语言
Spring_java_gg3 分钟前
如何抵御 Linux 服务器黑客威胁和攻击
linux·服务器·网络·安全·web安全
此生只爱蛋4 分钟前
【手撕排序2】快速排序
c语言·c++·算法·排序算法
✿ ༺ ོIT技术༻4 分钟前
Linux:认识文件系统
linux·运维·服务器
何曾参静谧23 分钟前
「C/C++」C/C++ 指针篇 之 指针运算
c语言·开发语言·c++
会掉头发32 分钟前
Linux进程通信之共享内存
linux·运维·共享内存·进程通信
我言秋日胜春朝★34 分钟前
【Linux】冯诺依曼体系、再谈操作系统
linux·运维·服务器
饮啦冰美式1 小时前
22.04Ubuntu---ROS2使用rclcpp编写节点
linux·运维·ubuntu
wowocpp1 小时前
ubuntu 22.04 server 安装 和 初始化 LTS
linux·运维·ubuntu