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

tcp/ip协议

ISO/OSI参考模型 传输数据单位PDU

应用层:APDU,应用层与应用程序界面沟通,已达到展示给用户的目的。

表示层:PPDU,对网络传输的数据进行变换,使得多个主机之间传送的消息能够互相理解,包括数据的压缩、加密、格式转换等

会话层:SPDU,管理主机之间会话过程,包括会话建立、终止和会话过程中的管理

传输层:segment,跟数据链路层一样可以提供可靠的数据传输服务,它检测IP层(路由器)出现的丢包,然后产生一个重传请求,能够将乱序收到的数据包重新排序

网络层:package,负责将各个子网之间的数据进行路由选择,分组和重组

数据链路层:frame,对物理层的bit流进行数据成帧。提供可靠的数据传输服务,实现无差错数据传输

物理层:bit流,不对数据进行任何的假定和解释,它不知道数据是做什么的

 

 

理想模型:七层模型

tcp/ip协议

图片来自http://www.ha97.com/3215.html

 

OSI和邮件发送的比喻

tcp/ip协议

 

事实模型:tcp/ip四层模型

tcp/ip协议

tcp/ip协议

通信的基础是遵循一致的协议

 

路由器用来连接多个网络,中间可能经过很多路由器

tcp/ip协议

 

对等通信

虚电路,就好像应用层直接对话

tcp/ip协议栈,因为实际的数据流就好像后进先出的概念

tcp/ip协议

 

封装

tcp/ip协议

通过封装对等端能够认识他从而能够解析

加上头部

 

解封(分用)

tcp/ip协议

去掉各个头部

 

 

 

tcp/ip协议

 

以太网帧的格式

tcp/ip协议

crc用于校验

 

tcp/ip协议

1. 地址

对链路层来说它并不识别ip地址(逻辑地址),只能识别mac地址(物理地址)

IP->MAC 地址解析(ARP协议)

MAC->IP 反向地址解析(RARP协议)

2. 类型

存在3种数据报文,IP数据报,ARP请求/应答,RARP请求/应答

ARP协议,RARP协议我们把它们归并到链路层,实际上应该是介于IP层和链路层之间的协议

根据以太网帧的类型链路层决定把数据报传递给ARP协议,RARP协议还是上层的网络层

ICMP协议,IGMP协议也是介于IP层与传输层之间,根据IP头部信息中的协议类型决定到底是传输给ICMP协议,IGMP协议还是上层的传输层协议(tcp,udp)

 

ICMP协议

用于传递差错信息、时间、回显、网络信息等控制数据

ip->mac地址解析,可能ip并不存在

A要进行数据的封装,要得到B的mac地址,如果它经过网络路由器轮转最终无法得到对方的mac地址的时候就会出错,出错就需要将这个差错信息返回给源端,这时候反馈的过程就将数据封装成ICMP协议的格式通知给源端。

tcp/ip协议

 

PING程序就是将数据封装成ICMP协议进行实现的

tcp/ip协议

ARP-地址解析协议

tcp/ip协议

 

当主机A要向本局域网上的某个主机B发送IP数据报时,就先在其ARP高速缓存中查找有无主机B的IP地址。如果有,就在ARP高速缓存中查出其对应的硬件地址,再把其硬件地址写入到MAC帧,然后通过局域网把该MAC帧发往此硬件地址。

如果主机高速缓存中没有则运行ARP按照以下步骤查找出主机B的硬件地址。

(1)ARP进程在本局域网上广播发送一个ARP请求分组如下:

 tcp/ip协议
(2)本局域网上所有的主机上运行的ARP进程都收到此ARP请求分组。

(3)主机B在ARP分组中见到自己的IP地址就向A发送ARP响应分组,并写入自己的硬件地址,相应分组是普通的单播。

(4)主机A收到主机B的ARP响应分组后,就在其ARP高速缓存中写入主机B的IP地址到硬件地址的映射。

