当前位置: 首页 > news >正文

TCP/IP协议簇自学笔记

摘抄于大学期间记录在QQ空间的一篇自学笔记,当前清理空间,本来想直接删除掉的,但是感觉有些舍不得,因此先搬移过来。

曾经,我只知道socket函数能进行网络间数据的通信,知道tcp/ip协议也是用来进行网络数据之间通信的协议。而后开始接触了http,ftp,udp,ip,还遇上了路由器,我开始模糊了,他们到底谁是网络的真正领导者,他们又有何关系?现在通过一本51cto技术论坛的文档,我才算真正明白了什么是网络通信。

一、TCP/IP的层次结构

        TCP/IP分为五成,从上到下分别是应用层、传输层、internet层、网络接口层,分别对应OSI结构中的应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
         其中应用层包括的协议有Tclnet(远程登录协议)、ftp(文件传输协议)、http协议,smtp(邮件传输协议)、DNS协议
                传输层包括的协议有TCP和UDP协议
                网络层包括的协议有IP协议,以及ARP、RARP、IGMP 、ICMP
                数据链路层的由逻辑链路子层和介质访问子层
               物理层有SONET、SDH、PDH 
                 

 原来这些协议相辅相成,各施其职,共同完成了网络间数据的传输,他们谁也离不开谁,就像我们人体的心脏大脑等,工作在不同层次上,共同组成了internet协议大家族

二、IP协议(TCP/IP协议族心脏)

          IP协议是internet协议族最重要的协议,位于物理链路层之上的网络层,向上层协议屏蔽了各种不同的物理链路的差别,因此能将各种不同介质的网络互联起来。所有在internet上传输的数据以ip数据包格式传输,ip提供不可靠、无连接的数据包传送服务,即它不能保证ip数据包能否成功到达目的地。ip仅提供最好的传输服务。
          ip协议的工作对象是数据包。ip协议在处理数据包时,只会根据数据包本身的情况处理数据包,不会考虑不同数据包之间的关系。因此对两个目的地相同的数据包的处理可能是不同的。其次,ip协议的责任是将数据正确传递到目的地,ip协议用能够表示和识别数据包的地址,并能根据地址选择数据包传递的路径。     
          ip协议工作的对象是数据包,对上层传递来的数据包进行封装ip地址,结构如下:

三、ARP协议(IP地址与物理地址间的映射)

        由上可知要将一个ip数据包传送到目的地,必须要有一只标识目的地的机制,这种机制就是ip地址,ip地址是一种结构化的二进制地址,ip协议能够给通过该地址找到与该地址相关联的主机或网络设备。ip协议将上层数据包封装成ip数据包,而ip数据包的实际传输是通过将其封装在屋里网络的数据帧中并让底层物理网络来传输改帧实现的。物理网络也有一个地址机制,称为物理地址。物理网络就是通过这种物理地址来进行数据帧的发送和接收。这时出现了一个问题,因为物理网络是无法识别ip地址的,而ARP和RARP协议解决IP地址和物理地址间的映射问题。
         在以太网络(一种广播网络)中,即连接在同一个以太网中的任何主机都能接收到网络上发送的所有数据帧,但主机会检查数据帧中的目的地址是否是自己,否则将其丢弃。因此连接到网络的接口都有一对地址:IP地址和物理地址,以太网的物理地址也称MAC地址,每块以太网卡出厂时都会有一个固定的全球唯一的MAC地址。
         ARP协议使用一种询问/回答机制。主机H1要发送一个ip数据包给主机H4过程如下:这时H1先构造一个ARP请求数据包,该数据包中包含了ip地址P4,并留下一个空位表示P4的MAC地址。H1的ARP协议将ARP数据包交给网卡,让他将该ARP数据包作为广播帧发送出去。这样H1所在以太网中的所有网卡将会受到该数据帧并对其进行处理,因为他们处于同一个广播帧。处于该广播帧的主机收到这个请求数据包后就将自己的IP地址与数据包中中包含的ip地址进行比较,如果相同就表示对方在询问自己的MAC地址,如果不是,ARP协议会简单丢弃该数据包。因此,只有H4会处理这个ARP请求数据包,这时,H4会将自己的MAC地址填在MAC地址空位上,并将该数据包该数据包改为ARP响应数据包,然后让网卡将其发送给主机H1。
        对于不在同一广播帧中,该过程略有不同,需经过路由器才能将数据进行传输。ARP数据包格式:
        硬件类型字段:对于以太网该字段为1;
        协议类型字段:指明上层协议地址的类型,对于IP协议该字段为0X0800;
        操作字段:指明ARP数据包的类型,ARP请求数据包类型为1,ARP响应数据包的类型是2,RARP请求数据包为3,RARP响应数据包为4。

