Linux高性能编程学习-TCP/IP协议族

一、TCP/IP协议族结构与主要协议

分层:数据链路层、网络层、传输层、应用层

1. 数据链路层

功能:实现网卡驱动程序,处理数据在不同物理介质的传输

协议:

  • ARP:将目标机器的IP地址转成MAC地址
  • RARP:将MAC地址转成目标的IP

2. 网络层

2.1 概述

功能:数据包的选路与转发。网络层对上层协议屏蔽了网络拓扑连接细节,确定两个主机之间的通讯

协议:

  • IP协议,根据数据包的目的IP地址决定如何转发数据;若数据包不能直接转发到目的主机,则选择合适的下一跳
  • ICMP协议:用于检测网络连接

2.2 ICMP协议

分类:

  • 差错报文:回应网络错误(网络不可达或重定向)
  • 查询报文:查询网络信息(ping)

报文格式:

3. 传输层

作用:为两台主机上的应用程序提供端到端的通讯

网络层和传输层的区别:传输层只关心通讯的起始和目的端,不在于中转过程

传输层协议:

  • TCP协议:为应用层提供可靠、面向连接和基于流的服务。TCP协议使用超时重传、数据ACK等方式确保数据正确发送到目的端;通信双发需先建立连接,并在内核维护连接的状态、读写缓冲区、定时器等数据结构。TCP协议基于流,发送端可以逐个字节向数据流写入数据;接收端逐个字节解析
  • UDP协议:不可靠、无连接、给予数据报的传输协议。使用UDP协议的应用程序需要自己做数据确认、超时重传等逻辑。
  • SCTP协议:流控制传输协议

4. 应用层

作用:在用户空间实现,负责众多逻辑(文件传输、名称查询、网络管理)

协议:telnet、DNS、OSPF

二、封装

封装的目的:上层协议使用下层协议服务的方式,发送数据时,应用程序按协议栈从上到下传递数据

名词定义:

  • TCP报文段:经过TCP封装后的数据,包含TCP头部信息与TCP内核缓冲区(接收/发送缓冲区)

  • UDP数据报:经过UDP封装后的数据。UDP无需为应用层数据保存副本。若应用程序需要实现丢失重传,需要将丢失的数据从用户空间拷贝到UDP内核发送缓冲区
  • IP数据报:经过IP层封装后的数据。包含头部信息和数据部分;数据部分为TCP报文段/UDP数据报/ICMP报文
  • 帧:经过数据链路层封装后的数据。传输介质不同,帧的类型也不同。
  • MTU:帧最大传输单元,帧最多能携带多少上层协议数据。MTU受网络类型的限制,当IP数据报过大时,需要分片传输

过程:

  1. 发送端调用send/write函数,向TCP链接写入数据
  2. 内核TCP模块将数据复制到连接对应的TCP内核发送缓冲区
  3. TCP模块将TCP报文段作为参数,调用IP模块提供的函数,产出IP数据报
  4. IP数据报继续经过数据链路层封装,形成帧
  5. 帧为在网络中传输的字节序列,至此封装完成

三、分用

四、测试网络

五、ARP协议工作原理

六、DNS查询和应答报文

七、socket和TCP/IP协议族的关系

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/115845.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2023年10月小程序云开发cms内容管理无法使用,无法同步内容模型到云开发数据库的解决方案

一,问题描述 最近越来越多的同学找石头哥,说cms用不了,其实是小程序官方最近又搞大动作了,偷偷的升级的云开发cms(内容管理)以下都称cms,不升级不要紧,这一升级,就导致我…

SpringBoot Lombok的使用

