博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TCP/IP详解笔记(一)
阅读量:4258 次
发布时间:2019-05-26

本文共 2761 字,大约阅读时间需要 9 分钟。

第一章 概述

网络协议通常分不同层次进行开发,每一层分别负责不同的通信功能,TCP/IP通常被认为是一个四层协议系统,如图 1.1 所示:

这里写图片描述

  1. 链路层,有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡
  2. 网络层,有时也称作互联网层,处理分组在网络中的活动,例如分组的选路
  3. 运输层主要为两台主机上的应用程序提供端到端的通信。在T C P / I P协议族中,有两个
    互不相同的传输协议: T C P(传输控制协议)和U D P(用户数据报协议)
  4. 应用层负责处理特定的应用程序细节

TCP/IP的分层

这里写图片描述

由于T C P、U D P、I C M P和I G M P都要向I P传送数据,因此I P必须在生成的I P首部中加入某种标识,以表明数据属于哪一层。为此, I P在首部中存入一个长度为8 b i t的数值,称作协议域。1表示为I C M P协议, 2表示为I G M P协议, 6表示为T C P协议, 1 7表示为U D P协议。

封装

这里写图片描述

当应用程序用T C P传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息),该过程如上图所示。

以太网数据帧的物理特性是其长度必须在46~1500字节之间。

分用

当目的主机接收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议盒都要去检查报文首部中的协议标识,以确定接收数据的上层协议,这个过程称作“分用”。

这里写图片描述

第二章 链路层

在TCP/IP协议族中,链路层主要有三个目的:

  1. 为IP模块发送和接收IP数据报;
  2. 为ARP模块发送ARP请求和接收ARP应答;
  3. 为RARP发送RARP请求和接收RARP应答;

这里写图片描述

两种帧格式都采用48 bit的目的地址和源地址—硬件地址;
ARP和RARP协议对32bit的IP地址和48bit的硬件地址进行映射;

SLIP

SLIP的全称是Serial Line IP。它是一种在串行线路上对I P数据报进行封装的简单形式。

下面规则定义了SLIP协议定义的帧格式:
1) IP数据报以一个称作E N D(0 x c 0)的特殊字符结束。同时,为了防止数据报到来之前
的线路噪声被当成数据报内容,大多数实现在数据报的开始处也传一个E N D字符(如果有线
路噪声,那么E N D字符将结束这份错误的报文。这样当前的报文得以正确地传输,而前一个
错误报文交给上层后,会发现其内容毫无意义而被丢弃)。
2) 如果I P报文中某个字符为E N D,那么就要连续传输两个字节0 x d b和0 x d c来取代它。
0 x d b这个特殊字符被称作S L I P的E S C字符,但是它的值与A S C I I码的E S C字符(0 x 1 b)不同。
3) 如果I P报文中某个字符为S L I P的E S C字符,那么就要连续传输两个字节0 x d b和0 x d d来取代它。
这里写图片描述
SLIP是一种简单的帧封装方法,其也存在一些缺陷:
1. 每一端必须知道对方的IP地址,没有办法把本端的IP地址通知给另一端;
2. 数据帧中没有类型字段,如果一条串行线路用于SLIP,那么它不能同时使用其他协议;
3. SLIP没有在帧中加上检验和;

PPP:点对点协议

PPP,点对点协议修改了SLIP协议上的所有缺陷,PPP包括以下三部分:

1. 在串行链路上封装IP数据报的方法;
2. 建立、配置及测试数据链路的链路控制协议(LCP),允许通信双方进行协商,以确定不同选项;
3. 针对不同网络层协议的网络控制协议(NCP)体系;
这里写图片描述
每一帧都以标志字段0X7e开始和结束,紧接着是一个地址字节,值始终是0Xff,然后是一个0X03的控制字节;

接下来是协议字段,类似于以太网中类型字段的功能。当它的值为0 x 0 0 2 1时,表示信息字段是一个I P数据报;值为0 x c 0 2 1时,表示信息字段是链路控制数据;值为0 x 8 0 2 1时,表示信息字段是网络控制数据;