四、RARP协议(反向地址解析-为物理地址分配IP地址作用)

        TCP/IP进行网络通信必须要有一个IP地址,我们知道网卡的物理地址是固定在网卡上的,而IP地址通常是保存在二级存储器中并在系统启动后载入系统的。因此启动之前是没有IP地址的,RARP协议的出现解决了这个矛盾。RARP协议的实现分为客户端和服务端两部分,需要远程启动的系统必须将RARP协议的客户端固化在硬件中(如ROM),而服务器端并不是所有的TCP/IP的实现都包含了RARP协议。
        RARP协议的原理如下,需要知道自己IP地址的计算机发送一个RARP请求数据包给RARP服务器,服务器向该计算机发送一个RARP响应数据包,响应数据包中包含了请求计算机的IP地址,请求计算机在获得了自己IP地址之后就可以用它来与文件服务器通信获取自己的启动映像文件了。
        RARP数据包格式与ARP数据包的格式相同,RARP协议的工作过程如下,请求计算机构造一个RARP请求数据包,在该数据包中,计算机将发送者硬件地址和目标硬件地址都设为自己的物理地址,然后将该数据包广播到网络中,网络中所有的计算机都能接收到该数据包,但只有RARP服务器会处理,RARP服务器将请求计算机的IP地址放入数据包的目标协议地址字段中,并将数据包类型该位4(响应),然后将响应数据包发送给请求计算机。如果出现网络故障或RARP服务器失效时,RARP请求将会失败。通常请求计算机对这种情况的处理是使用超时重发机制,如果经过多次重发,系统机会向用户报告一个错误。因此,为保证服务器失效时计算机能正常启动,通常在一个网络中放置多个RARP服务器,但这样将造成网络流量的增多。

五、ICMP协议(互联网控制消息协议)

        ICMP协议就是一种能让我们对网络进行调试的报错机制,它能够让发现错误的路由器向数据包的源站发送一个出错消息来报告出错原因。ICMP的错误报告只能通知出错数据包的源主机,而无法通知从源主机到出错路由途中的所有路由器。例如,主机H1向H2发送一个IP数据包,经过了RA和RB路由器,到达RC路由器的时候RC发现无法将该数据包转发到H2。此时RC能知道数据包的源地址和目标地址但它无法知道该数据包途中经过了那些其他的路由器,因此RC只能将出粗消息发送给数据包的源地址H1。
        因为ICMP数据包封装在IP数据包中,因此ICMP数据包即出错消息的传输也有可能出错,这时就需要ICMP数据包产生另一个ICMP数据包,因为这样加重了网络繁忙,因此ICMP协议规定,如果传输ICMP数据包的IP数据包出错,不能为该数据包产生新的ICMP数据包。

六、路由器工作原理

        路由器收到一个数据包时,必须要能确定应该从哪个端口将该数据包转发出去。例如一个202.119.12.1网段的路由器接收到来自202.119.12.24的数据包(假设路由器接入了一台主机IP地址为202.119.12.24),者路由器必须知道将此数据包从连接到此主机的端口发送出去。如果接收到非12网段的数据包,通常路由器是通过查找一张路由表来确定转发端口的,在路由表中,每一项都说明了通往一个目标地址应该通过哪个端口进行转发,是直接转发给目的地还是需要通过下一个路由器再进行转发。因此一个基本的路由表的表项包含以下几个字段:目的地址、下一站的地址、转发端口。


    路由器的内部通过使用路由表进行数据转发的机制,因此路由表是如何建立的呢?第一种手段是路由器根据路由器各端口直接连接的网络自动产生一些路由表项(即直接转发);另一种就是通过路由协议的帮助,如路由器RA必须要知道通往某个网络(202.119.12..0/24)必须经过路由器RB,那么RA如何知道这一点呢?方法只有一个,就是RB告诉RA这一点,RB就是通过路由协议将这条信息告诉了RA,RA知道后更新了路由表。

