【笔记】tcp/ip illustrated 【IP】

一、参考


TCP/IP详解 卷1:协议(英文版)

TCP/IP详解 卷1:协议

理解字节序

IP数据报首部校验和算法

二、名词解释


TOS, type-of-service 服务类型
SNMP,simple network management protocol 简单网络管理协议
NNTP,network news transfer protocol 网络新闻传输协议
NFS, network file system 网络文件系统
TTL,time-to-live 生命周期
big endian,大端字节序
little endian, 小端字节序

三、正文


1. 概要

IP协议提供不可靠、无连接的数据报传送服务
(1)不可靠,
IP协议无法保证IP数据报能成功发送到目标服务器,IP仅提供最好的传输服务,如果发生某种错误,例如某个路由器暂时用完了缓冲区,IP协议有一个简单的错误处理算法:丢弃该数据报,发送ICMP消息报给信源端。保证数据传输可靠性的任务交给上层协议来实现(例如:TCP)
(2)无连接,
IP并不维护任何关于后续数据报的状态信息,每个数据报的处理是相互独立的,即有可能IP数据包接收顺序不同于发送顺序

2. IP首部

image.png

普通的IP首部长度为20字节,如图,最高位在左边,记为0bit,最低位在右边,记为31bit,
四个字节的32bit值按照下面的次序传输:
0~7, 8~15, 16~23, 24~31
这种传输次序称为大端字节序,由于TCP/IP首部中所有的二进制整数在网络中传输都要求是大端字节序,所以又称为网络字节序,以其他形式存储的二进制整数,在传输数据之前,需要将首部转换为网络字节序。

计算机硬件有两种存储数据的方式,大端字节序和小端字节序,例如:数值0x2211中高位字节是0x22,低位字节是0x11, 大端字节序:高位字节在前,低位字节在后,这是人类读写数值的方法,小端字节序:低位字节在前,高位字节在后,即0x1122形式存储。

目前的协议版本号为4,因此IP称为IPv4,
首部长度表示首部占32bit字的数目,包括任何选项,60 =(2**4 - 1)*32/8,即首部最长为60个字节,普通的IP数据报(没有任何选项)字段的值是5,即20个字节。

TOS有8位,由三个部分组成,
(1)3位优先字段,已经被忽略
(2)4位子字段,依次为最小化时延、最大吞吐量、最高可靠性、最小费用,
这4位最多只能配置1个,如果都是0,表示为一般服务

clipboard.png

【笔记】tcp/ip illustrated 【IP】_第1张图片
由图可见,
交互式登录应用程序,例如Telnet, Rlogin, 要求最小的传输时延,因为它们和用户交互,用于传输少量数据
文件传输程序,例如FTP,需要传输大量数据,要求最大吞吐量,
网络管理SNMP程序和路由选择协议,需要保证最高可靠性,
用户网络新闻传输NNTP应用, 可以使用最小费用模式

(3)1位没有实际使用,固定为0
总长度字段, IP数据报的长度,单位是字节(8位),利用首部长度字段和总长度字段,可以知道IP数据报中数据内容的起始位置和长度,由于总长度字段为16bit,则IP数据报理论长度最大值为65535字节,尽管可以传送一个长度为65535字节的IP数据报,但是大多数的链路层都会对其进行分片,而且,主机也要求不能接收超过576字节的数据报
由于TCP把用户数据分成若干片,因此一般来说,这个限制不会影响TCP,大多的UDP应用(RIP,TFTP,BOOTP,DNS,SNMP),都限制用户数据报长度为512字节,小于576字节,
事实上,大多数的实现(特别是支持网络文件系统NFS的实现)允许超过8192字节的数据报。
总长度字段是IP首部中必要的内容,因为一些数据链路(例如以太网)需要填充一些数据以达到最小长度,尽管以太网的最小帧长度为46字节,但是IP数据报的长度可能小于这个值。

标识字段,唯一标识主机发出的每一份数据报,通常是每发出一个数据报后,递增1
生存时间字段,设置IP数据报可以经过的最多路由器数量,指定了数据报的生存时间,初始值由源主机设置(通常是32或者64),一旦经过一个处理它的路由器,则它的值减去1,当数值为0时,数据报被丢弃,发送ICMP报文通知源主机
协议字段,标识哪个协议向IP传送数据

