TCP/IP协议系统

1、网络访问层

  网卡(network adapter),即网络接口板,又称网络适配器或NIC (网络接口控制器),是一块被设计用来允许计算机在计算机网络上进行通讯的计算机硬件,由处理器,存储器等部件组成。 网卡能实现与局域网传输介质之间的物理连接和电信号匹配,还涉及帧的发送与接收、帧的封装与拆封、介质访问控制、数据的编码与解码以及数据缓存的功能等。

网络访问层与OSI模型

  网络访问层位于TCP/IP协议栈的最底层

  TCP/IP网络访问层大致对应于OSI的物理层和数据链路层。OSI的物理层负责把数据帧转化为适合于传输介质的比特流,也就是说,OSI 物理层管理和同步实际传输的电子或模拟脉冲。在接收端,物理层把这些脉冲重新组合为数据帧。

  OSI数据链路层执行两个独立的任务,相应地划分为两个子层。
介质访问控制(MAC):这个子层提供与网络适配器连接的接口。实际上,网络适配器驱动程序通常被称为MAC驱动,而网卡在工厂固化的硬件地址通常被称为MAC地址。
逻辑链路控制(LLC):这个子层对经过子网传递的帧进行错误检查,并且管理子网上通信设备之间的链路。

网络体系

  网络访问层包括如下一些体系。
IEEE 802.3(以太网):在大多数办公室和家庭使用的基于线缆的网络。
IEEE 802.11(无线网络):在办公室、家庭和咖啡厅使用的无线网络技术。
IEEE 802.16(WiMAX):用于移动通信长距离无线连接的技术。
点到点协议(PPP):Modem通过电话线进行连接的技术。

  网络访问层以上的协议层不必关心硬件设计的问题。TCP/IP协议栈的设计保证了与硬件交互相关的细节都发生在网络访问层,使得TCP/IP能够工作于多种不同的传输介质。即网络访问层封装了传输介质的细节,使得协议栈的上层可以独立于硬件进行操作。

物理寻址

  网络访问层需要把逻辑IP地址(通过协议软件来配置)与网络适配器的固定物理地址相关联。物理地址通常也被称为MAC地址,这是因为在OSI模型中,物理寻址是由介质访问控制(MAC)子层负责的。由于物理寻址系统是封装在网络访问层中的,所以地址可以根据网络体系规范采用不同的形式。

  TCP/IP使用地址解析协议(ARP)和逆向地址解析协议(RARP)把IP地址关联到网络适配器的物理地址。ARP和RARP为用户提供的逻辑IP地址与局域网上使用的硬件地址建立了一个对应关系。

以太网

  在典型的以太网上,全部计算机共享同一个传输介质。以太网使用称为载波侦听多路访问/冲突检测(CSMA/CD)的方法,来判断计算机何时可以把数据发送到访问介质。通过使用 CSMA/CD,所有计算机都监视传输介质的状态,在传输之前等待线路空闲。如果两台计算机尝试同时发送数据,就会发生冲突,计算机就会停止发送,等待一个随机的时间间隔,然后再次尝试发送。

剖析以太网帧

  网络访问层的软件从网际层接收数据报,把它转化符合物理网络规范的形式。在以太网中,网络访问层的软件必须把数据转化成能够通过网络适配器硬件进行传输的形式。

当以太网软件从网际层接收到数据报之后,执行以下操作。
1.根据需要把网际层的数据分解为较小的块,以符合以太网帧数据段的要求。以太网帧的整体大小必须在64字节与1518字节之间(不包含前导码)。有些系统支持更大的帧,最大可以到9000字节。这种大型帧能够改善效率,但存在着兼容性的问题,而且并没有得到广泛支持。
2.把数据块打包成帧。每一帧都包含数据及其他信息,这些信息是以太网网络适配器处理帧所需要的。                                                                                                       3.把数据帧传递给对应于 OSI 模型物理层的底层组件,后者把帧转换为比特流,并且通过传输介质发送出去。
以太网上其他网络适配器接收到这个帧,检查其中的目的地址。如果目的地址与网络适配器的地址相匹配,适配器软件就会处理接收到的帧,把数据传递给协议栈中较高的层。

  帧校验序列(FCS):帧的4字节(32比特)校验和。FCS是检验数据传输的常见方式。发送方计算帧的循环冗余码校验(CRC)值,把这个值写到帧里。接收方计算机重新计算 CRC,与 FCS 字段的值进行比较,如果两个值不相同,就表示传输过程中发生了数据丢失或改变,这时就需要重新传输这一帧。

