热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【操作系统一】图解TCP/IP模型+实战

【操作系统一】OSI模型和TCPIP模型一、OSI模型1、什么是OSI模型2、osi七层参考模型3、我更想介绍TCPIP模型二、TCPIP模型1、TCPIP模型起源2、TCPIP模




【操作系统一】OSI模型和TCP/IP模型


  • 一、OSI模型
    • 1、什么是OSI模型
    • 2、osi七层参考模型
    • 3、我更想介绍TCP/IP模型

  • 二、TCP/IP模型
    • 1、TCP/IP模型起源
    • 2、TCP/IP模型是五层还是四层?
    • 3、两层TCP/IP模型
    • 4、传输层(也叫传输控制层)
      • 4.1 TCP
      • 4.3、三次握手
      • 4.4、数据传递
        • 4.4.1、一个服务的80端口,==理论上==,可以和一台机器建立多少客户端链接?
        • 4.4.2、两个服务两个端口,可以和一台机器建立多少个链接?

      • 4.5、四次分手

    • 5、网络层
      • 5.1、ip、netmask、geteway
      • 5.2、路由表

    • 6、链路层

  • 三、其他关联知识点图谱
    • 1、分布式和高并发
    • 2、分布式和IO
    • 2、三层模型

  • 四、实战
    • 1、协议(protocol)、建立链接
      • 1.1、网络链接
        • 1.1.1、第一步:使用nc和百度建立链接
        • 1.1.2、第二步:向百度发送请求
        • 1.1.3、第三步:百度接受你发送的请求,处理后,把处理后的数据发送给你。
        • 1.1.4、第四步:获取百度发送的数据
        • 1.1.5、总结:

      • 1.2、和redis建立链接
        • 1.2.1、第一步:启动redis服务
        • 1.2.2、第二步:使用nc和redis建立链接
        • 1.2.3、第三步:nc向redis服务发送数据
        • 1.2.4、第四步:redis-server服务处理后,发送给请求.
        • 1.2.5、第五步:获取redis发送的数据

      • 1.3、建立一个socket的链接

    • 2、第一次握手后的状态(state)
    • 3、三次握手+传输数据+四次分手
      • 3.1、三次握手
      • 3.2、向百度请求数据,发送url
      • 3.3、百度回复数据
      • 3.4、四次分手

    • 4、网卡配置文件
    • 5、从tcp到arp整个过程抓包




  • 前言:原本这篇应该写《c++进程通信——套接字(socket)》,但是实际查找相关资料和视频教程发现,我之前的理解还是太浅薄,必须要把TCP/IP和计算机操作系统IO了解清楚,才可以理解清楚socket,所以,接下来这两篇博文,我会重新介绍下这些知识。此外,后面还会找机会介绍下rpc通信。

本文将以最简单明了的图,给大家讲解清楚TCP/IP模型。之前已有的文章大家看起来之所以晦涩难懂,有的即使懂了,也难以记忆,原因还是没有对那些凭空的知识、加以实战,供大家理解和实物化。本文介绍到的相关知识,都会在最后一节的实战,给大家详细的讲解下。(以保证非计算机学科的同学都可以看懂和理解)


一、OSI模型

讲解TCP/IP模型前,我们先简单的介绍下OSI模型。


1、什么是OSI模型



What Is the OSI Model?
The Open Systems Interconnection (OSI) model describes seven layers that computer systems use to communicate over a network. It was the first standard model for network communications, adopted by all major computer and telecommunication companies in the early 1980s


The modern Internet is not based on OSI, but on the simpler TCP/IP model. However, the OSI 7-layer model is still widely used, as it helps visualize and communicate how networks operate, and helps isolate and troubleshoot networking problems.


OSI was introduced in 1983 by representatives of the major computer and telecom companies, and was adopted by ISO as an international standard in 1984.
在这里插入图片描述
以上英文节选自OSI Model


翻译:



什么是OSI模型?
开放系统互连(OSI)模型描述了计算机系统用于通过网络进行通信的七个层。它是网络通信的第一个标准模式,在20世纪80年代初被所有主要的计算机和电信公司采用。
现代互联网不是基于OSI,而是基于更简单的TCP/IP模型。然而,OSI 7层模型仍然被广泛使用,因为它有助于可视化和沟通网络的运行方式,并有助于隔离和排除网络问题。
OSI于1983年由主要计算机和电信公司的代表引入,并于1984年被ISO采纳为国际标准。