(5)另外,当发送主机和目的主机不在同一个局域网中时,即便知道目的主机的MAC地址,两者也不能直接通信,必须经过路由转发才可以。所以此时,发送主机通过ARP协议获得的将不是目的主机的真实MAC地址,而是一台可以通往局域网外的路由器的MAC地址。于是此后发送主机发往目的主机的所有帧,都将发往该路由器,通过它向外发送。这种情况称为委托ARP或ARP代理(ARP Proxy)。

ARP缓存表采用老化机制,在一段时间内如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。

 

 

 

参考:

OSI与邮件收发的比喻

OSI七层协议模型、TCP/IP四层模型学习笔记

计算机网络--ARP地址解析协议详解

 


推荐阅读
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • 浅析python实现布隆过滤器及Redis中的缓存穿透原理_python
    本文带你了解了位图的实现,布隆过滤器的原理及Python中的使用,以及布隆过滤器如何应对Redis中的缓存穿透,相信你对布隆过滤 ... [详细]
  • 本章介绍了TCP/IP协议族中的链路层,其主要功能是为IP模块发送和接收IP数据报。链路层还支持一些辅助性协议,如ARP。此外,本文详细探讨了不同类型的链路层技术及其应用。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 如何将TS文件转换为M3U8直播流:HLS与M3U8格式详解
    在视频传输领域,MP4虽然常见,但在直播场景中直接使用MP4格式存在诸多问题。例如,MP4文件的头部信息(如ftyp、moov)较大,导致初始加载时间较长,影响用户体验。相比之下,HLS(HTTP Live Streaming)协议及其M3U8格式更具优势。HLS通过将视频切分成多个小片段,并生成一个M3U8播放列表文件,实现低延迟和高稳定性。本文详细介绍了如何将TS文件转换为M3U8直播流,包括技术原理和具体操作步骤,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 本指南介绍了如何在ASP.NET Web应用程序中利用C#和JavaScript实现基于指纹识别的登录系统。通过集成指纹识别技术,用户无需输入传统的登录ID即可完成身份验证,从而提升用户体验和安全性。我们将详细探讨如何配置和部署这一功能,确保系统的稳定性和可靠性。 ... [详细]
  • 体积小巧的vsftpd与pureftpd Docker镜像在Unraid系统中的详细配置指南:支持TLS加密及IPv6协议
    本文详细介绍了如何在Unraid系统中配置体积小巧的vsftpd和Pure-FTPd Docker镜像,以支持TLS加密和IPv6协议。通过这些配置,用户可以实现安全、高效的文件传输服务,适用于各种网络环境。配置过程包括镜像的选择、环境变量的设置以及必要的安全措施,确保了系统的稳定性和数据的安全性。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • Framework7:构建跨平台移动应用的高效框架
    Framework7 是一个开源免费的框架,适用于开发混合移动应用(原生与HTML混合)或iOS&Android风格的Web应用。此外,它还可以作为原型开发工具,帮助开发者快速创建应用原型。 ... [详细]
  • 快速掌握Tomcat 8.5.40的配置与应用技巧 ... [详细]
  • Bagels:融合挖矿、借贷、跨链与预言机功能的多合一创新项目即将启动
    Bagels:融合挖矿、借贷、跨链与预言机功能的多合一创新项目即将启动 ... [详细]
  • 本指南详细介绍了在Linux环境中高效连接MySQL数据库的方法。用户可以通过安装并使用`mysql`客户端工具来实现本地连接,具体命令为:`mysql -u 用户名 -p 密码 -h 主机`。例如,使用管理员账户连接本地MySQL服务器的命令为:`mysql -u root -p pass`。此外,还提供了多种配置优化建议,以确保连接过程更加稳定和高效。 ... [详细]
  • 在 CentOS 6.5 系统上部署 VNC 服务器的详细步骤与配置指南
    在 CentOS 6.5 系统上部署 VNC 服务器时,首先需要确认 VNC 服务是否已安装。通常情况下,VNC 服务默认未安装。可以通过运行特定的查询命令来检查其安装状态。如果查询结果为空,则表明 VNC 服务尚未安装,需进行手动安装。此外,建议在安装前确保系统的软件包管理器已更新至最新版本,以避免兼容性问题。 ... [详细]
author-avatar
Matherslll_493
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有