2、网际层

网际层提供的协议负责局域网网段之外的传递

寻址与发送

  计算机通过网络接口设备(比如网络适配器)与网络进行通信,网络接口设备具有唯一的物理地址,用于接收发向该地址的数据。像以太网网卡这样的设备对于上层协议层的细节是一点也不了解的,它不知道 IP 地址,也不知道发送来的帧是要给 Telnet还是FTP,它只是监听是否收到了数据帧,发现其中目标地址与自己物理地址相符的帧,并把这个帧传递给上层协议栈。
  这种物理寻址方式适合单个局域网网段。由不间断介质连接在一起的若干台计算机利用物理地址就可以实现所需的功能。只需使用网络访问层的低级协议就可以把数据从网络适配器直接传递另一个网络适配器。
  但是,在路由式网络中,不能利用物理地址实现数据传输,因为根据物理地址进行传输所需的过程不能跨越路由接口来运行。即使这样是可行的,根据物理地址传输数据也是非常麻烦的,因为内置在网卡里的固定物理地址不能在地址空间上引入逻辑结构。
  因此,TCP/IP隐藏了物理地址,以一种逻辑化、层次化的寻址方案对网络进行组织。这种逻辑寻址方案由网际层的IP协议维护,而逻辑地址被称为IP地址。地址解析协议(ARP)是另一种网际层协议,它维护一个表格,用于把IP地址映射到物理地址。这个ARP表连接了IP地址与网卡物理地址。

  发送数据→

1.如果目的地址与源地址在同一个网段,源计算机就把数据包直接发送给目的计算机。IP地址被ARP解析为物理地址,数据被直接发送到目的网络适配器。
2.如果目的地址与源地址不在一个网段上,就执行如下过程。
a)直接将数据报发送到网关。网关是位于局域网网段上的一个设备,能够把数据报转发到其他网段(网关基本上也算是一个路由器)。网关地址被ARP解析为物理地址,数据被发送到网关的网络适配器。
b)数据报通过网关被路由到较高级别的网段,再次重复上述过程。如果目的地址在这个新网段里,数据就被发送到目的,否则数据报就会被发送到另一个网关。
c)数据报经过一系列网关被转发到目的网段,目的IP地址被ARP解析为物理地址,数据被发送到目的网络适配器。 

  为了在复杂的路由式网络中传输数据,网际层协议必须具有以下功能:
识别网络中所有的计算机;
提供一种方式来判断何时需要通过网关来传递消息;
提供一种与硬件无关的方式来识别目的网段,从而让数据报能够高效率地经过路由器到达正确的网段;
提供一种方式把目标计算机的逻辑IP地址转化为物理地址,让数据能够传输给目的计算机的网络适配器。 

网际协议(IP)

  IP协议提供了一种分层的、与硬件无关的寻址系统,具有在复杂的路由式网络中传递数据所需的服务。TCP/IP网络上的每个网络适配器都有一个唯一的IP地址。

  在讨论TCP/IP时,我们经常会说计算机有一个IP地址,这是因为大多数计算机只有一个网卡。然而,具有多个网卡的计算机也很常见,比如作为路由器或代理服务器的计算机必须有多个网卡,因此也就有多个 IP地址。术语“主机”通常用于表示与某个IP地址相关联的网络设备。