CRC字段是一个循环冗余检验码,已检测数据帧中的错误;

由于标志字符的值是0 x 7 e,因此当该字符出现在信息字段中时, P P P需要对它进行转义。
在同步链路中,该过程是通过一种称作比特填充(bit stuff i n g )的硬件技术来完成的[ Ta n e n b a u m1 9 8 9 ]。
在异步链路中,特殊字符0 x 7 d用作转义字符。当它出现在P P P数据帧中时,那么紧接着的字符的第6个比特要取其补码,具体实现过程如下:
1) 当遇到字符0 x 7 e时,需连续传送两个字符: 0 x 7 d和0 x 5 e,以实现标志字符的转义。
2) 当遇到转义字符0 x 7 d时,需连续传送两个字符: 0 x 7 d和0 x 5 d,以实现转义字符的转义。
3 ) 默认情况下,如果字符的值小于0 x 2 0(比如,一个A S C I I控制字符),一般都要进行转义。例如,遇到字符0 x 0 1时需连续传送0 x 7 d和0 x 2 1两个字符(这时,第6个比特取补码后变为1,而前面两种情况均把它变为0)。

总的来说,PPP比SLIP具有以下优点:

  1. PPP支持在单根串行线路上运行多种协议,不只是IP协议;
  2. 每一帧都有循环冗余检验;
  3. 通信双方可以进行IP地址的动态协商;
  4. 与CLSIP类似,对TCP和IP报文首部进行压缩;
  5. 链路控制协议可以对多个数据链路选项进行设置;
    为这些优点付出的代价是在每一帧的首部增加3个字节,当建立链路时要发送几帧协商数据,以及更复杂的实现。

最大传输单元MTU

以太网和802.3对数据帧的长度都有一个限制,其最大值分别是1500和1492字节,链路层的这个特性称作MTU,最大传输单元,不同类型网络大多数都有一个上限;

如果IP层有一个数据报要传,而且数据的长度比链路层的MTU还大,那么IP层就需要分片,这样每一片都小于MTU。

点到点的链路层的MTU并非指的是网络媒体的物理特性,相反,它是一个逻辑限制,目的是为交互使用提供足够快的响应时间。

路径MTU

当同一网络的两台主机互相通信时,该网络的MTU是非常重要的,如果两个主机通信要通过多个网络,那么每个网络的链路层就可能有不同的MTU,重要的不是两台主机所在网络的MTU值,而是两台主机通信路径中的最小的MTU,其被称作路径MTU。

两台主机之间的路径MTU不一定是常数,其取决于当时所选择的的路由。而选路不一定是对称的(从A到B的路由可能与B到A的路由不同),因此路径MTU在两个方向上不一定是一致的。

你可能感兴趣的文章
想象一双结实而富有弹性的大腿:理解 Flexbox 布局
查看>>
GraphQL 初探—面向未来 API 及其生态圈
查看>>
使用 CSS Houdini 绘制平滑圆角
查看>>
聊聊Vue.js的template编译
查看>>
Vue源码阅读连载之响应式设计
查看>>
CSS布局 -- 圣杯布局 & 双飞翼布局
查看>>
产生随机数
查看>>
android 基本布局
查看>>
android 操作系统
查看>>
button事件的两种处理方法
查看>>
android 震动
查看>>
【数据结构与算法】(四) c 语言静态队列的简单实现
查看>>
[linux] unix domain socket 例子
查看>>
[linux] c 实现简单的web服务器
查看>>
栈--判断回文字符串
查看>>
Dijkstra算法--一个点到其余点最短路径
查看>>
解决 The `master` repo requires CocoaPods 1.0.0 - (currently using 0.39.0)
查看>>
gdb调试常用命令
查看>>
vim正则表达式批量修改文本
查看>>
objective-c init方法的写法
查看>>