Linux网络协议 笔记

news2024/10/6 20:10:06

环境配置

使用ifconfig命令设置网卡的IP地址和掩码

ifconfig eth0 192.168.xxx.xxx netmask 255.255.255.0

 

设置默认路由。

route add default gw 192.168.xxx.xxx


程序编译

GCC

编译命令

gcc hello.c -o hello

gcc -o hello hello.c

执行生成的可执行文件

./hello

 

gcc相关指令

http://www.cnblogs.com/zhangsir6/articles/2956798.html

经过gcc编译的程序在只适用特定的硬件平台的linux系统,一般使用make进行编译。

 

#include "stdio.h"

int main(int argc, char** argv) {

printf("argc = %d\n",argc);

printf("argv[0] = %s\n",argv[0]);

printf("argv[1] = %s\n",argv[1]);

}

使用下面的命令编译源代码:

gcc -o myprogram main.c

在终端执行命令:./myprogram 192.168.0.1

程序结果

argc 代表命令行参数的个数,argv[0] 代表程序本身的名称,argv[1] 代表第一个命令行参数。

./myprogram 及 ./myprogram 123 456。

当执行命令 ./myprogram 192.168.0.1 时,argc 的值为 2,argv[0] 的值为 "./myprogram",argv[1] 的值为 "192.168.0.1"。

当执行命令 ./myprogram 时,argc 的值为 1,argv[0] 的值为 "./myprogram",argv[1] 不存在。

当执行命令 ./myprogram 123 456 时,argc 的值为 3,argv[0] 的值为 "./myprogram",argv[1] 的值为 "123",argv[2] 的值为 "456"。

char** argv是可变的。

 

有跟线程相关的函数

gcc  -o pt pthread.c  -lpthread

这个命令用于编译名为pthread.c的C语言源文件,并生成一个可执行文件pt。其中,-o选项指定输出文件名,-lpthread选项表示链接pthread库。

 

Makefile

输入make自动寻找makefile

1.需要由 make 工具创建的目标体(target),通常是目标文件或可执行文件。

2.要创建的目标体所依赖的文件(dependency_file)。

3.创建每个目标体时需要运行的命令(command)。

#注释

target:dependency_files

[TAB]command
clean:
    rm -f 可执行文件 所有.o文件

注意:每一个命令行必须以[Tab]字符开始,[Tab]字符告诉 make 此行是一个命令行。

目标"clean"没有依赖,只有命令。删除 make 过程产生的中间文件。

$@是特殊的自动变量,代表当前规则的目标文件。

 

多文件时:先规则后编译

可执行文件x:各个文件的.o

gcc -o x 各个文件.o

文件.o:文件.c 依赖文件.h

gcc -c -o 文件.o 文件.c

#生成main.o的规则,[目标:依赖]

main.o:main.c 依赖文件.h

#编译命令 gcc 生成main.o -I参数是用来指定头文件目录

gcc -c -o main.o main.c -I 依赖 -I 依赖

#删除可执行文件和.o文件

clean:

        rm -f 可执行文件x 文件.o main.o


调试

GDB是UNIX和Linux平台下字符界面的调试工具

gcc -o tt gdbsum.c –g(-g也可以放-o后面)

这个命令用于编译名为gdbsum.c的C语言源文件,并生成一个带有调试信息的可执行文件tt。其中,-o选项指定输出文件名,-g选项表示生成调试信息。

调试过程

进入gdb的办法

1. 在编译成功后输入gdb + 编译后的文件名

2. 在命令行中先输入gdb进入gdb调试模式,再输入file + 加载要调试的程序。

注:用info registers 来查看程序的寄存器状态

指令

p str 命令显示变量str的当前值。

使用gdb命令启动tt程序,在gdb环境下,b main命令添加断点在main函数处,r 命令开始运行,n 命令是单步执行代码,c 命令是运行到下一个断点处。


多线程

在Linux平台中线程操作相关函数有:

1.线程创建函数pthread_create

2.等待另一线程结束函数pthread_join

3.线程分离函数pthread_detach

4.线程自我结束函数pthread_exit

头文件:#include<pthread.h>

通过fork函数创建子进程:pid=fork();

网络编程

