linux 查看进程 发包,Linux网络发包流程
前段时间写了Linux网络收包流程一文,没想到很多人感兴趣,现上货网络发包流程。
sys_write()
file->f_op->write()(sock_writev)(注0)
sock_writev()
sock_sendmsg()
sock->ops->sendmsg()
(inet_sendmsg)
structsock *sk = sock->sk;
sk->sk_prot->sendmsg();(注1)
udp_sendmsg()
udp_push_pending_frames()
ip_push_pending_frames()
dst_output()
ip_output()
/ip_mc_output()
ip_finish_output()
dev_queue_xmit()
注0:
sock_map_fd()
file->f_op =SOCK_INODE(sock)->i_fop =
&socket_file_ops
注1:
struct proto_opsinet_stream_ops = {
…
.sendmsg = inet_sendmsg
…
}
struct proto udp_prot ={
…
.name = "UDP",
.sendmsg = udp_sendmsg,
…
}
网络收包简单总结:
首先网卡驱动申请一个著名的数据结构sk_buffer,根据数据包中的网络类型 type = skb->protocol(L3层 ipv4 or ipv6 ..) ,去调用提前注册在内核中的ipv4oripv6 ..协议处理函数,比如调用ip_rcv(),然后进一步解包,比如根据目的MAC地址和目的IP地址确定是否转发包,然后从包中解出是TCP or UDP,同样调用内核中注册好的回调函数处理,然后根据网络包的信息(hash一下,怎么hash看源码:) )对接上收包之前sys_recvfrom()建立的sock,最后进一步唤醒等待收包的进程。
网络发包简单总结:
发包相对容易理解一些,比如首先调用sys_sendto(),比如在L4层确定TCP or UDP,同样调用L4层注册好的函数,L3层根据路由表子系统确定IP地址,L2层根据邻居子系统确定MAC地址,然后传给网卡驱动发包。
当然,网络子系统非常复杂,不过这些对了解网络流程,对排查网络故障会起很大的作用。
文章只是一个引子,更深的学习,一定要深入代码细节,等到代码都看明白的时候,你将进入另一重世界。不说了,我去修炼了。
觉得文章有帮助,可以打赏支持一下 :)
linux 查看进程 发包,Linux网络发包流程相关推荐
- linux 查看进程变量,Linux下查看进程(程序)启动时的环境变量
Linux下查看进程(程序)启动时的环境变量 Linux的pargs ==================================== 今天又遇到一个老问题: 同事遇到了sqlplus &qu ...
- linux 查看进程阻塞,linux进程 阻塞和非阻塞操作
在我们看全功能的 read 和 write 方法的实现之前, 我们触及的最后一点是决定何时使 进程睡眠. 有时实现正确的 unix 语义要求一个操作不阻塞, 即便它不能完全地进行下去. 有时还有调用进 ...
- linux 查看进程cwd,linux shell 脚本查找进程cwd 求解
root@center1:~/douyin/DYSECOO# ps -ef|grep msg_test root 30228 29891 2 14:02 pts/4 00:00:40 python3 ...
- Linux查看进程线程个数
1.根据进程号进行查询: # pstree -p 进程号 # top -Hp 进程号 2.根据进程名字进行查询: # pstree -p `ps -e | grep server | awk '{pr ...
- Linux 查看进程的几个命令
查看进程状态的基础指令,有以下几个常用参数: ps 查看当前终端下的命令 top 查看所有的进程(是动态的) 本文重点介绍通过ps命令查看进程 一:一些常用的参数组合及解析 1. 查看包含其他使用者的 ...
- linux查看磁盘IO,网络IO 总结
linux查看磁盘IO,网络 IO可用的命令 1. top 监控整体服务器,cpu,内存,磁盘,网络等 2. dstat -d 查看当前磁盘每秒的读取,写入量,单位K 3. dstat -r 查 ...
- linux上根据运行程序的进程号,查看程序所在的绝对路径。linux查看进程启动的时间
1 linux上根据运行程序的进程号,查看程序所在的绝对路径 1.如下,我想查看python 25_run_train_tripletloss_sknet_8w_offline_c_plus.py 这 ...
- Linux查看进程和进程管理
Linux查看进程和进程管理) 查看指定的进程 查看指定的进程 可以通过使用grep索引关键字(关键字会以特定的颜色标识出来),查看指定的进程. 一般列取所有的进程比较多,不易查看,通过grep索引的 ...
- 【Linux 内核】进程管理 ( 进程特殊形式 | 内核线程 | 用户线程 | C 标准库与 Linux 内核中进程相关概念 | Linux 查看进程命令及输出字段解析 )
文章目录 一.进程特殊形式 ( 内核线程 | 用户线程 ) 二.C 标准库与 Linux 内核中进程相关概念 三.Linux 查看进程命令及输出字段解析 一.进程特殊形式 ( 内核线程 | 用户线程 ...
- linux查看进程号和进程
linux查看进程号和进程 ps -p aaa 查看aaa进程的进程号 ps -C 1234 查看进程号为1234的进程 ps -A ...
最新文章
- mysql cpu 内存占用_MySQL占用内存与CPU过高测试与解决办法
- android 多屏幕 设计翻译,android Supporting multiple screen翻译一
- linux下通过rsync+inotify 实现数据实时备份(远程容灾备份系统)
- .net持续集成cake篇之cake介绍及简单示例
- leetcode612. 平面上的最近距离(SQL)
- html5 判断分享,好程序员HTML5大前端分享之函数篇
- 新年UI的拆红包源码/5级代理功能/会员中心充值接口完善
- 拳王虚拟项目公社:闲鱼卖资源还可以卖吗?闲鱼怎么卖虚拟资源?卖什么资源赚钱?闲鱼卖虚拟资源如何赚到钱?
- ant编辑java忽略注释_java – 注释不起作用
- 环境配置之:pip 一步到位解决 pytorch-gpu 安装
- 干货:大米云LAMP使用说明
- 某知名网络安全公司的渗透测试工程师面试题实战汇总
- 基于微信小程序的人脸分析学生课堂状态监测系统 文档+项目源码
- 分享下我 Github 被封的经历
- android 免root 模拟器,真正免root的root工具箱详细使用教程
- mysql 1449 问题
- 【面试-八股文】万字app测试 面试题,助你吊打面试官系列
- 【Python】数据存储
- 利用计算机可以干什么,打开电脑不知道干什么 多个领域运用广【图解】
- Java+spring 基于ssm的美食网站设计与实现#毕业设计
热门文章
- 解决复制粘贴出现的错误
- 智邦国际erp软件31.86版本最新功能分享
- 单片机上的8位数码管同时显示数字“12345678“
- android byte[] 清空,android byte的使用
- lyapunov函数 matlab,科学网-[转载]Matlab的Lyapunov、Sylvester和Riccati方程的Matlab求解-吴雄君的博文...
- 移动端拍照上传到服务器
- Windows10中如何使用ADSL固定IP地址连接因特网
- 北航微信打卡自动提醒程序
- c++ eos智能合约开发_EOS智能合约开发点滴记录-第二篇智能合约编写
- 根据hash值找到bt种子的磁力下载链…