2、osi七层参考模型


  • osi模型,也被有的文章称为“osi七层参考模型”,可能是部分人觉得,它仅仅是一个参考吧。
    在这里插入图片描述

3、我更想介绍TCP/IP模型

从上文翻译我们可以看到。现代互联网不是基于OSI,而是基于更简单的TCP/IP模型,所以我们后面不再过多介绍了,接下来我会详细介绍下TCP/IP模型及应用。


二、TCP/IP模型

1、TCP/IP模型起源



20世纪50年代末,正值美苏冷战时期,当时美国军方为了避免自己的计算机被炸毁,导致整个网络瘫痪,于是美国国防部的高级研究计划局建设了一个军用网,保证即便部分计算机被袭击摧毁,其他部分仍然正常通信和联系。这个军用网络,就是大名鼎鼎的“阿帕网。”
早期,阿帕网采用的是一种名为NCP的网络协议,NCP协议有一个很大硬伤,它只能用于同构环境中。
什么叫同构环境?
意思就是使用Windows操作系统的用户,不能和MacOS操作系统的用户进行通信,也不能和Android 的用户通信。
1974年,卡恩和瑟夫带着研究成果,在IEEE期刊上,发表了一篇题为《关于分组交换的网络通信协议》的论文,正式提出TCP/IP,用以实现计算机网络之间的互联。
IP协议为每一台联网的设备分配一个地址,TCP则负责发现传输问题。
1983年,美国国防部高级研究计划局决定淘汰NCP协议,TCP/IP取而代之。
参考:一文看完TCP/IP的发展历程



2、TCP/IP模型是五层还是四层?


  • 物理层我们考虑的比较少。因此很多时候也可以称为 TCP/IP四层模型。在这里插入图片描述

3、两层TCP/IP模型


  • 其实,并没有《两层TCP/IP模型》这个概念,
  • 只是在一节课程中,看到马士兵教育中的周老师叫了这个说法,虽然不准确,但是细想下来,对初级水平,计算机网络知识了解不深的同学来说,简化网络通信的理解还是有帮助的,故在次记录下。
  • 两层为:程序 和内核公共两层。在这里插入图片描述

4、传输层(也叫传输控制层)


  • 产生控制的包
    传输层主要是TCP和UDP两个协议,这里我们主要讲解下TCP协议。

4.1 TCP


  • TCP协议:面向链接的、可靠的传输协议。
  • 链接:资源的开辟。在这里插入图片描述

4.3、三次握手


  • 三次握手就是三个数据包
  • 三次握手就是资源开辟的过程
    在这里插入图片描述

4.4、数据传递


  • 我们以socket为例,讲解下数据传递的相关知识。(后面《实战》部分会详细的介绍数据传递的具体过程)
  • 并非是说,我们把socket放在这里讲解,并非说三次握手后就是socket,而是说,scoket需要三次握手,三次握手后就可以传数据了。
    在这里插入图片描述

4.4.1、一个服务的80端口,理论上,可以和一台机器建立多少客户端链接?


  • 一个机器有65535个端口。在这里插入图片描述

4.4.2、两个服务两个端口,可以和一台机器建立多少个链接?

在这里插入图片描述


4.5、四次分手


  • 四次分手就是释放资源的过程

在这里插入图片描述


5、网络层

网络层是为了解决什么问题?


  • 解决问题:传输控制层产生的包,怎么发
  • 点分字节:两个点之间是1个字节,1个字节8位。就是0-255
    在这里插入图片描述
  • 两个局域网怎么通信
    在这里插入图片描述

5.1、ip、netmask、geteway

ip:192.168.3.245
子网掩码:255.255.255.0
网关:192.168.3.1


  • ip和子网掩码:二级制安位与得到网络号(局域网的号) :192.168.3.0,而245就是主机号
    在这里插入图片描述

5.2、路由表


  • 告诉主机应该往哪里发,怎么走。
  • 下一跳:拿到下一个跳点的信息。(网络工程师规划谁作为谁的下一跳的地址)


route -n



  • 路由表
    在这里插入图片描述

说明:


  • 1:本机接入了局域网的网关,
    • (网关:192.168.3.0,0.0.0.0表示不需要网关,ens33表示网卡ens33)
    • 本机给局域网中的任何一个主机发送数据,不需要网关。
  • 2:为了说明这个作用,我们先ping下百度
    在这里插入图片描述