首部检验和字段,根据首部计算的检验和码,不对首部后面的数据进行计算,因为ICMP, IGMP, UDP, TCP都有它们各自的头部校验值,用于校验准确性
如果接收时候,发现检验和错误,则IP丢弃收到的数据报,但是不生成差错报文,由上层发现丢失的数据报并且进行重传

ICMP/IGMP/UDP/TCP采用相同的检验和算法,
每一份IP数据报都包含有IP源地址和目的地址

3. IP路由

从概念上,IP路由非常简单,
如果目标主机直接和源主机相连(例如,点到点链路)或者源主机和目标主机在共享网络中(例如,以太网或者令牌环网),IP数据报将直接发送到目标主机
否则,源主机发送IP数据报到默认的路由器,让路由器将IP数据报发送到目标主机,大多数的主机都采用这种简单机制

总体规划中,IP层将收到来自本地上层(TCP,UDP, ICMP, IGMP层)的数据报用于发送,或者从一个网络接口接收数据报,在IP层,内存中维护了路由表,每一次接收到数据报都会搜索路由表

当从网络接口中接收到数据报,
(1)IP首先检查目标IP地址是否是接收主机的IP地址或者接收主机的广播地址,如果是,执行(2),如果不是,执行(3)
(2)通过IP数据报头部协议类型,将数据传送到指定的协议模块
(3)判断IP层是否被配置成路由器,如果已经配置,则转发数据报,否则,直接丢弃该数据报

路由表中每条记录都包含:
(1)目标IP地址,该IP地址,通过flag字段标识,可以为一个完整的主机地址,或者一个网络地址
主机地址有非0的主机号,网络地址中的主机号为0,表示网络中所有的主机(例如,以太网或者令牌环网)
(2)下一跳路由器的IP地址,或者有直接连接的网络IP地址,
如果下一跳路由器IP是一个直连网络,通过它可以转发数据,
如果下一跳路由器不是最终目标主机,将接收发送的数据报,并且转发到最终目标主机
(3)flags字段,其中的一个flags字段标识目标IP地址是一个主机地址或者是一个网络地址,还有一个flags字段表示是否是真正的下一站路由器或者是一个直连的网络接口
(4)为数据报的传输指定一个网络接口

IP路由选择是逐跳的进行,从这个路由表信息可以看出,IP并不知道到达任何目的地的完整路径(除了那些目标主机与源主机直接相连的场景),所有的IP路由选择只为数据报传输提供下一跳路由器的IP地址,它假定下一跳路由器比发送数据报的主机更加接近目标主机,而且下一跳路由器和该主机直接相连,

IP路由选择主要完成下列功能:

(1)搜索路由表,匹配目标IP地址(网络号和主机号都要匹配),如果有记录,把报文发送给该表目指定的下一站路由器或者直接连接的网络接口(取决于标志字段的值)

(2)如果没有匹配目标IP地址的记录,则搜索路由表,寻找能与目的网络号相匹配的表目,如果有记录,则把报文发送给该表目指定的下一站路由器或者直接连接的网络接口(取决于标志字段的值)。所有包含在目标网络中的主机都可以通过下一跳路由器获取,这种搜索网络的匹配方法必须考虑可能的子网掩码

(3)如果没有找到匹配目标网络号的记录,搜索默认记录

如果上面三步都没有执行,则数据报无法传送,则通常向生成该数据报的应用程序返回主机不可达或者网络不可达错误信息

clipboard.png

从上图中,
(1)所有主机和路由器使用一个默认路由,实际上,大多主机和一些路由器使用默认路由跳转到除了本地网络的其他目标网络
(2)目标IP地址在数据包中不会变化
(3)可以使用不同的链路层头部

4. 子网寻址

所有主机需要支持子网寻址,主机ID被分成子网ID和主机ID

clipboard.png

clipboard.png

使用子网寻址可以减少路由次数

5.子网掩码

clipboard.png

通过子网掩码,可以判断主机地址A与主机地址B:
(1)是否是同子网
(2)是否同一个网络,但不同子网
(3)是否不是同一个网络

6.特殊IP地址

clipboard.png
可以将表格分为三部分:
(1)前两个表示特殊源地址
(2)第三个表示回环地址
(3)最后四个表示广播地址

clipboard.png

clipboard.png

clipboard.png

7. ifconfig

ifconfig: interface config 接口配置

ifconfig -a 查看所有接口信息
ifconfig eno1 查看接口名称为eno1的接口信息

8. netstat

netstat -in

你可能感兴趣的:(ip,networking)