TCP/IP协议栈之一----------系统调用层
来源:互联网 发布:自学黑帽seo 编辑:程序博客网 时间:2024/05/17 23:36
前言
说明:本系列文章来源于主要来源于网络方面的两本书籍:
1.1系统调用
send
sys_send(int fd, void __user * buff)
sys_sendto
sendto
sys_sendto (intfd, void __user * buff )
sock_sendmsg
sendmsg
sys_sendmsg
sock_sendmsg
write
sys_write
vfs_write
file->f_op->write = do_sync_write (read_write.c/fs)
filp->f_op->aio_write = sock_aio_write (socket.c)
do_sock_write
__sock_sendmsg
writev
sys_writev
vfs_writev
do_readv_writev
do_sync_readv_writev
sock_aio_write
do_sock_write
__sock_sendmsg
recv
sys_recv
sys_recvfrom
recvfrom
sys_recvfrom
sock_recvmsg
recvmsg
sys_recvmsg
sock_recvmsg
read
sys_read
vfs_read
file->f_op->read= do_sync_read
filp->f_op->aio_read= sock_aio_read
do_sock_read
__sock_recvmsg
readv
sys_readv
vfs_readv
do_readv_readv
do_sync_readv_readv
sock_aio_read
do_sock_read
__sock_recvmsg
socket
listen
connect
bind
select
close
shutdown
ioctl
getsockname
getpeername
setsockopt
getsockopt
1.2内部实现函数
sock_sendmsg (struct socket*, struct msghdr*)
__sock_sendmsg(struct kiocb *, struct socket *,
struct msghdr*)
重要:在sock_sendmsg的上层函数中,会把用户数据拷贝到内核,构造成msghdr结构体。
__sock_sendmsg (socket.c)
sock->ops->sendmsg
对于TCP就是tcp_sendmsg(tcp.c/ipv4),否则就是inet_sendmsg(af_inet.c/ipv4)。后者调用sk->sk_prot->sendmsg,会继续分用为udp_sendmsg(udp.c/ipv4)或raw_sendmsg(raw.c/ipv4)函数
(2.6.10内核都是被inet_sendmsg调用)
sock_recvmsg
__sock_recvmsg
__sock_recvmsg
sock->ops->recvmsg =sock_common_recvmsg(sock.c/core)
sock_common_recvmsg对于不同协议,是tcp_recvmsg,udp_sendmsg或raw_sendmsg函数。
重要:在sock_recvmsg的上层函数中,会把内核中的msghdr结构体信息赋值到用户态空间
- TCP/IP协议栈之一----------系统调用层
- 【TCP/IP协议】四层协议系统
- Linux从用户层到内核层系列 - TCP/IP协议栈部分系列11: 再话Linux系统调用
- TCP/IP协议 之一
- Linux从用户层到内核层系列 - TCP/IP协议栈部分系列6:linux 系统调用中断向量表
- TCP/IP协议栈传输层协议(TCP/UDP)
- TCP/IP四层协议栈
- TCP/IP 协议栈和主要层
- OSI 7层网络图与Tcp/Ip协议系统
- TCP/IP协议基础之一
- TCP/IP协议基础之一
- TCP/IP协议基础之一
- TCP/IP应用层协议
- TCP/IP 七层协议
- TCP/IP四层协议
- TCP/IP 四层协议
- TCP/IP 5层协议
- OSI7层模型与TCP/IP协议栈4层
- Samba磁盘配额
- 潜意识、读懂行为、说服的艺术
- php 关于move_uploaded_file()函数
- 微信小程序-跳转传参
- VisualStudio中error:C4996'strcpy': This function or variable may be unsafe的解决办法
- TCP/IP协议栈之一----------系统调用层
- Android,App 常用图标尺寸规范
- error: ‘atoi’ was not declared in this scope
- 活动的四种启动模式
- 安卓驱动开发之-(二)硬件服务访问LED
- 程序实现RTD Client 从RTD Server取数据
- 选择ReactJS的五个理由
- 装了ubuntu双系统后为什么没有windows的启动项了?
- 更新android studio打开原来的项目一直显示Refresh 该项目