按照我们上面说的:IP地址和子网掩码做二进制与


  • ip &Genmask = Destination
  • 14.215.217.38 &0.0.0.0 =0.0.0.0
  • 我们就拿到了下一个跳点的地址为Gateway:192.168.3.1
  • 基于上面说的,我们就把包发到了下一个跳点,就是我们网络层吓一跳的含义。拿到下一个跳点的地址
  • ping局域网络中的,走上图中的1.

问题:网关地址找到了,数据包由网关交给百度,这个IP地址应该放百度的IP(14.215.177.38)还是网关的的地址(192.168.3.1)?
答:应该放百度的IP,问,放百度的IP,你家的网关怎么知道吓一跳发给谁?
答:找到网关地址后,应该找mac地址,把IP地址套起来。(链路层网卡的mac的地址)


6、链路层

在以下图片中,IP和端口号,我们简单写为SIP.(如实战中介绍的百度的IP和端口号)


  • 链路层,在网卡地址间传递。(mac地址)
  • 把目标IP和端口号封包,在链路层传送。
  • 每到一个节点,都需要更换mac地址,而IP地址和端口号,是不变的。(比如百度的IP和端口号)在这里插入图片描述- 查看网关对应的mac地址


arp -a



  • 网卡的地址如下,可以找到网关对应的网卡地址(mac)
    在这里插入图片描述

三、其他关联知识点图谱

1、分布式和高并发


  • 分布式服务是为了解决什么问题?
    在这里插入图片描述

2、分布式和IO


  • 分布式服务学清楚,必须了解io。(后面我会专门开一篇博客讲下计算机IO)
    在这里插入图片描述

2、三层模型

来自于
TCP/IP五层(或四层)模型:https://blog.csdn.net/m0_59155415/article/details/124909497
在这里插入图片描述


  • 虽然arp大多被归档为网络层,因为arp广播会找到网卡的mac地址,我们理解时可以按照数据链路层理解,好像也没有什么问题。

四、实战

1、协议(protocol)、建立链接

协议:要求双方必须遵守的规则(双方遵从的同一),这样大家就可以通信了。
如何建立链接?


1.1、网络链接

访问百度的过程


  • 第一步:和百度建立一个链接
  • 第二步:把发送请求的页面(url)发送给百度
  • 第三步:百度接受你发送的请求,处理后,把处理后的数据发送给你。
  • 第四步:你取到百度发送的数据后,展示。

1.1.1、第一步:使用nc和百度建立链接


  • (1).使用nc和百度建立链接(链接有了,通道有了)


nc wwww.baidu.com 80



  • 输出如下
    -

  • (2).使用netstat查看建立的链接
    刚才的nc有没有建立链接呢,怎么确认呢?你不能听我忽悠你对吧?
    我们可以使用netstat -natp命令查看下建立的链接。(备足:实验使用centos环境,1、windows下虽然可以使用netstat,但是无法查看进程名字建立和链接。2、windows下安装的ubuntu系统使用netstat也不可以,同样查看不到。)



netstat -natp



  • 输出如下
    在这里插入图片描述

  • (3)、我们可以查看下百度的ip.
    其ip就是我们nc建立链接的ip地址:110.242.68.4
    在这里插入图片描述


1.1.2、第二步:向百度发送请求

获取百度的主页,HTTP协议,协议版本号1.0.



GET / HTTP/1.0



  • 如下图
    在这里插入图片描述

1.1.3、第三步:百度接受你发送的请求,处理后,把处理后的数据发送给你。

这个过程是百度内部处理的,我们看不到,但是我们可以看到第四步的数据。(其实百度回复的数据,我们可以使用抓包工具抓到,后面我们会在《四、实战、三》中使用抓包工具tcpdump,再深入的讲解下)


1.1.4、第四步:获取百度发送的数据


  • 敲击两次enter键。看到输出如下
    在这里插入图片描述

1.1.5、总结:

向百度获取步骤是上面四个,简单来说,其实也可以说成是两个。


  • 第一:建立链接
  • 第二:发送请求。

1.2、和redis建立链接

除了和百度建立网络链接,其实还可以和其他服务端建立链接。比如redis-server.


  • 第一步:启动redis服务
  • 第二步:使用nc和redis建立链接
  • 第三步:nc向redis服务发送数据
  • 第四步:redis服务处理后,发送给请求.
  • 第五步:获取redis发送的数据

1.2.1、第一步:启动redis服务

redis服务端的端口号6379.


  • 启动redis-server服务
    在这里插入图片描述

1.2.2、第二步:使用nc和redis建立链接


  • 和redis-server建立链接输出如下
    在这里插入图片描述
  • 使用netstat -natp查看
    在这里插入图片描述