OSI的7层结构

  • 物理层(Physical Layer)
  • 数据链路层(Data Link Layer)
  • 网络层(NetWork Layer)
  • 传输层(Transport Layer)
  • 会话层(Session Layer)
  • 表示层(Presentation Layer)
  • 应用层(Application Layer)

TCP/IP参考模型

从上至下

应用层、传输层、网络层和网络接口层

 

ARP是向网络查询目录主机的IP地址,根据IP地址获得MAC地址转化协议。

Ping命令是基于ICMP协议的一种应用。

DNS协议实现域名到IP的转换。用于域名解析。

telnet协议在传输用户名和密码时是明文传输。

 

网络协议分层与对应工作的硬件设备。

物理层:网卡、网线、中继器、集线器

链路层:网桥、交换机

网络层:路由器

 

TCP三次握手

1. 客户端发SYN,请求连接

2.服务器发SYN或ACK

3.客户端收到后发ACK

 

IP首部的结构体定义:

eda80b22c5b44158b809546524899449.png

字段长度是8位时, 其类型是unsigned char

字段长度是16位时,其类型是unsigned short

字段长度是32位时,其类型是unsigned int

 

UDP

直接调用sendto方法即可实现信息发送,接收端使用receivefrom方法接收数据

调用Socket函数

socket,bind,sendto,receivefrom,close

 

 

Socket函数

socket 创建一个TCP、UDP或RawSocket

bind 绑定本机IP和端口

listen TCP监听

accept TCP为客户端提供socket资源

connect 客户端发起三次握手

send TCP向目标发字节流

recv 接收字节序列,返回值为字节数,shutdown后返回值为0断开连接(没有清除资源)

socket(PF_INET,SOCK_STREAM,0);

connect(sock,(struct sockaddr *)&serv_addr,sizeof(serv_addr))==-1(失败)

read(sock,message,sizeof(message)-1);

shutdown(sock,SHUT_RDWR);

bind(serv_listen_sock,(struct sockaddr*)&serv_addr,sizeof(serv_addr))==-1(失败)

listen(serv_listen_sock,5)==-1(失败)

accept(serv_listen_sock,(struct sockaddr*)&clnt_addr,&clnt_addr_size);

 

TCP/UDP异同

不同:TCP是可靠的、面向字节流的传输层协议,需要建立连接后发送数据,有三次握手,通过发送序列号、确认应答机制保证数据的发送顺序和完整性,使用滑动窗口控制发送速率,适应接收方处理能力,利用拥塞窗口控制发送速率防止网络过载。常用于文件传输。支持一对多连接。

1. 采用select的IO模式

2.poll模式

3.epoll模式

4.多线程模式

5.多进程模式

UDP是不可靠的、面向数据报的传输层协议,会丢包,常用于简单消息传输。

相同:都是传输层协议。

 

Java网络通信

TCP

Socket(SocketChannel)

ServerSocket(ServerSocketChannel)

UDP

DatagramSocket (DatagramChannel)

DatagramPacket

 

InetSocketAddress 主机+端口

InetAddress IP地址或主机名

 

BIO(Blocking) 阻塞

NIO(Non-Blocking) 非阻塞

AIO 异步非阻塞网络

DatagramSocket, Socket,ServerSocket所使用的方法都是属于BIO

 

 

函数调用        

1. free(s)

释放指针s

2.close方法实现关闭文件资源

3.gethostbyname函数可实现使用域名转换为IP的功能

其他

1. 除了用malloc函数返回的指针地址外,所有的局部变量都不可以在函数外使用。也不可以将局部变量地址return出去。

2.arpa网是因特网前身

3.TCP是网络中最常用的面向连接的传输层协议,HTTP、FTP等协议就是基于TCP协议的应用层协议。

4.SNMP网络管理的协议是基于UDP的应用层协议。

5.Ping命令是基于ICMP协议的一种应用

6.IP头部校验和用于确保IP头部的完整性

校验和计算

(1)展开为十六进制,每四位为一个数,不足四个补零。

(2)第六个四位数为校验和数,替换为0000

(3)四位四位地相加

(4)高16位与低16位相加

(5)取反

(6)看和校验字段一不一样

