内核怎么帮程序建立连接的(下)

简介: 内核怎么帮程序建立连接的(下)

网络层


image.png

在网络层有IP的概念 是IP地址 一个协议规定的 比如IPV4的地址怎么去写
还有IP路由协议 还有一个route路由表
两个主机跨网通信的情况才会用到路由表
在一个IP地址中包含了在哪个网 以及它在这个网里面是多少号 是由网络号和主机位2部分组成

vi /etc/sysconfig/network-scripts/ifcfg-eth0

image.png

以太坊的0号网卡
IP地址
NETMASK掩码
网关
DNS域名解析服务器 必须要知道IP地址
人使用域名去访问 但通讯的时候必须使用IP地址
所以主机会拿你写的域名读取DNS配置去换取IP地址再封数据包
IP地址是点分字节 两点之间放了一个字节byte 一个字节是8个二进制位
8个二进制位从全0到全1的过程 可以表示的十进制数是0到255
IP中
192是某种01的组合
168是某种01的组合
掩码中255是全1的组合
255.255.255.0 前面3个字节都是1 第四个字节都是0
IP地址和掩码做二进制的按位与
例如192和255做二进制的按位与
即某种01的组合和全1做二进制俺位与
全1为1 有0则0
所以结果还是192
192.168.150.11和255.255.255.0二进制按位与的结果是
192.168.150.0 这个就是你的网络号
11是你在这个网络号的标号

路由表:route -n


image.png

150.11从属于192.168.150.0这个网络 因为eth0直连了这个网络

下一跳机制

局域网A 里面有一个主机 这个主机上接了一根网线会连接到外界去
一个网络里必有一个设备 即连接到内网又连接到外网  比如自己家里的路由器
家里的电脑的下一跳就是路由器

image.png

ping百度的ip地址
数据包怎么发才能发送给百度的61.135.169.121 ?
你要发给谁 拿谁的IP地址在路由表当中和掩码做与运算
和第一个条目(255.255.255.0)做与运算得到61.135.169.0
61.135.169.0和192.168.150.0不一样 这个条目就被pass掉了
然后就会来到最后一个条目
61.135.169.121这个地址和0.0.0.0做与运算 得到的结果还是0.0.0.0
和前面的目标地址一样 
代表这个条目匹配上了
然后下一跳就交给了这个条目的192.168.150.2这个网关地址(路由器)
它就会给你往后继续传递
互联网中的所有设备都会从局域网中找到它的下一跳 就不管了
互联网中的网工就维护着这些路由信息 最终能跳转到百度的服务器
路由表的意义就为了找到它的下一跳
想把数据包发送给百度的地址 数据包只能写一个IP地址 那数据包上是写百度的地址(61.135.169.121)还是下一跳的地址(192.168.150.2)
如果写下一跳的地址 那么数据包就到不了百度
如果写百度的地址 那么数据包就不知道怎么下一跳
所以就需要用到链路层了

访问本局域网


image.png


同一局域网的话 走的是第一个条目
因为这个地址192.168.150.1和255.255.255.0做位与运算得到192.168.150.0
和第一个条目的目的地址匹配上了
网关0.0.0.0表示不需要下一跳 不需要路由器 接口eth0发出去 走交换机
就转发给150.1了


链路层


image.png


  • MAC地址
硬件地址 网卡地址 这个地址是路由的

解释

路由器和你是同局域网
所以通过交换机转发出去
交换机可以看MAC地址
直接转给路由器了
百度服务器上可以有很多服务 80端口即tomcat服务;22端口是ssh服务
所以三层地址才能走到百度服务器
通过MAC地址先到网关
网关走路由表下一跳
跳到了百度服务器之后
百度看端口号 找到相应的进程
最终数据包是进程与进程之间通讯的
最外层的MAC地址就是链路层决定的
链路层也有一张表

查找MAC地址:arp -a


image.png


总结


image.png

应用层说我得发个数据
调内核:哥们帮我建立一个连接吧 自己阻塞
传给了传输控制层
传输控制层说:你等会啊 
自个做了一个握手的包:怎么发出去了?
叫网络层:哥们 你看我这包应该怎么走 你帮我找一下下一跳 自己阻塞
网络层一看 你发给谁
从路由表找下一跳
找到下一跳之后:下一跳的MAC地址是啥?自己阻塞
问链路层:哥们你arp表中下一跳网关的IP地址它的MAC地址 你有吗?
链路层一看有 那就开始返回 
开始封这个数据包 然后发送出去
如果链路层IP地址对应的MAC地址没有的话
所以就封不出数据包出来
所以还有一个arp请求的过程
我们都知道路由表的条目在启动的时候读取配置文件就有了
arp链路层条目什么时候有的?

image.png

从arp表中删除这个条目 过一会 它还会请求回来

层与层之间都是有传递依赖关系的

相关文章
|
7月前
|
算法 Linux 调度
xenomai内核解析--xenomai与普通linux进程之间通讯XDDP(一)--实时端socket创建流程
xenomai与普通linux进程之间通讯XDDP(一)--实时端socket创建流程
498 1
xenomai内核解析--xenomai与普通linux进程之间通讯XDDP(一)--实时端socket创建流程
|
网络协议 Linux 数据库
Linux TCP作为服务器连接方式:建立稳健高效的服务器通信
在Linux服务器开发中,TCP(Transmission Control Protocol)是一种常用的传输层协议,它为服务器与客户端之间的连接提供可靠的、面向连接的通信方式。本文将深入探讨Linux TCP作为服务器连接方式的工作原理,包括服务器端的建立、连接管理和数据传输,以帮助读者建立稳健高效的服务器通信。
491 0
|
网络协议 Linux C++
Linux TCP作为服务器连接的单连接、Select、Poll和Epoll方式:C/C++实现高效的服务器通信
在Linux服务器开发中,TCP(Transmission Control Protocol)作为面向连接的通信方式,为实现可靠的服务器通信提供了强大支持。不同的服务器连接方式,如单连接、Select、Poll和Epoll,各有优势,可以根据连接数和性能需求选择合适的方式。本文将深入探讨这四种方式的实现原理,并给出C/C++代码例子,帮助读者更好地理解和使用这些方式。
371 0
|
存储 Unix Linux
Linux设备驱动程序(二)——建立和运行模块
本章介绍所有的关于模块和内核编程的关键概念,通过一个 hello world 模块来认识驱动加载的流程及相关细节。
143 0
|
Linux
linux下fork函数创建父子进程的目的,模拟服务器与客户端通信
linux下fork函数创建父子进程的目的,模拟服务器与客户端通信
104 0
|
机器学习/深度学习
内核怎么帮程序建立连接的(上)
内核怎么帮程序建立连接的(上)
100 0
内核怎么帮程序建立连接的(上)
|
存储 网络协议 Linux
|
网络协议 Linux
《Linux高性能服务器编程》——3.3 TCP连接的建立和关闭
本节书摘来自华章计算机《Linux高性能服务器编程》一书中的第3章,第3.3节,作者 游双,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
2253 0
|
网络协议 Linux