1.2.3、第三步:nc向redis服务发送数据

redis是一个键值数据库,设置key1 的值为1234



set key2 1234



  • 输出如下
    在这里插入图片描述

1.2.4、第四步:redis-server服务处理后,发送给请求.


  • 此过程在redis的服务端,所以我们在此看不到。(同百度回复数据)

1.2.5、第五步:获取redis发送的数据


  • 同1.2.3的图,redis服务端返回了一个+ok

1.3、建立一个socket的链接


  • 后面我会单独写一篇c++的demo《c++进程通信——套接字(socket)》,详细的介绍。

总结:建立链接,就是在内核分配了资源。分配的资源用来发送和接收数据。


2、第一次握手后的状态(state)


  • 我们从1.1.1和1.2.2中可以看到,平时的状态是LISTEN——listen,建立链接后状态是ESTABLISHED——established。那第一次握手的状态是什么呢?(即发送第一次握手的数据包后的状态)
  • 从下图中,我们可以看到,状态是SYN_SENT
    在这里插入图片描述
    在这里插入图片描述
  • 类比第二次握手,同样的道理,只有在三次握手后,状态才是已经建立(ESTABLISHED),(此说法针对服务端,客户端应该是在第二次握手后)
  • 本实验主要是让大家对建立链接,发送数据包,这个过程,有一个清晰的认识。

3、三次握手+传输数据+四次分手

使用tcpdump查看下四次分手的过程。


  • 首先,打开抓包工具tcpdump


tcpdump --nn -i ens33 port 80
或者也可以使用,tcpdump --nn -i - X ens33 port 80,可以看到具体的抓到的数据。



  • 输出如下
    在这里插入图片描述

  • 然后,请求百度主页(如下图,可以看到百度页面已经请求回来了)



curl http://www.baidu.com



  • 输出如下
    在这里插入图片描述

  • 最后:查看tcpdump抓到的包
    在这里插入图片描述

  • 分析抓到的包


3.1、三次握手


  • 第一次握手:本机给百度发了一个数据包,请求链接
  • 第二次握手:百度给本机回复了一个数据包,同意你的链接请求
  • 第三次握手:本机给百度回复了一个数据包,同意
  • 备注:点(.)代表同意。
    在这里插入图片描述

3.2、向百度请求数据,发送url

三次握手建立链接后,就可以通信了


  • 1、本机给百度发送url,请求百度主页
  • 2、百度回复本机:同意
    在这里插入图片描述

3.3、百度回复数据

百度分三次回复数据包


  • 百度给本机发送第一个数据包
  • 本机给百度回复:收到

备注:


  • 第二个、第三个包、和第一个包的发送和接受相同,不做过多介绍
  • 按照道理说,三个数据包的发送和接受,应该是一起的,不知为何中间加了一次分手,怀疑是抓包的数据顺序有些问题。本人就不做过多讨论了。
    在这里插入图片描述

3.4、四次分手


  • 第一次分手:本机和百度发,我要和你分手
  • 第二次分手:百度和本机回,我同意你说的分手
  • 第三次分手:百度和本机发,分手吧
  • 第四次分手:本机和百度回,同意
    在这里插入图片描述

4、网卡配置文件


  • 命令行


cd /etc/sysconfig/network-scripts/
cat ifcfg-ens33



5、从tcp到arp整个过程抓包


  • 我们删除了网关
  • arp广播会问,谁有192.168.3.1
  • 然后就有回复,我有192.168.3.1,网卡地址是,然后就打包发出去了,至于怎么在网卡间传播的,可以看我们在链路层画的流程图。


arp -d 192.168.3.1 && curl http:www.baidu.com
tcpdump --nn -i ens33 port 80 or arp



  • 先用tcpdump监听,
  • 然后,使用arp删除网关,并立刻获取百度的网页。
  • 接着,请求到网关时,因为不知道往哪里发,就是采用arp广播。
  • 谁有网关192.168.3.1,
  • 网关听到了就会回复:我有192.168.3.1,他对应的网卡地址是在网卡cc::bb。。。等
    在这里插入图片描述