相关文章:

TCP/IP协议簇自学笔记

摘抄于大学期间记录在QQ空间的一篇自学笔记,当前清理空间,本来想直接删除掉的,但是感觉有些舍不得,因此先搬移过来。 曾经,我只知道socket函数能进行网络间数据的通信,知道tcp/ip协议也是用来进行网络数据…...

Spring Boot教程之十一:获取Request 请求 和 Put请求

如何在 Spring Boot 中获取Request Body? Java 语言是所有编程语言中最流行的语言之一。使用 Java 编程语言有几个优点,无论是出于安全目的还是构建大型分发项目。使用 Java 的优点之一是 Java 试图借助类、继承、多态等概念将语言中的每个概念与现实世…...

计算机网络(二)

ip地址:11010010:01011110:00100100:00010100 子网掩码:11111111:11111111:11111111:11000000 and :11010010:01011110:00100100:00000000 210.94.36.0的下一站为R1 因为255为11111111 192为&#xff…...

如何在Python中进行数学建模?

数学建模是数据科学中使用的强大工具,通过数学方程和算法来表示真实世界的系统和现象。Python拥有丰富的库生态系统,为开发和实现数学模型提供了一个很好的平台。本文将指导您完成Python中的数学建模过程,重点关注数据科学中的应用。 数学建…...

JavaSE——类与对象(5)