7.使用 "-c" 选项允许用户指定发送的请求次数。例如,在命令 "ping -c www.baidu.com" 中,"-c" 后面应跟上具体的次数,如 "ping -c 4 www.baidu.com" 将发送4个请求。如果不指定次数,许多系统默认会持续发送请求直到手动停止

当使用-c参数编译C或C++源代码时,GCC会检查语法和语义错误,生成相应的汇编代码,并将其转化为目标代码。这个过程包括头文件的包含处理、宏替换、代码优化等步骤。编译完成后,会生成.o文件,这些文件包含了编译后的二进制代码和必要的调试信息,但还不包含最终执行文件所需的所有链接元素。

8.不同编程语言生成的通信程序在通信须采用相同的字符编码方案,较佳的字符编码方案是UTF-8。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1873611.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

索引:通往高效查询的桥梁(五)

引言 上一章&#xff0c;我们探索了SQL的基础知识&#xff0c;从DDL、DML到DQL&#xff0c;掌握了构建和操作数据库的基本技能。现在&#xff0c;我们将目光转向数据库性能的核心——索引。索引&#xff0c;犹如图书馆中的目录系统&#xff0c;极大地加速了数据检索过程&#…

Django —— 用户名和密码配置

创建项目ProjectA&#xff1a; django-admin startproject ProjectA cd进入ProjectA文件夹运行项目&#xff1a; python manage.py runserver 0.0.0.0:8000 Starting development server at http://0.0.0.0:8000/Quit the server with CTRL-BREAK. 访问http://localhost:80…

IO-Link软件开发流程

目录 了解IO-Link协议&#xff1a; 确定物理连接方式&#xff1a; 编写驱动程序&#xff1a; 测试通信&#xff1a; 集成与应用&#xff1a; 优化与迭代&#xff1a; 文档编写与用户支持&#xff1a; IO-Link产品的开发流程主要包括以下几个步骤 了解IO-Link协议&#x…

TIOBE 6月榜单出炉!编程语言地位大洗牌,谁才是王?

C历史上首次超越C&#xff01;&#xff01;&#xff01; TIOBE 公布了 2024 年 6 月编程语言的排行榜&#xff1a;https://www.tiobe.com/tiobe-index/ 排行榜 以下列出的语言代表了第51至第100名。由于它们之间的差异相对较小&#xff0c;编程语言仅以字母顺序列出。 ABC, A…

.net 8 集成 MinIO文件存储服务,实现bucket管理,以及文件对象的基本操作

一、准备工作 1、本地部署MinIO服务 2、创建MinIO的Access Key 3、创建.net 项目 4、下载MinIO sdk 5、相关文档 二、编写MinIO工具类 三、管理存储桶 1、MyBucket类 &#xff08;1&#xff09;判断bucket是否存在 &#xff08;2&#xff09;新建bucket &#xff08…

一键解决外勤难题,精细化管理轻松get!

行程打卡是企业总部和分店、销售管理与销售、行政与员工保持信息对称的重要方式&#xff0c;也是区域负责人、督导和行政日常重要的工作之一。 行程打卡不仅承载着确保品牌运营的标准性和一致性的目标&#xff0c;同时也是为了收集行程各阶段存在的问题和不足&#xff0c;对后续…

Win11 搭建 Java 开发环境(JDK)