推荐阅读
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • Parallels Desktop for Mac 是一款功能强大的虚拟化软件,能够在不重启的情况下实现在同一台电脑上无缝切换和使用 Windows 和 macOS 系统中的各种应用程序。该软件不仅提供了高效稳定的性能,还支持多种高级功能,如拖放文件、共享剪贴板等,极大地提升了用户的生产力和使用体验。 ... [详细]
  • PHP 各版本对比:标准版与最新顶级版的详细分析 ... [详细]
  • 如何在PHP中准确获取服务器IP地址?
    如何在PHP中准确获取服务器IP地址? ... [详细]
  • 全面指南:安装Adobe Photoshop 2020及所有PS版本软件详细步骤
    全面指南:安装Adobe Photoshop 2020及所有PS版本软件详细步骤 ... [详细]
  • MATLAB字典学习工具箱SPAMS:稀疏与字典学习的详细介绍、配置及应用实例
    SPAMS(Sparse Modeling Software)是一个强大的开源优化工具箱,专为解决多种稀疏估计问题而设计。该工具箱基于MATLAB,提供了丰富的算法和函数,适用于字典学习、信号处理和机器学习等领域。本文将详细介绍SPAMS的配置方法、核心功能及其在实际应用中的典型案例,帮助用户更好地理解和使用这一工具箱。 ... [详细]
  • 利用 Python Socket 实现 ICMP 协议下的网络通信
    在计算机网络课程的2.1实验中,学生需要通过Python Socket编程实现一种基于ICMP协议的网络通信功能。与操作系统自带的Ping命令类似,该实验要求学生开发一个简化的、非标准的ICMP通信程序,以加深对ICMP协议及其在网络通信中的应用的理解。通过这一实验,学生将掌握如何使用Python Socket库来构建和解析ICMP数据包,并实现基本的网络探测功能。 ... [详细]
  • 本文详细介绍了批处理技术的基本概念及其在实际应用中的重要性。首先,对简单的批处理内部命令进行了概述,重点讲解了Echo命令的功能,包括如何打开或关闭回显功能以及显示消息。如果没有指定任何参数,Echo命令会显示当前的回显设置。此外,文章还探讨了批处理技术在自动化任务执行、系统管理等领域的广泛应用,为读者提供了丰富的实践案例和技术指导。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • 作为软件工程专业的学生,我深知课堂上教师讲解速度之快,很多时候需要课后自行消化和巩固。因此,撰写这篇Java Web开发入门教程,旨在帮助初学者更好地理解和掌握基础知识。通过详细记录学习过程,希望能为更多像我一样在基础方面还有待提升的学员提供有益的参考。 ... [详细]
  • REST与RPC:选择哪种API架构风格?
    在探讨REST与RPC这两种API架构风格的选择时,本文首先介绍了RPC(远程过程调用)的概念。RPC允许客户端通过网络调用远程服务器上的函数或方法,从而实现分布式系统的功能调用。相比之下,REST(Representational State Transfer)则基于资源的交互模型,通过HTTP协议进行数据传输和操作。本文将详细分析两种架构风格的特点、适用场景及其优缺点,帮助开发者根据具体需求做出合适的选择。 ... [详细]
  • 在JavaWeb项目架构中,NFS(网络文件系统)的实现与优化是关键环节。NFS允许不同主机系统通过局域网共享文件和目录,提高资源利用率和数据访问效率。本文详细探讨了NFS在JavaWeb项目中的应用,包括配置、性能优化及常见问题的解决方案,旨在为开发者提供实用的技术参考。 ... [详细]
  • 【图像分类实战】利用DenseNet在PyTorch中实现秃头识别
    本文详细介绍了如何使用DenseNet模型在PyTorch框架下实现秃头识别。首先,文章概述了项目所需的库和全局参数设置。接着,对图像进行预处理并读取数据集。随后,构建并配置DenseNet模型,设置训练和验证流程。最后,通过测试阶段验证模型性能,并提供了完整的代码实现。本文不仅涵盖了技术细节,还提供了实用的操作指南,适合初学者和有经验的研究人员参考。 ... [详细]
  • 本文详细介绍了如何在Java Web服务器上部署音视频服务,并提供了完整的验证流程。以AnyChat为例,这是一款跨平台的音视频解决方案,广泛应用于需要实时音视频交互的项目中。通过具体的部署步骤和测试方法,确保了音视频服务的稳定性和可靠性。 ... [详细]
  • PHP网站日志深度解析与数据洞察分析
    通过对PHP网站日志进行深入解析与数据洞察分析,可以有效提升网站性能和用户体验。由于网站日志数据量庞大,通常需要借助专业的日志分析工具来处理。常用的工具包括光年日志分析工具和WebLog Expert等,这些工具能够帮助技术人员快速识别并解决网站运行中的各种问题,从而优化SEO效果和提升整体运营效率。 ... [详细]
author-avatar
宅妈每日贴_889
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有