tcp/ip协议栈调用关系图
最近阅读了tcp/ip详解卷2,总结一下整个发送过程和接收过程
sendmsg
\/
sendit
\/
sosend(这一步将数据从用户空间拷贝到内核空间,并且会在这一步判断发送缓存空间是否充足,是否需要等待缓存空间,循环发送)
\/
tcp_usrreq(将上一步中整理好的数据添加到发送缓冲尾部)
\/
tcp_output(可能会分片发送,这一步会申请新的内存来放置消息体,并未下一步的头部预留空间,避免再次申请新的内
存)
\/
ip_output(这一步也会分片,在上一步的mbuf的基础上添加上ip首部,循环发送)
\/
ether_output(添加上以太网首部,并将mbuf放入到网卡接口的发送队列)
到此,发送就结束了,上面的过程仅仅是一种情况,但是不管是什么协议,最后都是将数据放入网卡接口队列为止。所以另一方面也说明了,sendmsg或者其他函数,回复成功并不代表对端接收消息成功或者其他什么含义,仅仅是将消息放入网卡接口队列而已。
下面总结一下消息的接收
leintr(网卡中断)
\/
lerint(读中断)
\/
leread(构建一个mbuf,在把帧传给bpf之后比较以太网地址是否是本机)
\/
ether_input(调度ip输入中断,当然还有其他的中断如arpa,要看网络层的协议号,将mbuf添加到ip输入队列的尾部)
\/
ipintr(ip中断被调度到,从队列中取下一个消息,这一步包括消息的重组,调用相应运输层协议的input,这一步会判断这个包是不是发给本机)
\/
tcp_input(这一步的处理相当复杂,简单说,找到协议栈控制块,将数据添加到输入缓冲,并且唤醒在等待数据的线程)
所以这里呢,可以看出输入的话是有多次中断的发生,不是一个同步的过程。
另外一个,抓包的接口是在lestart和leread函数中被调用的。
这个过程中还有一些路由的查找,出错等信息并没有细细的研究,还有,网卡结构,地址结构,路由结构,协议控制块等等的关系图没有研究。有必要会再次总结。
tcp/ip协议栈调用关系图的更多相关文章
- C1000k 新思路:用户态 TCP/IP 协议栈
现在的服务器支撑上百万个并发 TCP 连接已经不是新闻(余锋2010年的演讲,ideawu 的 iComet 开源项目,WhatsApp 做到了 2.5M).实现 C1000k 的常规做法是调整内核参 ...
- UNIX/Linux网络编程基础:图解TCP/IP协议栈
目录 1.主机到网络层协议:以太网协议 2.IP协议 3.网际控制报文协议(ICMP) 4.传输控制协议(TCP) 5.用户数据报文协议(UDP) 6.流控制传输协议(SCTP) 7.地址解析协议(A ...
- 浅谈TCP IP协议栈(一)入门知识【转】
说来惭愧,打算写关于网络方面的知识很久了,结果到今天才正式动笔,好了,废话不多说,写一些自己能看懂的入门知识,对自己来说是一种知识的总结,也希望能帮到一些想了解网络知识的童鞋. 万事开头难,然后中间难 ...
- TCP/IP协议栈概述及各层包头分析
TCP/IP协议栈中各层包头的分析 Protocol列表示的是该数据包最高层对应的协议,Length列表示该包的长度(包括从底层的协议到最高层的协议,其中包头一般是,链路层14字节,IP20字节,TC ...
- 结合Wireshark捕获分组深入理解TCP/IP协议栈
摘要: 本文剖析了浏览器输入URL到整个页面显示的整个过程,以百度首页为例,结合Wireshark俘获分组进行详细分析整个过程,从而更好地了解TCP/IP协议栈. 一.俘获分组 1.1 准 ...
- 计算机网络基础之TCP/IP 协议栈
计算机网络基础之TCP/IP 协议栈 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.TCP/IP 协议栈概述 1>.什么是TCP/IP协议栈 Transmission C ...
- [转帖]Linux TCP/IP协议栈,数据发送接收流程,TCP协议特点
Linux TCP/IP协议栈,数据发送接收流程,TCP协议特点 http://network.51cto.com/art/201909/603780.htm 可以毫不夸张的说现如今的互联网是基于TC ...
- TCP/IP协议栈在Linux内核中的运行时序分析
网络程序设计调研报告 TCP/IP协议栈在Linux内核中的运行时序分析 姓名:柴浩宇 学号:SA20225105 班级:软设1班 2021年1月 调研要求 在深入理解Linux内核任务调度(中断处理 ...
- 门面模式的典型应用 Socket 和 Http(post,get)、TCP/IP 协议的关系总结
门面模式的一个典型应用:Socket 套接字(Socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元.它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息: 连接使用的 ...
随机推荐
- PHP Datatype Conversion Safety Risk、Floating Point Precision、Operator Security Risk、Safety Coding Principle
catalog . 引言 . PHP operator introduction . 算术运算符 . 赋值运算符 . 位运算符 . 执行运算符 . 递增/递减运算符 . 数组运算符 . 类型运算符 . ...
- 数据结构算法C语言实现(四)---2.3循环链表与双向链表
一.简述 [工作中...]
- jqGrid使用方法
1.下载文件 下载jqGrid的软件包,下载地址为:http://www.trirand.com/blog/?page_id=6 下载jQuery文件,下载地址为:http://code.jquery ...
- django-redis和redis-py
项目之前使用memcache做缓存,现在转到redis,改写几个语句的事情,然后就这种我把django-redis和py-redis搞混了,记录一下. django默认使用memcache做缓存,这里 ...
- K米APP案例分析
关于 K米 -- 的案例分析 产品 K米的APP (全国KTV点歌,手机直播,互动,交友,预订)的Android客户端 第一部分 调研,评测 评测: 软件的bug,功能评测,黑箱测试 • 下载并使用, ...
- 【Alpha版本】 第十天 11.18
一.站立式会议照片: 二.项目燃尽图: 三.项目进展: 成 员 昨天完成任务 今天完成任务 明天要做任务 问题困难 心得体会 胡泽善 完成管理员的三大功能界面框架, 我要招聘查看报名者的列表显示 完成 ...
- hdu 2007 - 平方和与立方和
题目大意: 给定一段连续的整数,求出他们中所有偶数的平方和以及所有奇数的立方和. 解答: 坑你没商量!要考虑输入数a,b的大小.如果a>b,需要交换a,b的值. 1: #include<s ...
- mysql中常用的字符串函数
写在分割线之前,个人以为,数据库应该具备简单的的数据加工能力.如同食品在吃之前,是要经过很多到工序的,有经过初加工.粗加工.精加工.深加工等.那么mysql也应该并必须担任起数据初加工以及粗加工的责任 ...
- Untiy3D - 窗口界面2
Component 组件 Mesh:网格 Mesh Filter: 网格滤镜 Mesh Renderer 网格渲染器 Mesh Collider: 网格碰撞器.网格碰撞节点 Convex: 凸的.凸面 ...
- UVA1213Sum of Different Primes(素数打表 + DP)
题目链接 题意:选择k个素数,使得和为N(1120)的方案数: 筛选出 <= N 的素数,然后就背包 写的时候没初始dp[0][0] = 1;而且方案数也没相加,真是弱逼 #include &l ...