目录 下载Lombok插件 Lombok的用法 获取日志对象 生成get,set方法 Lombok框架的实现原理 Lombok的常用注解 下载Lombok插件 要使用Lombok首先要确保idea安装了lombok插件 在项目中添加 lombok依赖 在<dependency>里右键生成点击edit starters 插件(没有就下载,可…

STM32不使用 cubeMX实现外部中断

这篇文章将介绍如何不使用 cubeMX完成外部中断的配置和实现。 文章目录 前言一、文件加入工程二、代码解析exti.cexti.hmain.c 注意&#xff1a;总结 前言 实验开发板&#xff1a;STM32F103C8T6。所需软件&#xff1a;keil5 &#xff0c; cubeMX 。实验目的&#xff1a;如何不…

Python 测试框架unittest和pytest的优劣

一、Unittest Unittest是Python标准库中自带的单元测试框架&#xff0c;Unittest有时候也被称为PyUnit&#xff0c;就像JUnit是Java语言的标准单元测试框架一样&#xff0c;Unittest则是Python语言的标准单元测试框架。 Unittest支持自动化测试&#xff0c;测试用例的初始化、…

【单片机学习笔记】Windows+Vscode+STM32F4+freeRTOS+FatFs gcc环境搭建

为摒弃在接受keil邮件&#xff0c;研究了下gun编译&#xff0c;以STM32F407为例&#xff0c;简单记录 1. 软件包准备 Git 选择对应版本直接安装即可https://git-scm.com/download/winmakegcc ​ 1&#xff09;将上述软件包放置于C盘根目录 2&#xff09;添加环境变量 3&am…

循环神经网络(Recurrent Neural Network)

1. 为什么需要循环神经网络 RNN 上图是一幅全连接神经网络图&#xff0c;我们可以看到输入层-隐藏层-输出层&#xff0c;他们每一层之间是相互独立地&#xff0c;(框框里面代表同一层)&#xff0c;每一次输入生成一个节点&#xff0c;同一层中每个节点之间又相互独立的话&#…

07、Python -- 序列相关函数与封包解包

目录 使用函数字符串也能比较大小序列封包序列解包多变量同时赋值 最大值、最小值、长度 序列解包与封包 使用函数 len()、max()、min() 函数可获取元组、列表的长度、最大值和最小值。 字符串也能比较大小 字符串比较大小时&#xff0c;将会依次按字符串中每个字符对应的编…

GB28181学习(十二)——报警事件通知和分发

要求 发生报警事件时&#xff0c;源设备将报警信息发送给SIP服务器&#xff1b;报警事件通知和分发使用MESSAGE方法&#xff1b;源设备包括&#xff1a; SIP设备网关SIP客户端联网系统综合接处警系统以及卡口系统 目标设备包括&#xff1a; 具有接警功能的SIP客户端联网系统综…

学习pytorch14 损失函数与反向传播

神经网络-损失函数与反向传播 官网损失函数L1Loss MAE 平均MSELoss 平方差CROSSENTROPYLOSS 交叉熵损失注意code 反向传播在debug中的显示code B站小土堆pytorch视频学习 官网 https://pytorch.org/docs/stable/nn.html#loss-functions 损失函数 L1Loss MAE 平均 import to…

nginx安装详细步骤和使用说明

下载地址&#xff1a; https://download.csdn.net/download/jinhuding/88463932 详细说明和使用参考&#xff1a; 地址&#xff1a;http://www.gxcode.top/code 一 nginx安装步骤&#xff1a; 1.nginx安装与运行 官网 http://nginx.org/1.1安装gcc环境 # yum install gcc-c…

2022最新版-李宏毅机器学习深度学习课程-P26 Recurrent Neural Network

RNN 应用场景&#xff1a;填满信息 把每个单词表示成一个向量的方法&#xff1a;独热向量 还有其他方法&#xff0c;比如&#xff1a;Word hashing 单词哈希 输入&#xff1a;单词输出&#xff1a;该单词属于哪一类的概率分布 由于输入是文字序列&#xff0c;这就产生了一个问…

如何能够获取到本行业的能力架构图去了解自己的能力缺陷与短板,从而能清晰的去弥补差距?

如何能够获取到本行业的能力架构图去了解自己的能力缺陷与短板&#xff0c;从而能清晰的去弥补差距&#xff1f; 获取并利用能力架构图&#xff08;Competency Model&#xff09;来了解自己在特定行业或职位中的能力缺陷和短板&#xff0c;并据此弥补差距&#xff0c;是一个非常…

【PyTorch实战演练】自调整学习率实例应用(附代码)

目录 0. 前言 1. 自调整学习率的常用方法 1.1 ExponentialLR 指数衰减方法 1.2 CosineAnnealingLR 余弦退火方法 1.3 ChainedScheduler 链式方法 2. 实例说明 3. 结果说明 3.1 余弦退火法训练过程 3.2 指数衰减法训练过程 3.3 恒定学习率训练过程 3.4 结果解读 4. …

软件工程第七周

内聚 耦合 (Coupling): 描述的是两个模块之间的相互依赖程度。控制耦合是耦合度的一种&#xff0c;表示一个模块控制另一个模块的流程。高度的耦合会导致软件维护困难&#xff0c;因为改变一个模块可能会对其他模块产生意外的影响。 内聚 (Cohesion): 描述的是模块内部各个元素…

虚拟机weblogic服务搭建及访问(物理机 )

第一、安装环境&#xff1a; weblogic10.3.6.jar, jdk1.6.bin(开始安装jdk1.8后&#xff0c;安装域的时候报错 &#xff0c;版本很重要&#xff09; centos7虚拟机&#xff08;VMware9&#xff09; 本机系统windows7 以上安装包如果需要可以私信我&#xff0c;上传资源提示…

yolov8x-p2 实现 tensorrt 推理

简述 在最开始的yolov8提供的不同size的版本&#xff0c;包括n、s、m、l、x&#xff08;模型规模依次增大&#xff0c;通过depth, width, max_channels控制大小&#xff09;&#xff0c;这些都是通过P3、P4和P5提取图片特征&#xff1b; 正常的yolov8对象检测模型输出层是P3、…

【WCA-KELM预测】基于水循环算法优化核极限学习机回归预测研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Python实现一个简单的http服务,Url传参输出html页面

摘要 要实现一个可以接收参数的HTTP服务器&#xff0c;您可以使用Python标准库中的http.server模块。该模块提供了一个简单的HTTP服务器&#xff0c;可以用于开发和测试Web应用程序。 下面是一个示例代码&#xff0c;它实现了一个可以接收参数的HTTP服务器&#xff1a; 代码…

跨境商城源码可以定制开发吗?

跨境电商已经成为了一个全球性的趋势&#xff0c;而跨境商城源码定制开发是否可行&#xff0c;一直是广大电商从业者心中的疑问。跨境商城源码定制开发是指在已有的商城源码的基础上&#xff0c;进行个性化需求的修改和开发&#xff0c;以满足商家在跨境电商中的特定需求。下面…

一、XSS加解密编码解码工具

一、XSS加解密编码解码工具 解释&#xff1a;使用大佬开发的工具&#xff0c;地址&#xff1a;https://github.com/Leon406/ToolsFx/blob/dev/README-zh.md 在线下载地址&#xff1a; https://leon.lanzoui.com/b0d9av2kb(提取码&#xff1a;52pj)&#xff08;建议下载jdk8-w…