一、抽象类 1.1为什么需要抽象类 父类的某些方法,不确定怎么实现,也不需要实现。 class Animal{public String name;public Animal(String name){this.name name;}public void eat()//这里实现了也没有意义{System.out.println("这是一个动物&am…...

Istio笔记01--快速体验Istio

Istio笔记01--快速体验Istio 介绍部署与测试部署k8s安装istio测试istio 注意事项说明 介绍 Istio是当前最热门的服务网格产品,已经被广泛应用于各个云厂商和IT互联网公司。企业可以基于Istio轻松构建服务网格,在接入过程中应用代码无需更改,…...

面试小札:Java如何实现并发编程

多线程基础 继承Thread类 定义一个类继承自 Thread 类,重写 run 方法。在 run 方法中编写线程要执行的任务逻辑。例如: java class MyThread extends Thread { Override public void run() { System.out.println("线程执行的任务…...

java-a+b 开启java语法学习

代码 (ab) import java.util.Scanner; //导入 java.util包中的Scanner 类,允许读取键盘输入数据public class Main { // 创建一个公共类 Mainpublic static void main(String[] args) {//程序入口点,main方法Scanner scanner new Scanner(…...

RNN模型文本预处理--数据增强方法

数据增强方法 数据增强是自然语言处理(NLP)中常用的一种技术,通过生成新的训练样本来扩充数据集,从而提高模型的泛化能力和性能。回译数据增强法是一种常见的数据增强方法,特别适用于文本数据。 回译数据增强法 定义…...

maven 中<packaging>pom</packaging>配置使用

在 Maven 项目的 pom.xml 文件中, 元素用于指定项目的打包类型。默认情况下,如果 元素没有被显式定义,Maven 会假设其值为 jar。但是,当您设置 pom 时,这意味着该项目是一个 POM(Project Object Model&…...

【Python中while循环】

一、深拷贝、浅拷贝 1、需求 1)拷贝原列表产生一个新列表 2)想让两个列表完全独立开(针对改操作,读的操作不改变) 要满足上述的条件,只能使用深拷贝 2、如何拷贝列表 1)直接赋值 # 定义一个…...

【深度学习】服务器常见命令

1、虚拟环境的安装位置 先进入虚拟环境 which python2、升序查看文件内容 ls -ltr3、查看服务器主机空间使用情况 df -hdf -h .4、查看本地空间使用情况 du -sh ./*du -sh * | sort -nr5、查找并删除进程 # 查找 ps aux# 删除 kill -KILL pid6、查看服务器配置 lscpuuna…...

技术分析模板

文章目录 概要整体架构流程技术名词解释技术细节小结 概要 提示:这里可以添加技术概要 例如: openAI 的 GPT 大模型的发展历程。 整体架构流程 提示:这里可以添加技术整体架构 例如: 在语言模型中,编码器和解码器…...

python:文件操作

一、文件路径 在Windows系统中,每个磁盘都有自己的根目录,用分区名加反斜杠来表示。我们定位文件的位置有两种方法,一种是绝对路径,另一种是相对路径。绝对路径是从根目录出发的路径,路径中的每个路径之间用反斜杠来分…...

Nginx和Apache有什么异同?

Nginx和Apache都是广泛使用的Web服务器软件,它们各自具有独特的特点和优势,适用于不同的应用场景。以下是关于Nginx和Apache的不同、相同以及使用区别的详细分析: 一、不同点 资源占用与并发处理能力: Nginx使用更少的内存和CPU资…...

泰州榉之乡全托机构探讨:自闭症孩子精细动作训练之法

当发现自闭症孩子精细动作落后时,家长们往往会感到担忧和困惑。那么,自闭症孩子精细动作落后该如何训练呢?今天,泰州榉之乡全托机构就来为大家详细解答。 榉之乡大龄自闭症托养机构在江苏、广东、江西等地都有分校,一直…...

Cookie跨域

跨域:跨域名(IP) 跨域的目的是共享Cookie。 session操作http协议,每次既要request,也要response,cookie在创建的时候会产生一个字符串然后随着response返回。 全网站的各个页面都会带着登陆的时候的cookie …...

qt QGraphicsPolygonItem详解

1、概述 QGraphicsPolygonItem是Qt框架中QGraphicsItem的一个子类,它提供了一个可以添加到QGraphicsScene中的多边形项。通过QGraphicsPolygonItem,你可以定义和显示一个多边形,包括其填充颜色、边框样式等属性。QGraphicsPolygonItem支持各…...

“harmony”整合不同平台的单细胞数据之旅

其实在Seurat v3官方网站的Vignettes中就曾见过该算法,但并没有太多关注,直到看了北大张泽民团队在2019年10月31日发表于Cell的《Landscap and Dynamics of Single Immune Cells in Hepatocellular Carcinoma》,为了同时整合两类数据&#xf…...

如何构建一个可扩展、全球可访问的 GenAI 架构?

你有没有尝试过使用人工智能生成图像? 如果你尝试过,你就会知道,一张好的图像的关键在于一个详细具体的提示。 我不擅长这种详细的视觉提示,所以我依赖大型语言模型来生成详细的提示,然后使用这些提示来生成出色的图像…...

QT实战--qt各种按钮实现

本篇介绍qt一些按钮的实现,包括正常按钮;带有下拉箭头的按钮的各种实现;按钮和箭头两部分分别响应;图片和按钮大小一致;图片和按钮大小不一致的处理;文字和图片位置的按钮 效果图如下: 详细实现…...

RNN And CNN通识

CNN And RNN RNN And CNN通识一、卷积神经网络(Convolutional Neural Networks,CNN)1. 诞生背景2. 核心思想和原理(1)基本结构:(2)核心公式:(3)关…...

生产环境中:Flume 与 Prometheus 集成

在生产环境中,将 Apache Flume 与 Prometheus 集成的过程,需要借助 JMX Exporter 或 HTTP Exporter 来将 Flume 的监控数据转换为 Prometheus 格式。以下是详细的实现方法,连同原理和原因进行逐步解释,让刚接触的初学者也能完成集…...

求平均年龄

求平均年龄 C语言代码C 代码Java代码Python代码 💐The Begin💐点点关注,收藏不迷路💐 班上有学生若干名,给出每名学生的年龄(整数),求班上所有学生的平均年龄,保留到小数…...

Ardusub源码剖析(1)——AP_Arming_Sub

代码 AP_Arming_Sub.h #pragma once#include <AP_Arming/AP_Arming.h>class AP_Arming_Sub : public AP_Arming { public:AP_Arming_Sub() : AP_Arming() { }/* Do not allow copies */CLASS_NO_COPY(AP_Arming_Sub);bool rc_calibration_checks(bool display_failure)…...

【NLP 2、机器学习简介】

人生的苦难不过伏尔加河上的纤夫 —— 24.11.27 一、机器学习起源 机器学习的本质 —— 找规律 通过一定量的训练样本找到这些数据样本中所蕴含的规律 规律愈发复杂&#xff0c;机器学习就是在其中找到这些的规律&#xff0c;挖掘规律建立一个公式&#xff0c;导致对陌生的数…...

数据结构与算法——N叉树(自学笔记)

本文参考 N 叉树 - LeetBook - 力扣&#xff08;LeetCode&#xff09;全球极客挚爱的技术成长平台 遍历 前序遍历&#xff1a;A->B->C->E->F->D->G后序遍历&#xff1a;B->E->F->C->G->D->A层序遍历&#xff1a;A->B->C->D->…...

【趣味升级版】斗破苍穹修炼文字游戏HTML,CSS,JS

目录 图片展示 开始游戏 手动升级&#xff08;满100%即可升级&#xff09; 升级完成&#xff0c;即可解锁打怪模式 新增功能说明&#xff1a; 如何操作&#xff1a; 完整代码 实现一个简单的斗破苍穹修炼文字游戏&#xff0c;你可以使用HTML、CSS和JavaScript结合来构建…...

【Oracle】个人收集整理的Oracle常用SQL及命令

【建表】 create table emp( id number(12), name nvarchar2(20), primary key(id) ); 【充值一】 insert into emp select rownum,dbms_random.string(*,dbms_random.value(6,20)) from dual connect by level<101; 【充值二】 begin for i in 1..100 loop inser…...

Linux内核4.14版本——ccf时钟子系统(5)——通用API

1. clk_get 1.1 __of_clk_get_by_name 1.2 clk_get_sys 2. clk_prepare_enable 2.1 clk_prepare 2.2 clk_enable 3. clk_set_rate 1. clk_get clock get是通过clock名称获取struct clk指针的过程&#xff0c;由clk_get、devm_clk_get、clk_get_sys、of_clk_get、of_clk_g…...

网站开发寻找潜在客户的途径/seo营销技巧培训班

转载于:https://www.cnblogs.com/xutopia/p/10839723.html...

如何加强省市级门户网站的建设/成人大学报名官网入口

出发点&#xff1a; 微服务架构上通过业务来划分服务的&#xff0c;通过REST调用&#xff0c;对外暴露的一个接口&#xff0c;可能需要很多个服务协同才能完成这个接口功能&#xff0c;如果链路上任何一个服务出现问题或者网络超时&#xff0c;都会形成导致接口调用失败。随着业…...

天河网站建设报价/如何在百度搜索到自己的网站

目录 一、面向对象的初步认识 1.1什么是面向对象 1.2面向对象与面向过程 二、类的定义和使用...

威客做网站/高端网站建设报价

本文实例为大家分享了Java简易抽奖系统的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下需求&#xff1a;实现一个抽奖系统1 注册2 登录3 抽奖必须先注册 再登陆 再抽奖随机产生4个随机数作为幸运卡号用户注册后 登录的时候 用户名密码输入判断只有三次机会需要做…...

个人作品网站链接怎么做/宁波seo网络推广定制多少钱

之前有些错误&#xff0c;所有代码均已校正1、/*输出9*9口诀。共9行9列&#xff0c;i控制行&#xff0c;j控制列。*/#include ​2、/*古典问题&#xff1a;有一对兔子&#xff0c;从出生后第3个月起每个月都生一对兔子&#xff0c;小兔子长到第三个月后每个月又生一对兔子&…...

一个ip做几个网站/网站申请流程

背景 首先我是个菜鸡&#xff0c;工资也低的一笔。 刚毕业时候在一家国企上班干 app 开发&#xff0c;干了快两年的时候&#xff0c;跳槽到了一家伪大厂干安全。投了不少简历都没有回音&#xff0c;只有这加伪大厂要我就来了。当时说好了会接触一些底层的东西&#xff0c;然而…...