1.ping命令全链路分析(2)
2.请问作为一个java的源码学海程序员要具备哪些技术?
3.爱读书的名言警句
4.å¦cè¯è¨å¤ä¹
å¯ä»¥åå°è½¯ä»¶
ping命令全链路分析(2)
本文使用 Zhihu On VSCode 创作并发布
上篇文章对开源网络协议栈实现 tapip 触发进行了分析,探讨了执行 ping 命令时,源码学海数据包是源码学海如何到达网络协议栈的。本文将继续探讨 ping 命令与网络协议栈的源码学海联系。目前广泛使用的源码学海网络协议栈是五层协议划分:应用层、传输层、源码学海php源码小游戏网络层、源码学海链路层和物理层。源码学海ping 命令采用的源码学海 ICMP 协议位于网络层,但特别之处在于 ICMP 报文是源码学海封装在 IP 报文之内的。下文将从 ICMP 协议开始分析。源码学海
ICMP 协议
ping 命令的源码学海执行过程实际上包含了源端向目的端发送 ICMP 请求报文和目的端向源端发送 ICMP 回复报文的过程。ICMP 报文头包含了 ICMP type、源码学海code、源码学海id、源码学海seq 等字段,报文头部为 字节,payload 部分数据长度为可变长度。
ICMP 报文头部包含 8bit 类型码 type、8bit 代码 code 和 bit 校验和 checksum,其余部分内容和类型码 type 相关。ICMP 报文中定义 type 字段包含以下几种,type 字段与 code 的详细对应关系见附录 1:
其中,ping 命令使用的报文类型为响应请求和响应应答,其报文格式如图:
ICMP 响应请求
在 tapip 中,matlab元素乘法源码ICMP 响应请求报文构造是在 ping.c:send_packet() 函数中完成的。ICMP 报文填充构建代码如下:
根据上一篇文章的分析,tapip 采用一个 tap 设备作为虚拟网卡,ICMP 数据报文最终通过 wirte() 接口写入 tap 设备文件中,最终被 Linux 内核中的网络协议栈处理。这里还是先从 tapip 出发,研究下网络协议栈中如何处理 ICMP 响应请求报文。在 tapip 源码中,处理 ICMP 响应请求报文在函数 icmp_echo_request() 中,其函数调用栈如下:
在 Linux 系统中,数据包到达网络设备后会触发中断,网卡驱动程序将对应数据包传递到内核网络协议栈处理,处理结果通过系统调用接口返回给应用程序(ping 应用)。
tapip 作为一种用户态实现,网络设备 net device 是通过 tap 设备模拟的,tap 设备文件描述符中被写入数据包就相当于网卡设备接收到网络数据包;
网卡驱动程序的工作对应 tapip 中 netdev_interrupt() 到 veth_rx() 之间的过程:首先在中断处理函数中调用 veth_poll() 函数采用轮询的方式检查 tap 设备的文件描述符是否有写入事件;当发生写入事件时,veth_rx() 函数被调用,从文件描述符中读取数据包,并传递到网络协议栈中处理,此时,网络协议栈处理的入口 net_in() 被调用。
网络协议栈按照网络分层模型进行处理:
ICMP 响应回复
ICMP 响应回复的处理过程与接收侧处理 ICMP 响应请求的流程基本一致,不同点在于最后 icmp 报文响应的处理,其 type 为 0,淘宝源码搭建方法对应的处理函数为 icmp_echo_reply(),具体函数调用栈如下:
总结
本文主要分析了用户态网络协议栈 tapip 处理 ping 命令对应的 ICMP 报文的过程,后续将结合 Linux 内核分析这个过程在内核中是如何处理的,另外还会分析下 ARP 协议的实现。
学海无涯,感觉 tapip 的实现逻辑清晰,读起来非常舒服,非常推荐对网络感兴趣的同学学习参考。
(最近特别水逆,希望能早日走出困境,迎来光明吧。)
附录 1: ICMP 报文类型表
markdown
| 类型 Type | 代码 Code | 描述 |
| :------: | :------: | :--------------------------: |
| 0 | 0 | 回显应答(ping 应答) |
| 3 | 0 | 网络不可达 |
| 3 | 1 | 主机不可达 |
| 3 | 2 | 协议不可达 |
| 3 | 3 | 端口不可达 |
| ... | ... | ... |
TODO:
请问作为一个java的程序员要具备哪些技术?
java方面编程的初级学员必需掌握的基础知识:java语言、HTML、JSP以及至少一种数据库。这是最低的标准,但是也是最高的要求,因为基本上其他相关的技术和架构都是基于这些以上的。总之,我觉得都是一通百通,基本上做一个项目就能熟练掌握一种技术。
至于企业方面:本人先后在国内几个大的软件公司工作过,外企也差不多。小公司我没有去过,但是linux源码怎么编我觉得小公司不能去,学的技术好像很多,但是其实阻碍了一个工程师从一个工程师到项目经理或者技术经理的发展,因为小公司做的不可能是很大的项目,难么架构和设计不那么严谨,这样从宏观来看对一个程序员是没有好处的。
企业方面根据所做项目的不同用到的技术也不一样,而基本上大一点的公司都有自己的主营项目,也就是强项。比如亚信是做通信行业的,目前处在web化阶段,其对于java工程师的需求很大,但是它的核心还是C语言的,所以一个java程序员在这样的公司是不会有多大发展的,也学不到什么东西,值得一提的是这种公司都有自己的工具软件,也就是把一些常用的模块或者功能都做好了,你只要调用就行了,所以基本上你到这种公司学不到高深的技术,以后跳槽也难! 现在大一点的公司都有自己的工具软件,目的是封装常用的模块,缩短开发周期,提高运行效率,但是lol源代码源码对于喜欢技术的人来说就没有什么好处了。
最后,想说的是:企业其实需要的是学习能力强的人,踏实肯干就会得到认可。至于技术都是进入公司以后的事情,只要上面说的几样搞清楚了,面试谈的不错,加点技巧就可以了!
java 学习资料要视频干什么呢? 用Eclipse工具自己买本书或者到网上下几个程序源代码研究一下,再写几个小例子就差不多了!
这些都是我的心得,我是工作4年的java工程师,也许说得不准确,但确实是亲身所见。希望你别走我的弯路,祝你顺利开心!
爱读书的名言警句
1、书是益友。臧克家说:读过一本好书,像交了一个益友。
2、书是阶梯。高尔基说:书是人类进步的阶梯。
3、书山有路勤为径,学海无涯苦作舟。
4、读书无疑者须教有疑,有疑者却要无疑,到这里方是长进。
5、善读者日攻,日扫。攻则直透重围,扫则了无一物。
6、或作或辍,一暴十寒,则虽读书百年,吾未见其可也。
7、不去读书就没有真正的教养,同时也不可能有什么鉴别力。赫尔岑
8、知识有如人一体血液一样的宝贵。人缺少了血液,身一体就要衰弱;人缺少了知识,头脑就要枯竭。
9、环境于人的影响极大,亲师取友,问道求学是创造环境改进自己的最好的方法,你们于潜心独研外更要注意这一点,万不要一事不管,一毫不动,专门只关门读死书。
、尽信书,则不如无书。
、书籍是在时代的波涛中航行的思想之船,它小心翼翼地把珍贵的货物运送给一代又一代。培根
、知识是引导人生到光明与真实境界的灯烛,愚昧是达到光明与真实境界的障碍,也就是人生发展的障碍。
、一爱一看书的青年,大可以看看本分以外的书,即课外书譬如学理科的,偏看看文学书,学文学的,偏看看科学书,看看别人在那里研究的,究竟是怎么一回事。这样子,对于别人,别事,可以更深的了解。
、读书破万卷,胸中无适主,便如暴富儿,颇为用钱苦。
、读书破万卷,下笔如有神。
、读书就应像饥饿的人扑在面包上一样
、旧书不厌百回读,熟读深思子自知。
、用心不杂,乃是入神要路。
、读书以过目成诵为能,最是不济事。眼中了了,心下匆匆,方寸匆多,往来应接不暇,如看场中美色,一眼即过,与我何益也。
、读书譬如饮食,从容咀嚼,其味必长;大嚼大咽,终不知味也。
、书房是文人一精一神的巢一穴一,生命的禅堂。
、我们自动的读书,即嗜好的读书,请教别人是大抵无用,只好先行泛览,然后抉择而入于自己所一爱一的较专门一门或几门;但专读书也有弊病,所以必须和现实社会接触,使所读的书活起来。
、读死书是害己,一开口就害人;但不读书也并不见得好。好书是伟大心灵的富贵血脉。弥尔顿、读一本好书,就是和许多高尚的人谈话。歌德
、书是良药。刘向(我国汉代大学者)说:书犹药也,善读之可以医愚。书是面包高尔基说:我扑在书籍上,像饥饿的人扑在面包上一样。 书是逆境中的慰藉。
、书犹药也,善读之可以医愚。
、读书时,我愿在每一个美好思想的面前停留,就像在每一条真理面前停留一样。一爱一默生
读书名言大全 关于读书的名言 我的读书格言分页:
1、 别多想,只管开始做夏七夕经典语录语句
你可能感兴趣的文章:
论语经典名句关于教师节的名人名言|教师节...有关刻苦学习的格言孔子道德名言老子的名言警句李嘉诚的经典名言鲁迅名言警句梦想与现实的名言
本站为你推荐的文章:
李商隐:马嵬·冀马燕犀动地来...乔迁对联立春影评鲜花赠语源代码影评关于教师节的对联母亲节寄语雪花秘扇影评本文标题:一爱一读书的名言警句
å¦cè¯è¨å¤ä¹ å¯ä»¥åå°è½¯ä»¶
ããåºç¨è½¯ä»¶æ¯ä¸ºäºæç§ç¹å®çç¨éè被å¼åç软件ãå®å¯ä»¥æ¯ä¸ä¸ªç¹å®çç¨åºï¼æ¯å¦ä¸ä¸ªå¾åæµè§å¨ãä¹å¯ä»¥æ¯ä¸ç»åè½è系紧å¯ï¼å¯ä»¥äºç¸åä½çç¨åºçéåï¼æ¯å¦å¾®è½¯çOffice软件ãä¹å¯ä»¥æ¯ä¸ä¸ªç±ä¼å¤ç¬ç«ç¨åºç»æçåºå¤§ç软件系ç»ï¼æ¯å¦æ°æ®åºç®¡çç³»ç»ã
å çæä¸ä¸åºæ¬è¯æ³ï¼ç®åçäºè§£ä¸ä¸æéï¼ä¹åçä¸ä¸ªå°ç¨åºçæºç ï¼å¦ææåºç¡çè¯ï¼å个ææ®è½ååºæ¥ï¼æ²¡åºç¡å¾éè¦ä¸ä¸ªææ¶é´å§