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

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

承接上文网络通讯原理简介以及演示通讯过程

是内核的传输控制层完成的

image.png


程序先有连接 才会发送数据 所以该过程是阻塞的


传输控制层


该层的协议有UDP、TCP
面向连接的可靠的传输协议

image.png

三次握手让双方都确认自己的输入输出都是通的
双方要为对方在内存中开辟资源
这个资源在每台主机里面 是物理的 为对方提供服务(由谁接收 怎么统计 接收队列长了多少了 ) 这个时候才有了连接
三次握手之后 才允许 程序给传输控制层传输数据

socket

image.png


socket中文是套接字
用一个四元组ip:port+ip:port(客户端ip和端口 + 服务端ip和端口)来表示
在linux系统中用一个文件描述符来代表
一个ip可以创建65535个端口
客户端IPA和服务器IPB可以建立65535个连接

image.png

IPA可以和IPB之间建立65535个连接
IPA也可以和IPC之间建立65535个连接

netstat -natp

image.png

这是一个socket连接表
服务器A可以对服务器B最多能发送65535个连接
但不妨碍对另外一台服务器发送65535个连接
所以有了资源释放的概念即断开连接

四次分手

image.png

四次分手形象描述:
A:我要和你分手
B:哼(听到了)
B:我也想和你分手
A:好啊
如果一方没有发送过来 则另外一方就会进入等待状态

curl www.baidu.com

image.png

curl调用了内核的三次握手建立连接
把请求头发送给了对方
对方一定会有响应
它也读到了响应
curl命令最后结束退出
该请求响应的过程 包含了完整的通信过程 三次握手->中间数据传输->四次分手
抓包就抓curl请求的生命周期

抓包命令:tcpdump -nn -i port 80

-nn 表示 不显示明文和localhost等 而是该显示端口显示端口 该显示ip显示ip
-i 表示 inteface 你要抓的是哪个接口
port 抓数据包里面有80端口号 因为访问百度走的80

查看网卡接口名字:ifconfig

image.png

192.168.150.11是我本地的ip地址
随机申请了一个端口号47449 请求百度服务器61.135.169.125:80发送了一个数据包
想建立握手 这个数据包是传输控制层发送的第一个握手的数据包 长度为0
百度给响应的包也是在传输控制层完成的 长度也是0
给百度回了一个数据包 大小依然是0 
以上是三次握手的过程
接着给百度发送了一个请求头
请求头给返回了一个ack 大小0
百度给返回一个数据包 大小为1460
给百度回了一个ack
百度又给发送了一个数据包 大小1321
把数据切成了2个包
给百度回复ack确认
2个包加起来就是百度主页所有字节
本地给百度发了一个数据包 Fin 断开连接 大小是0 本地内核给百度发送的第一个分手的数据包
百度首先返回一个ack确认的包 大小0
百度又说 其实我也想和你断开连接 大小依然是0
本地再给百度回复 其实我也是这么想的
以上就是三次握手 数据传输 四次分手的过程

数据更详细 tcpdump -nn -X -i port 80

本地给百度发送请求头

image.png

nc www.baidu.com 80

类似于telnet 可以和别人建立远程连接
但是它只完成了tcp socket的三次握手

image.png

两次换行才能把整个头发送出去
抓包可以看到 本地发送了请求头给百度 
百度返回了响应头
然后四次分手

四次分手可以粘成3个包


image.png

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
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
|
网络协议
内核怎么帮程序建立连接的(下)
内核怎么帮程序建立连接的(下)
113 0
内核怎么帮程序建立连接的(下)
|
存储 网络协议 Linux
|
网络协议 Linux
《Linux高性能服务器编程》——3.3 TCP连接的建立和关闭
本节书摘来自华章计算机《Linux高性能服务器编程》一书中的第3章,第3.3节,作者 游双,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
2253 0
|
网络协议 Linux