自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 TCP -- 协议头

TCP 首部TCP header定义如下所示: 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Port |

2022-04-18 20:29:22 579

原创 LINUX信号

linux信号概述信号是一种软中断,它为linux提供了一种处理异步事件的方法。linux支持POSIX标准信号与实时信号,通过kill -l命令可以查看linux支持的信号,以及信号名字和序号。 kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1

2022-04-06 22:17:40 757

原创 linux进程--setuid/setgid

文件setuid/setgidlinux文件的权限标志除了大家熟知的读(r)、写(w)、执行(x)外,还有三个比较特殊的权限位:setuid/setgid/sticky bitsetuid只作用于二进制可执行文件(不包含shell/python/perl等脚本),它允许当前用户以文件所有者的权限运行文件。如系统的passwd命令ls -l /usr/bin/passwd -rwsr-xr-x 1 root root 54256 Mar 27 2019 /usr/bin/passwd这个文

2022-03-31 21:18:32 1136

原创 linux kill

linux kill 用于向一个进程或进程组发送信号,通常用于杀死一个进程。命令选项usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... kill -l [sigspec]

2022-03-31 14:54:06 124

原创 chmod

chmod用于设置文件权限语法chmod [-cfvR] mode filechmod [--help]chmod [--version]参数说明mode详解mode有两种表示法:符号表示法和数字表示法符号表示法[who][operator][permission]who:表示要对哪种用户设置权限,有u/g/o/a四类u:文件所有者g:文件所有者所在组o:所有其它用户a:所有用户,相关于ugooperator:表示进行的操作+:增加权限-:取消权限=:重新设置权限

2022-03-31 14:25:18 738

原创 socket地址结构