IP寻址

  IP地址分为两部分:网络ID+主机ID,网络ID:A类地址前8位,B类地址前16位,C类地址前24位。如果32位的地址以0开头,它就是A类地址;如果32位的地址以10开头,它就是B类地址;如果32位的地址以110开头,它就是C类地址。

  A类、B类和C类网络的地址范围:

  Internet规范还定义了特殊用途的D类和E类地址。D类地址用于多播。多播是把一个消息发送到网络的子网,这与广播是不同的,后者需要网络上全部节点都进行处理。D 类地址最前面的 4 位是 1110,对应于十进制数值是224~239。E类网络是实验性质的,一般不用于生产环境。E类网络地址最前面的5位是11110,对应于十进制数值是240~247。

特殊的IP地址

全0的主机ID表示网络本身,如129.152.0.0是指网络ID为129.152的B类网络

全1的主机ID表示广播,如129.152.255.255是指网络ID为129.152的B类网络的广播地址;地址255.255.255.255也可以用于网络上的广播。

以十进制127开头的地址是环回地址。目的地址为环回地址的消息是由本地 TCP/IP软件发送的,其目的在于测试TCP/IP软件是否工作正常。

地址解析协议(ARP:把IP地址映射为物理地址)

  局域网上的计算机使用网际层的地址解析协议(ARP)把IP地址映射为物理地址。主机必须知道目的网络适配器的物理地址才能向它发送数据,由此可见,ARP是一个重要的协议。但是TCP/IP的实现方式让ARP和关于物理地址转换的任何细节对于用户来说几乎是完全透明的,对于用户来说,网络适配器就是以 IP 地址标识的。然而在幕后,IP 地址必须映射到物理地址,消息才能到达目的地。

  网段上每台主机在内存中都保存着一个被称为 ARP 表或 ARP 缓存的表格,其中包含着网段上其他主机的IP地址与物理地址的对应关系。当主机需要向网段上的其他主机发送数据时,它会查看ARP缓存来获得目的的物理地址。ARP缓存是动态变化的。如果要接收数据的地址当前并不存在于 ARP 缓存,主机就会发送一个名为 ARP 请求帧的广播。

  ARP请求帧包含未解析的IP地址,还包含发送这个请求的主机的IP地址和物理地址。网段上的其他主机接收到这个ARP请求,拥有这个未解析IP地址的主机会向发出请求的主机发送自己的物理地址。这个新的IP地址与物理地址的对应关系就会添加到请求主机的ARP缓存里。

  一般来说,ARP缓存里的条目在一定时间之后会过期,条目就会被从表里删除。当主机需要向这个条目所包含的IP地址发送数据时,解析过程会再次重复。

逆向ARP(RARP)

Internet控制信息协议(ICMP)

  发送到远程计算机的数据通常会经过一个或多个路由器,这些路由器在把数据传输到最终目的地的过程中可能发生多种问题。路由器利用Internet控制消息协议(ICMP)消息把问题通知给源IP。ICMP还有用于其他调试和排错的功能。

  常见的ICMP消息:Echo Request和Echo Reply、Source Quench(源抑制,发送大量数据而产生过载时)、Destination Unreachable、Time Exceeded、Fragmentation Needed(需要分段)

  

