热门标签 | 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地址解析协议详解

 


推荐阅读
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • HTML学习02 图像标签的使用和属性
    本文介绍了HTML中图像标签的使用和属性,包括定义图像、定义图像地图、使用源属性和替换文本属性。同时提供了相关实例和注意事项,帮助读者更好地理解和应用图像标签。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • Android中高级面试必知必会,积累总结
    本文介绍了Android中高级面试的必知必会内容,并总结了相关经验。文章指出,如今的Android市场对开发人员的要求更高,需要更专业的人才。同时,文章还给出了针对Android岗位的职责和要求,并提供了简历突出的建议。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • Windows7 64位系统安装PLSQL Developer的步骤和注意事项
    本文介绍了在Windows7 64位系统上安装PLSQL Developer的步骤和注意事项。首先下载并安装PLSQL Developer,注意不要安装在默认目录下。然后下载Windows 32位的oracle instant client,并解压到指定路径。最后,按照自己的喜好对解压后的文件进行命名和压缩。 ... [详细]
  • 突破MIUI14限制,自定义胶囊图标、大图标样式,支持任意APP
    本文介绍了如何突破MIUI14的限制,实现自定义胶囊图标和大图标样式,并支持任意APP。需要一定的动手能力和主题设计师账号权限或者会主题pojie。详细步骤包括应用包名获取、素材制作和封包获取等。 ... [详细]
  • 本文介绍了在Python中使用zlib模块进行字符串的压缩与解压缩的方法,并探讨了其在内存优化方面的应用。通过压缩存储URL等长字符串,可以大大降低内存消耗,虽然处理时间会增加,但是整体效果显著。同时,给出了参考链接,供进一步学习和应用。 ... [详细]
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社区 版权所有