socket地址每个协议族都定义了自己的socket结构, 而大多数的socket api都需要一个指向struct sockaddr的指针作为参数, 引入这个结构是为了能支持各种协议族的地址结构。在使用时首先定义特定协议族的地址结构,作为参数传入时强制转换为struct sockaddr类型。通用socket结构struct sockaddr { sa_family_t sa_family; /* address family, AF_xxx */ char sa_data[14]; /*

2022-03-27 15:37:39 348

原创 socket API--connect

函数原型 #include <sys/socket.h> int connect(int sockfd, const struct sockaddr *addr,socklen_t addrlen);连接sockfd到addr所指定的地址。参数简介sockfd socket描述符,标识一个socket.addr 对端地址 addrlen 地址长度返回值成功返回0; 失败返回-1,并设置errno....

2022-03-20 16:34:31 229

原创 socket API--accept

函数原型 #include <sys/socket.h> int accept(int sockfd, struct sockaddr *restrict addr, socklen_t *restrict addrlen);接收一个所监听socket上的连接请求,并创建一个新的socket。参数简介sockfd socket描述符,标识一个socket. addr 用于存放地址的缓冲区,函数成功返回后会被填入连接请求方的地址信息,地址结构

2022-03-20 16:25:24 246

原创 socket API--listen

函数原型 #include <sys/socket.h> int listen(int sockfd, int backlog);参数简介sockfd socket描述符,标识一个socket.backlog socket监听队列的长度,表示当前socket支持的最大待处理的连接请求数。返回值成功返回0; 错误返回-1,并设置errno....

2022-03-20 16:02:59 1807

原创 UDP protocol--udp_rcv

网络层对数据包处理完成后,会调用传输层的handler进行后续处理,UDP层的handler是在inet初始化注册的。inet_init inet_add_protocol(&udp_protocol, IPPROTO_UDP)udp_protocol定义如下:static struct net_protocol udp_protocol = { .early_demux = udp_v4_early_demux, .early_demux_handler = udp_v4_early

2022-03-19 16:35:45 3763

原创 linux文件系统--file

file 定义struct file 表示一个打开的文件,其定义如下:struct file { union { struct llist_node fu_llist; struct rcu_head fu_rcuhead; } f_u; struct path f_path; struct inode *f_inode; /* cached value */ const struct file_operations *f_op; spinlock_t f_lock; e

2022-03-19 14:45:20 89

原创 UDP socket--udp_table

udp_table用于存放udp socket,其定义如下:struct udp_table { struct udp_hslot *hash; //hash table, sockets are hashed on (local port) struct udp_hslot *hash2;//hash table, sockets are hashed on (local port, local address) unsigned int mask;//number of slots in ha

2022-03-10 17:47:07 2646

原创 linux文件系统--inode

inode定义linux文件系统中的inode结构用于描述一个文件,包含文件大小、文件属性、文件状态等信息,其定义如下:struct inode { umode_t i_mode; unsigned short i_opflags; kuid_t i_uid; kgid_t i_gid; unsigned int i_flags; const struct inode_operations *i_op; struct super_block *i_sb; struct

2022-03-09 16:33:42 1412

原创 socket API--bind

函数原型 #include <sys/types.h> #include <sys/socket.h> int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);为socket指定一个地址, 一般服务端的socket需要调用bind()指定地址,以表明要在哪个地址/端口接收数据。参数简介sockfd socket描述符,标识一个socket.addr socket地址,传

2022-03-08 20:30:21 68

原创 linux内核数据结构--bitmap

bitmap可以理解成一个位数组,即数组每个元素是一个bit, 内核提供了各种接口以方便操作bitmap定义#define DECLARE_BITMAP(name,bits) \ unsigned long name[BITS_TO_LONGS(bits)]使用之前需要先调用这个宏定义一个bitmap,实际上就是一个unsigned long类型的数组,数组长度是根椐bits, 以及long类型所占字节数计算出来的。bitmap操作函数 bitmap_zero(dst, nbits)

2022-03-05 13:13:28 1263

原创 linux内核数据结构--struct iov_iter

内核中很多地方都用到了这个数据结构,它主要用于处理一个或多个数据块。结构体定义struct iov_iter { u8 iter_type; bool nofault; bool data_source; size_t iov_offset; size_t count; union { const struct iovec *iov; const struct kvec *kvec; const struct bio_vec *bvec; struct xarray *xar

2022-03-04 16:19:23 955

原创 mount

mount用于挂载一个文件系统用法Usage: mount [-lhV] mount -a [options] mount [options] [--source] <source> | [--target] <directory> mount [options] <source> <directory> mount <operation> <mountpoint> [<target>]optio

2022-03-04 12:05:30 138

原创 文件系统--register

接口函数:int register_filesystem(struct file_system_type * fs){ int res = 0; struct file_system_type ** p; if (fs->parameters && !fs_validate_description(fs->name, fs->parameters)) return -EINVAL; BUG_ON(strchr(fs->name, '.')

2022-03-03 20:20:43 267

原创 UDP socket--sendto and recvfrom

sendto系统调用原型sendto( int fd, void * buff, size_t len,unsigned int flags, struct sockaddr *addr,int addr_len)内核中处理流程:sendto( int fd, void * buff, size_t len,unsigned int flags, struct sockaddr *addr,int addr_len) __sys_sendto(fd, buff, len, flags, NU

2022-03-02 20:51:14 1939

原创 linux ss

linux ss 是一个用于统计socket信息的工具,用于替代netstat. 当信息量较大时,ss比较有优势。命令选项Usage: ss [options] ss [options] [filter] -h, --help this message -V, --version output version information -n, --numeric don't resolve service nam

2022-03-02 16:22:35 1165

原创 socket API--socket

函数原型 #include <sys/types.h> #include <sys/socket.h> int socket(int domain, int type, int protocol);参数简介domain 指定协议族,如AF_INET、AF_INET6等,协议族在 <sys/socket.h>头文件中定义,常用的有以下几种: Name Purpose

2022-03-02 15:49:01 103

原创 UDP socket--bind

创建一个udp socket后,此时socket中并没有任何地址相关的信息,服务器端需要将本地Ip地址及端口号bind到socket上。应用层会调下如下socket API:bind(fd, (struct sockaddr)&addr, addr_len)fd:socket所关联的文件描述符addr:本地地址及端口号addr_len:地址长度内核中的执行流程:bind(fd, (struct sockaddr)&addr, addr_len) __sys_bind(fd,

2022-03-02 10:46:52 2403

原创 netstat

linux netstat用于显示网络信息(socket连接、接口信息、路由表、协议统计信息等)命令选项 -a 显示所有socket信息 -l 显示listening状态socket信息 -t 显示tcp socket信息 -u 显示udp socket信息 -x 显示unix socket信息 -n 显示数字的ip地址及端口,而不是host name,service name. -p 显示使用socket的程序 -r 显示路由表 -g

2022-03-01 13:10:55 314

原创 INET LAYER--UDP socket

struct udp_sockstruct udp_sock 代表一个UDP socket,其结构如下:struct udp_sock { struct inet_sock inet { struct sock sk; … … INET specified … … } … … UDP specified … …}UDP socket创建当通过系统调用创建一个UDP socket时,内核中的处理流程如下:socket(AF_INET,SOCK_DGRAM, 0)

2022-02-28 15:51:46 340

原创 linux 内核链表

linux内核代码中常用的两种链表:双向链表、哈希链表双向链表struct list_head { struct list_head *next, *prev;};内核中的链表是通过将链表节点嵌入到数据结构,将数据结构链接起来的,链表节点与数据的分离使其可以更操作起来更简单,并且能在内核发中通用。内核中也定义了一些对链表节点进行操作的函数及宏定义:1.链表定义#define LIST_HEAD_INIT(name) { &(name), &(name) }#define

2022-02-26 22:49:51 1064

原创 INET LAYER--struct sock

struct sock 是socket在网络层的表示,是网络层非常重要的一个数据结构,具体定义如下:struct sock{ struct sock_common __sk_common; socket_lock_t sk_lock; atomic_t sk_drops; int sk_rcvlowat; struct sk_buff_head sk_error_queue; struct sk_buff_head sk_receive_queue; /* * The backl

2022-02-26 20:05:00 129

原创 INET Layer

Linux 内核中定义了众多协议簇,在 include/linux/socket.h中定义如下:/* Supported address families. */#define AF_UNSPEC 0#define AF_UNIX 1 /* Unix domain sockets */#define AF_LOCAL 1 /* POSIX name for AF_UNIX */#define AF_INET 2 /* Internet IP Protocol */#define AF_

2022-02-26 19:04:43 363

原创 socket layer

Linux socket 层处于应用层与协议层之间,为应用层提供访问接口,对协议层进行抽象,屏蔽各协议间的差异。数据结构struct socket { socket_state state; short type; unsigned long flags; struct file *file; struct sock *sk; const struct proto_ops *ops; struct socket_wq wq;};sk:指向协议层sockops: 协议相关

2022-02-26 13:19:01 179

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除