Win11 搭建 Java 开发环境(JDK) 前言步骤1、下载 JDK2、安装 JDK3、配置环境变量(我设置的顺序可不是随便的哟~)3-1、设置 JAVA_HOME_11和 JAVA_HOME3-2、设置 PATH3-3、设置 CLASS_HOME备注1、可以不必再手动配置 CLASSPATH2、恢复 jre 文件夹(有没有 jre 文件夹其实不影…

实体零售连锁企业如何通过物流接口实现数智化转型升级?

在电子商务浪潮的持续冲击下&#xff0c;传统的实体零售行业面临着巨大的挑战。为了在线上线下融合的新零售时代保持竞争力&#xff0c;众多实体零售企业积极寻求数字化转型的突破。 某中国零售连锁百强企业近年来致力于打造自有品牌的线上销售体系&#xff0c;自2021年8月起接…

双减期末考试成绩怎么公布?

考试一直是衡量学生学习成果的重要手段。不过&#xff0c;随着"双减"政策的实施&#xff0c;我们就不得不重新审视传统的成绩公布方式。期末考试成绩&#xff0c;这个曾经让无数学生心跳加速的数字&#xff0c;如今该如何以一种更加合理、公正的方式呈现给学生和家长…

第1章 物联网模式简介---物联网概述

物联网模式简介 物联网&#xff08;IoT&#xff09;在最近几年获得了巨大的吸引力&#xff0c;该领域在未来几年将呈指数级增长。这一增长将跨越所有主要领域/垂直行业&#xff0c;包括消费者、家庭、制造业、健康、旅游和运输。这本书将为那些想了解基本物联网模式以及如何混…

【知识学习】Unity3D中GPU Instance的概念及使用方法示例

在Unity3D中&#xff0c;GPU Instancing是一种优化技术&#xff0c;它允许开发者在不增加Draw Call&#xff08;绘制调用&#xff09;的情况下&#xff0c;通过GPU绘制多个具有相同Mesh和Material但可能具有不同变换&#xff08;位置、旋转、缩放&#xff09;的对象实例。 GPU…

linux中 nginx+tomcat 部署方式 tomcat挂掉设置自动启动

在Linux环境下&#xff0c;要实现当Tomcat挂掉后自动重启&#xff0c;可以通过编写Shell脚本结合cron定时任务或者使用系统守护进程&#xff08;如Systemd、Upstart或SysVinit&#xff09;来完成。 使用Shell脚本和cron定时任务 编写检查并重启Tomcat的Shell脚本&#xff1a;首…

1976 ssm 营地管理系统开发mysql数据库web结构java编程计算机网页源码Myeclipse项目

一、源码特点 ssm 营地管理系统是一套完善的信息系统&#xff0c;结合springMVC框架完成本系统&#xff0c;对理解JSP java编程开发语言有帮助系统采用SSM框架&#xff08;MVC模式开发&#xff09;&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开…

【管理咨询宝藏137】RB大型卡车集团供应链体系优化设计方案中期汇报

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏137】RB大型卡车集团供应链体系优化设计方案中期汇报 【格式】PDF版本 【关键词】罗兰贝格、供应链管理、运营提升 【核心观点】 - 甲方采取销售…

Parallels Toolbox for mac(pd工具箱) 6.0.2激活版

Parallels Toolbox 是由 Parallels 公司开发的一款实用工具集合软件&#xff0c;它主要面向使用 Parallels Desktop 的用户&#xff0c;提供了许多方便用户在 macOS 和 Windows 之间进行切换和管理的工具。Parallels Desktop 是一款流行的虚拟化软件&#xff0c;允许用户在 mac…

c++ 设计模式 的课本范例(上)

( 0 ) 这里补充面向对象设计的几个原则&#xff1a; 开闭原则 OCP &#xff1a; 面向增补开放&#xff0c;面向代码修改关闭。其实反映到代码设计上就是类的继承&#xff0c;通过继承与多态&#xff0c;可以不修改原代码&#xff0c;又增加新的类似的功能。 依赖倒置原则 Depen…

golang 获取系统的主机 CPU 内存 磁盘等信息

golang 获取系统的主机 CPU 内存 磁盘等信息 要求 需要go1.18或更高版本 官方地址&#xff1a;https://github.com/shirou/gopsutil 使用 #下载包 go get github.com/shirou/gopsutil/v3/cpu go get github.com/shirou/gopsutil/v3/disk go get github.com/shirou/gopsuti…

C语言指针速成下篇

c语言的指针下篇终于迎来了收尾&#xff0c;那么废话不多说&#xff0c;我们直接进入正题 指针访问数组 # include <stdio.h> int main () { int arr[ 10 ] { 0 }; // 输⼊ int i 0 ; int sz sizeof (arr)/ sizeof (arr[ 0 ]); // 输⼊ int * p arr //这…

Linux命令 wc(word count)-l(lines)用于统计文件中的行数。

文章目录 1、wc -l2、实战3、wc --help 1、wc -l 在命令 wc -l 中&#xff0c;-l 的英文全称是 lines。这个选项用于指定 wc&#xff08;word count&#xff0c;单词计数&#xff09;命令来统计文件的行数。 例如&#xff0c;当你运行 wc -l load_user_100w_sort.sql 时&…