linux高性能服务器编程 (一) --Tcp/Ip协议族
前言:
在学习swoole入门基础的过程中,遇到了很多知识瓶颈,比方说多进程、多线程、以及进程池和线程池等都有诸多的疑惑。之前也有学习相关知识,但只是单纯的知识面了解。而没有真正的学习他们的来龙去脉。所以为了swoole打下坚实的基础,打算从《linux高性能服务器编程》一书中找到启蒙。在此作为学习总结。
书本架构:
书中 1-4 章节,主要介绍TCP/IP协议族网络知识、以及TCP/IP通信的过程。
书中 5-15章节,主要解析服务器编程的主要方面(概念、模型、函数、实践)
第一章
1.1 TCP/IP协议族体系结构和协议
TCP/IP协议族是因特网最主流的协议,之前OSI将网络通信划分为7层模型,导致了网络通信的复杂性,后来就简化为目前的四层协议体系。
传说中的TCP/IP协议大致分为四类:数据链路层、网络层、传输层、应用层。
这个网络模型到底有什么用处呢?
其实就是封装数据传输IO交互数据。也就相当于入栈 和 出栈 的一个过程
具体流程如下:
1)入栈 发送 请求流程 - 客户端
(应用层)http数据
(传输层)tcp首尾部 + http数据
(网络层)ip首尾部 + tcp 首尾部 + http数据
(链路层)以太网首尾部 + ip首尾部 + tcp 首尾部 + http数据
2)出栈 接受 请求数据 - 服务端
(链路层)以太网首尾部 + ip首尾部 + tcp 首尾部 + http数据
(网络层)ip首尾部 + tcp 首尾部 + http数据
(传输层)tcp首尾部 + http数据
(应用层)http数据
1、数据链路层:
数据链路层有两个常用的协议 ARP(地址解析协议)和 RARP (逆地址解析协议) 它们实现了ip地址和机器物流地址(mac地址)之间的相互转换。
ARP 协议就是将 IP 地址转换成 MAC的物理地址;因为在数据链路层传输的datagram只能识别MAC地址,所以只能将IP地址转换成MAC物理地址再进行传输定向;
ARP 的工作原理:发出一个ARP request 这个请求是个没有指定目的地的广播,当网络中有匹配的物理地址时,就将这个物理地址返回即 ARP reply. ARP replay 带着明确地址的目标地址 (MAC物理地址) 。
RARP 就是 ARP的逆向,也就是 MAC物理地址转换成 IP地址。因为为了用于网络上某些无磁盘操作系统的IP地址设计的,具有磁盘的操作系统通常是从磁盘中的配置文件中读取IP地址的,但是无盘系统无法这样操作,所以就需要将MAC地址转换成IP地址。
RARP 的工作原理:RARP 的 request 和 replay 的工作原理类似,但是发送的请求过程远比 ARP 复杂,因为 RARP request packet包中没有IP地址,就无法通过路由器进行转发,因为路由器是工作在网络层的,网络层的协议是IP协议,因此执行流程复杂。具体详情可百度一下。
2、网络层:
网络层最核心的协议是IP协议,由于通信的两台主机不是直接相连的,所以IP协议是实现数据包的选路和转发。并通过路由器的形式转发,轮训的重复直到寻找到合适的路由器将数据包成功送达到目标主机。或者发送失败而被丢弃。
网络层另一个重要的ICMP协议(因特网控制报文协议):主要用于检测网络连接。它实际上不是一个真正意义上的协议,而是IP协议的一个重要补充。ICMP协议使用报文格式如图:
1) 8位类型知道用于区分报文类型,ICMP报文分为两大类:一类是差错报文,另一类是查询报文
2)有的ICMP报文还使用8位代码字段进行不同的细分。
3)ICMP 报文使用16位校验和字段对整个报文进行循环用于校验。
3、传输层:
传输层协议主要有三个:TCP协议、UDP协议和SCTP协议。传输层为应用程序封装了一条端到端的逻辑通信链路,它负责数据的收发、链路的超时重连等。通常我们只讨论前两种协议。
TCP协议(传输控制协议)提供可靠的、面向连接的和基于流的服务(流没有边界控制)。TCP协议提供超时重传、数据确认等方式确保数据被正确送达目的端,所以TCP服务是可靠的连接。
UDP协议(用户数据报协议)和TCP协议恰恰相反,它提供应用层不可靠、无连接和基于数据报的服务。
SCTP协议(流控制传输协议)传输电话信号设计的
性能对比 | TCP/IP |
UDP |
可靠性 | 可靠 |
不可靠 |
连接性 | 面向链接 |
无连接 |
报文 | 面向字节流 |
面向报文 |
效率 | 传输效率低 |
传输效率高 |
双工性 | 全双工 |
一对一、一对多、多对多 |
应用场景 | 效率要求低,准确性高 |
效率要求低,准确性低 |
阻塞控制 | 慢开始,拥塞避免,快重传,快恢复 |
无 |
传输速度 | 慢 |
快 |
4、应用层:
应用层负责处理应用程序的逻辑。数据链路层、网络层和传输层负责处理网络通信细节,必须稳定高效,所以它们都放在内核空间中实现。而应用层则在用户空间实现,因为它计算的逻辑相对庞大比如(文件传输、名称查询、网络管理等)。
应用层有很多协议:
ping是应用程序:不是一个协议、它是检测网络连接、是网络环境调试的必备工具。
telnet是远程登录协议:它可以让我们在本地完成远程任务。
OSPF开放最短路径优先:是一个动态路由更新协议,用于路由器之间的通信,告知对方各种的路由信息。
DNS域名服务:将域名和IP地址相互映射的一个分布式数据库。(后面介绍)
应用层协议:可以跳过传输层直接使用网络层提供服务。
linux高性能服务器编程 (一) --Tcp/Ip协议族的更多相关文章
- linux高性能服务器编程 (四) --TCP/IP通信案例
第四章 TCP/IP通信案例 HTTP代理服务器的大致工作原理 在HTTP通信链上,客户端和服务器之间通常存在某些中转代理服务器.它们提供对目标资源的中转访问.一个HTTP请求可能被多个 ...
- 嵌入式linux的网络编程(1)--TCP/IP协议概述
嵌入式linux的网络编程(1)--TCP/IP协议概述 1.OSI参考模型及TCP/IP参考模型 通信协议用于协调不同网络设备之间的信息交换,它们建立了设备之间互相识别的信息机制.大家一定都听说过著 ...
- linux高性能服务器编程 (三) --TCP协议详解
第三章 IP协议详解 TCP协议是TCP/IP协议族中的另外一个重要的协议,与IP协议相比,TCP协议更高进应用层.一些重要的socket选项都和TCP协议相关.这一章主要从如下方面学习: 1)TCP ...
- Linux 高性能服务器编程——TCP/IP协议族
1 TCP/IP协议族体系结构 数据链路层: 职责:实现网卡接口的网络驱动程序,一处理数据在物理媒介(如以太网.令牌环等)上的传输. 常用协议:ARP协议(地址解析协议),RARP协议 ...
- Linux 高性能服务器编程——TCP协议详解
问题聚焦: 本节从如下四个方面讨论TCP协议: TCP头部信息:指定通信的源端端口号.目的端端口号.管理TCP连接,控制两个方向的数据流 TCP状态转移过程:TCP连接的任意一 ...
- Linux 高性能服务器编程——IP协议详解
1 IP服务特点 IP协议是TCP/IP协议族的动力,它为上层协议提供无状态.无连接.不可靠的服务. 无状态:IP通信双方不同步传输数据的状态信息,因此IP数据包的发送.传输和接收都是无序的. ...
- linux高性能服务器编程 (二) --IP协议详解
第二章 IP协议详解 什么是IP协议:IP 协议是TCP/IP协议族的动力,它为上层提供了无状态.无连接.不可靠的服务. IP 头部信息:头部信息会出现在每一个IP数据报上,便于记录IP通信的源端IP ...
- 服务器编程入门(1)TCP/IP协议族
问题聚焦: 简单地梳理一下TCP/IP各层的功能和常用协议 详细了解ARP(数据链路层)和DNS(应用层)协议的工作原理 1 TCP/IP协议族体系结构 数据链路层: 职责:实现网卡接口的网络 ...
- Linux 高性能服务器编程——Linux网络编程基础API
问题聚焦: 这节介绍的不仅是网络编程的几个API 更重要的是,探讨了Linux网络编程基础API与内核中TCP/IP协议族之间的关系. 这节主要介绍三个方面的内容:套接字(so ...
随机推荐
- Java调用Http/Https接口(4)--HttpClient调用Http/Https接口
HttpClient是Apache HttpComponents项目下的一个组件,是Commons-HttpClient的升级版,两者api调用写法也很类似.文中所使用到的软件版本:Java 1.8. ...
- Idea创建一个SpringBoot工程
1.打开Idea,点击新建工程 File—New—Project 2.点击下一步后可能会很一直在请求,或者直接报如下错误, 解决办法:直接点OK后再点Previous返回上一步,继续重新Next 3. ...
- 【开发笔记】- Java写入、读取文本
文本写入 public static void createFile(String input) throws IOException { //设置文件路径 String filePath = &qu ...
- Swiper4的基本使用
基本介绍: 中文文档地址:https://www.swiper.com.cn/ 它是一个开源,免费,强大的触摸滑动插件. 它是用纯Javascript打造的滑动特效插件,既可用于PC端,也可用于移动端 ...
- k8s资源清单基础
资源清单介绍 创建资源的方法 apiserver仅接收JSON格式的资源定义 yaml格式提供配置清单 apiserver可自动把yaml转换成json格式数据 资源清单五个一级字段 1.ap ...
- 一道经典面试题,atoi函数的实现
参考资料 (1)atoi函数的实现 (2)<剑指offer> 题目分析 本题需要注意的有几个方面: (1)检查输入参数,指针是否为NULL: (2)去除字符串前面的空格 (3)处理正负符号 ...
- 【OGG】OGG的下载和安装篇
[OGG]OGG的下载和安装篇 一.1 BLOG文档结构图 一.2 前言部分 一.2.1 导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩ ...
- linux设备驱动程序--串行通信驱动框架分析
linux 串行通信接口驱动框架 在学习linux内核驱动时,不论是看linux相关的书籍,又或者是直接看linux的源码,总是能在linux中看到各种各样的框架,linux内核极其庞杂,linux各 ...
- mysql数据库查询缓存总结
概述 查询缓存(Query Cache,简称QC),存储SELECT语句及其产生的数据结果.闲来无事,做一下这块的总结,也做个备忘! 工作原理 查询缓存工作原理如下: 缓存SELECT操作的结果集和S ...
- 静态Pod
静态Pod kubernetes 除了我们常用的普通Pod外,还有一种特殊的Pod,叫静态Pod. 概念 静态Pod是直接由节点kubelet进程来管理的,不能通过apiserver的master节点 ...