《TCP/IP入门经典》摘录--Part 2的更多相关文章

  1. 《TCP/IP入门经典》摘录--Part 3

    TCP/IP协议系统 3.子网划分和CIDR 子网 划分网络 为什么需要划分子网? 子网划分就是在网络 ID 之下提供了第 2 层逻辑组织.路由器能够把数据报发送给网络里的某个子网地址(一般对应于一个 ...

  2. 《TCP/IP入门经典》摘录--Part 1

    TCP/IP基础知识 什么是TCP/IP Transmission Control Protocol/Internet Protocol的简写,中译名为传输控制协议/因特网互联协议,又名网络通讯协议, ...

  3. TCP/IP的经典网络编程

                                                                             TCP/IP网络编程之四书五经             ...

  4. TCP/IP入门(4) --应用层

    /** 本篇博客由汗青ZJF整理并发布, 转载请注明出处: http://blog.csdn.net/zjf280441589/article/category/1854365 */ TCP/IP中的 ...

  5. TCP/IP入门(2) --网络层

    /** 本篇博客由 126(127不可用) 2^24 -2 B 2^14 -1 128.1 191.255 2^16 -2 C 2^21 -1 192.0.1 223.255.255 2^8 -2 D ...

  6. TCP/IP入门(1) --链路层

    /** 本博客由汗青ZJF整理并发布, 转载请注明出处: http://blog.csdn.net/zjf280441589/article/category/1854365 */ TCP/IP体系结 ...

  7. TCP/IP入门(3) --传输层

    原文:http://blog.csdn.net/zjf280441589/article/category/1854365 传输层的主要功能 1)传输层为应用进程之间提供端到端的逻辑通信(网络层是为主 ...

  8. TCP/IP入门学习(2)---OSI分层

    一.会话层以上的处理 1.表示层 将数据从主机特有的格式转换为网络标准传输格式.以此使得不同环境之间的通信成为可能. 2.会话层 即决定使用哪个连接或者哪种连接方式将数据发送出去.会话层也会在数首部添 ...

  9. TCP/IP入门学习(1)---分层概述

    本文旨在记述一些学习中的笔记 OSI分层:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层 详细点: 1.应用层:为应用程序提供服务并规定程序中通信相关细节. 2.表示层:将应用处理的信息转 ...

随机推荐

  1. USB-Blaster CPLD FPGA Intel 驱动安装不上的问题,文件的哈希值不在指定的目录文件中,的解决办法,其实很简单

    intel的官网的驱动安装文档: https://www.intel.com/content/www/us/en/programmable/support/support-resources/down ...

  2. Django如何连接mysql

    1.设置django的mysql驱动为pymysql 因为django默认的是使用MySqlDb连接mysql数据库,但是由于该模块不支持python3.4以上版本,所以使用pymysql模块 在项目 ...

  3. day 15 内置函数

    内置函数 不用def定义能直接用的函数,带括号的 locals() # 返回本地作用域中的所有名字 globals() # 返回全局作用域中的所有名字 global 变量 nonlocal 变量 迭代 ...

  4. Selenium实战(六)——数据驱动应用

    一.数据驱动 由于大多数文章和资料都把“读取数据文件”看做数据驱动的标志,下面创建一个baidu_data.csv文件: 文件第一列为测试用例名称,第二列为搜索的关键字.接下来创建test_baidu ...

  5. 在oracle中使用merge into实现更新和插入数据

    目录 oracle中使用merge into DUAL表解释 使用场景 用法 单表 多表 oracle中使用merge into DUAL表解释 在Oracle数据库中,dual是Oracle中的一个 ...

  6. vim编辑器未正常关闭时解决方案

    目录 vim编辑器未正常关闭时解决方案 问题描述 .swp..swo文件产生原因 解决方案 后记 hosts文件 sudo命令小记 vim编辑器未正常关闭时解决方案 问题描述 在mac上的/etc目录 ...

  7. 双向链表的简单Java实现-sunziren

    写在前面,csdn的那篇同名博客就是我写的,我把它现在在这边重新发布,因为我实在不想用csdn了,那边的广告太多了,还有就是那个恶心人的“阅读更多”按钮,惹不起我躲得起. 在上次分享完单向链表的简单编 ...

  8. ZooKeeper启动报错:My id 3 not in the peer list

    错误描述: 解决方法:查看zookeeper-3.4.2/conf目录下 编辑zoo.cfg文件 发现第三行有问题修改

  9. LINUX 概述

    初识linux Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的UNIX工具软件.应用程序和网络协 ...

  10. Android_ExpandableListView

    实现效果: 类似于QQ联系人列表 相关属性: android:childDivider:指定各组内子类表项之间的分隔条,图片不会完全显示, 分离子列表项的是一条直线 android:childIndi ...