OSI 七层 & Tcp / IP

TCP 数据包结构 :

*TCP 报文结构 : 报文首部 + 用户数据

  • *首部: 默认 20 Byte字节 ( 也就是 160bits )

    1. Source Poret 【源端口】 - 16bit 来源端口号;
      1. Destination 【目的端口】- 16bit 目的端口号;

      2. 【序号】- 32bit 每一个TCP报文段都会有一个序号,序号字段的值其实是本报文段所发送的数据的第一个字节的序号。这是因为TCP是面向连接的可靠服务,其每一个字节都会对应一个序号,通过序号来确保服务的可靠性和有序性。

      3. 【确认号】- 32bit 确认号,是期望收到对方的下一个报文段的数据的第一个字节的序号。(这句话有些拗口,但是在后面我们讲解三次握手和四次挥手时,大家会更深刻的理解这句话的含义)

      4. 【数据偏移】- 4bit 其实它本质上就是“首部长度”,因为“数据偏移”是指TCP报文段的数据部分的起始处距离TCP报文段的起始处的距离。(仍然很拗口,但相信你能明白)。 数据偏移总共占4bit,因此最大能表示的数值为15。而数据偏移的单位是“4字节”,此处的设计和IP数据报的设计是完全相同的,所以说TCP报文段首部的长度最长为15×4=60字节,且首部长度必须为4字节的整数倍。

      5. 【保留字段】- 6bit 这6bit在标准中是保留字段,我猜测,有两个目的,第一个是预留除URG/ACK/PSH/RST/SYN/FIN/之外的冗余功能位;第二个是为了对其字节位。

      6. 【紧急字段URG】- 1bit。 当URG=1时,,此报文段中有紧急数据,应尽快优先传送。

      7. 【确认字段ACK】- 1bit。 ACK=1: 表示确认,且确认号有效;当ACK=0时,确认号字段无效。

      8. 【推送字段PSH】- 1bit 当PSH=1时,则报文段会被尽快地交付给目的方,不会对这样的报文段使用缓存策略。

      9. 【复位字段RST】- 1bit RST=1 :表明TCP连接中出现了严重的差错,必须释放连接,然后再重新建立连接。

      10. 【同步字段SYN】- 1bit。 当SYN=1时,表示发起一个连接请求。

      11. 【终止字段FIN】- 1bit。 用来释放连接。当FIN=1时,表明此报文段的数据已发送完成,并要求释放连接。

      12. 【窗口字段】- 16bit 此字段用来控制对方发送的数据量,单位为字节。 一般TCP连接的其中一端会根据自身的缓存空间大小来确定自己的接收窗口大小,然后告知另一端以确定另一端的发送窗口大小。

      13. 【校验和字段】- 16bit 这个校验和是针对首部和数据两部分的。

      14. 【紧急指针字段】- 16bit 紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。

TCP & UDP

  • TCP ( Transmission Control Protocol ) 可靠性高
  • UDP ( User Datagram Protocol ) 可靠性低 & 传输快

TCP / IP 重要特点:  与低层的数据链路层和物理层无关.

TCP: Transmission Control Protocol传输控制协议

*事先为所发送的数据开辟出连接好的通道,然后再进行数据发送;

提供: 数据流传送、可靠性、有效流控、全双工操作和多路复用。

TCP支持的协议主要 有: Telnet、FTP、SMTP等 

UDP:

*不提供 可靠性、流控、 差错恢复功能。是一种无连接的传输层协议

UDP支持协议主要有:

  • NFS 网络文件系统
    • SNMP 简单网络管理协议
    • DNS 主域名称系统
    • TFTP 通用文件传输协议

## TCP 三次握手

**三次握手 : Three-way handshake 一个虚拟的链接的建立 是通过三次握手 来实现的

SYN: 握手信号 Synchronous *ACK: 确认标志

SYN/ACK 包: 确认包 仅仅是 SYN 和 ACK 标记为1 的 TCP 包

 第一次握手:  

  1. 客户端 发一个 SYN=1 ACK=0 的TCP包 表示: 请求进行连接.

    只是请求/试探/询问是否可以连接服务器,服务器同意连的话 还是要客户端再确认一次(也就是第三次握手)才正式连接.

 第二次握手:  

  1. 服务器收到请求并允许进行连接的话

    发一个 SYN=1 ACK=1 的 TCP 包给客户端
    表示: 可以连接了 并 要求客户端返回一个确认数据包 确认进行连接 (有可能 客户端只是问问能不能链接)

 第三次握手:  

  1. 客户端 发一个SYN=0,ACK=1的数据包给服务器,告诉服务器我确实要建立连接 而不是耍你… 正式连接成功

    连接成功以后: TCP 的每个包 都会设置 ACK 位 这就是连接跟踪 很重要的原因了
    没有跟踪的话防火墙无法判断 收到的 ACK 包是不是属于一个已经建立的链接.

    在客户机和服务器之间建立正常的TCP网络连接时, 首先 客户端发出一个包含SYN标志的数据包 然后 服务器 返回 SYN+ACK的应答包 表示接收到了这个消息, 最后 客户机再返回一个ACK确认包响应。 这样在客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和服务器之间传递。 当服务器发送应答包后 没收到确认包 服务器就会进入等待直到超时 等待期间 这些半链接的客户端都保存在一个有限的缓存列表中 如果有大量的 syn 包发给服务器 而且又不回应服务器的话 会造成 tcp 资源迅速耗尽 直到服务器系统崩溃

    wireshark TCP 握手 实测: 显示过滤里 设置 tcp.stream eq 5
    然后打开一个网站 wireshark 里就能 看到3个 数据了 这就是三次握手包

OSI & Port

开放式系统互联通信参考模型 Open System Interconnection Reference Model

计算机在世界范围内互连为网络的标准框架。

OSI 七层网络体系结构:

第7层 应用层- - - 提供通信端口  HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3
第6层 表示层- - - 类似快递打包. 数据压缩、解压 / 加密、解密
第5层 会话层- - - 数据叫报文! 解除或建立与别的电脑的联系 / 服务器验证用户登录
第4层 传输层- - - 数据叫数据包! 负责获取全部信息 TCP,UDP
第3层 网络层 - - -地址解析和路由.选择合适的路由,确保信息到达. IP
第2层 数据链路层- -网卡
第1层 物理层 - - -中继器/集线器/双绞线
7层: 应用层(Application Layer)
  • 为操作系统/网络程序 提供访问网络服务的端口。

    一台电脑有很多端口 要指定端口才能通信. 例如: HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等。

6层: 表示层(Presentation Layer)

将数据从抽象语法(文类文字),转为适合于OSI系统内部使用的适合传送的格式.

数据的压缩和解压缩, 加密和解密等工作都由表示层负责。

5层: 会话层(Session Layer) 没有协议

在会话层及以上的高层次中,数据传送的单位不再另外命名,而是统称为报文。 会话层不参与具体的传输, 它提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制。 如服务器验证用户登录便是由会话层完成的。

负责在数据传输中设置和维护电脑网络中两台电脑之间的通信连接。

4层 传输层(Transport Layer)
  • 数据单元称作数据包(packets)。
  • 把传输表头(TH)加至数据以形成数据报。 传输表头包含了所使用的协议等发送信息。例如:传输控制协议义(TCP) 等

这个层必须跟踪数据单元碎片、乱序到达的 数据包和其它在传输过程中可能发生的危险。

  • 为第5层提供端到端(最终用户到最终用户)的透明的、可靠的数据传输服务。

    透明传输指:通信过程中 传输层对上层屏蔽了通信传输系统的具体细节。

3层: 网络层(Network Layer) 快递单

数据传输 - 经过很多路由器 - 选择合适的网间路由和交换结点,确保数据及时传送。

网络层将数据链路层提供的帧组成数据包,包中封装有网络层包头,其中含有逻辑地址信息- -源站点和目的站点地址的网络地址。

如果你在谈论一个IP地址,那么你是在处理第3层的问题,这是“数据包”问题.

IP是第3层问题的一部分,此外还有一些路由协议和地 址解析协议(ARP)。 有关路由的一切事情都在这第3层处理。地址解析和路由是3层的重要目的。 网络层还可以实现拥塞控制、网际互连等功能。 在这一层,数据的单位称为数据包(packet)。 网络层协议的代表包括:IP、IPX、RIP、OSPF等。

传输有地址的帧以及错误检测功能 SLIP,CSLIP,PPP,ARP,RARP,MTU 负责网络寻址、错误侦测和改错。当表头和表尾被加至数据包时,会形成了帧。 数据链表头(DLH)是包含了物理地址和错误侦测及改错的方法。 数据链表尾(DLT)是一串指示数据包末端的字符串。 例如以太网、无线局域网(Wi-Fi)和通用分组无线服务(GPRS)等。

1层 物理层(Physical Layer)

以二进制数据形式在物理媒体上传输数据 ISO2110,IEEE802,IEEE802.2 在局部局域网络上传送帧,它负责管理电脑通信设备和网络媒体之间的互通。 包括了针脚、电压、线缆规范、集线器、中继器、网卡、主机适配器等

Linux TCP/IP 概念层

应用层 → OSI 765 Linux 应用命令测试 传输层 → OSI 4 TCP,UDP 协议分析 四层交换机/四层路由器 网络层 → OSI 3 检查 IP 地址,路由器设置 路由器/三层交换机 数据链路层 → OSI 2 ARP 地址检测 网桥/二层交换机 网卡 物理层 → OSI 1 物理连接检测 中继器/集线器/双绞线

TCP/IP 详解 卷 1 : 协议

引言:

TCP/IP 协议 使得各种型号各种操作系统的电脑能互相通信. 这很神奇.

TCP、UDP 两种最著名的运输层协议,两者都使用 IP 作为网络层协议 !! 网络协议 通常分不同层次进行开发,每一层负责不同的功能.

TCP/IP 分四层 : 链路层、网络层、传输层 、应用层

网络层 : IP 提供点到点的服务 传输层 : TCP/UDP 端到端的服务

**链路层: ARP、RARP、硬件接口 *处理与电缆(网线)的物理接口细节. 也就是网卡驱动程序

ARP 地址解析协议 RARP 逆地址解析协议

*网络层: IP、ICMP、IGMP  处理网络中的活动

IP 网际协议 ICMP 互联网控制报文协议 IGMP 互联网组管理协议

*运输层: TCP、UDP  为两台主机上的应用程序 提供端到端的通信

TCP 传输控制协议 提供高可靠性的数据通信.

把应用程序交给他的数据 分成合适的小快 交给下面的网络层 确认接收到的分组 设置发送最后确认分组的超时时钟等 由于本身就是高可靠性 因此应用层可以忽略所有的这些细节

**UDP 用户数据报文协议

把数据报的分组 从一台主机 发送到另一台主机. 并不保证数据报能到达另一端. 任何必须的可靠性 必须由应用层来提供.

应用层: 用户进程 *处理特定的应用程序细节

Telnet 远程登录 FTP 文件传输 SMTP 简单邮件传送协议 SNMP 简单网络管理协议

应用层 一般是一个用户进程 下三层 一般在 系统内核中执行. 顶层与下 三层关键区别:
顶层( 应用层) 只关心 应用程序的细节. 不关系数据在网络中的传输 下三层 对应用程序一无所知 但是 要处理所有的通信细节.

FTP 是一种 应用层协议 以太网协议 在链路层上

TCP/IP 是好多协议的组合. TCP IP 只是其中的两种而已.

网络接口层 和应用层的目的很显然

网络接口层: 处理有关通信媒体的细节 : 以太网 令牌环网 等 应用层: 处理某个特定的应用程序.

互联网 internet 就是一组 通过相同协议 互联在一起的网络.

构造互联网 最简单的方法就是 把多个网络 通过路由器进行连接.

路由器: IP Router 为不同类型的 物理网络提供连接. 以太网 令牌环网 点对点的链接 和 FFDI 光纤分布式数据接口 等等

网络层 IP 提供的是一种不可靠的服务.

互联网的目的之一 就是 在应用程序中 隐藏所有的物理细节. 应用层 不能关心 也不关心 这台电脑是在 以太网上 或者 令牌环网上

应用层: 就是 用户进程

网桥: 链路层上对网络进行连接 路由器: 网络层上对网络进行连接

互联网地址: 互联网上的每个接口 都必须有一个唯一的 IP 地址. IP 地址长度 32 bit.

IP 地址有一定的结构. 并不单纯的是一串数字.

5类 IP结构 : A B C D E

不同的互联网结构 ( 区分方法 看 IP 的第一字段数字 ) 网络号分发 : 互联网络信息中心 主机号分发 : 系统管理员

A类 0 + 网络号 7 位 + 主机号 24 位 0.0.0.0 - 127.255.255.255 B类 10 + 网络号 14 位 + 主机号 16 位 128.0.0.0 - 191.255.255.255 C类 110 + 网络号 21 位 + 主机号 8 位 192.0.0.0 - 223.255.255.255 D类 1110 + 多播组号 28 位 224.0.0.0 - 239.255.255.255 E类 11110 + 留待后用 27 位 240.0.0.0 - 247.255.255.255

三类 IP 地址:

  • 单播地址 目的为 单个主机
    • 广播地址 目的为 给定网络上的所有主机
    • 多播地址 目的为 同一组内的所有主机

域名系统: 一个分布的数据库. 提供 IP地址 和 主机名 之间的映射信息. 任何应用程序 都能调用这个标准的函数库来寻 主机名和 IP 的对应关系.

封装:

应用程序 → TCP 层 叫:TCP 报文 → IP 层 叫: IP 数据包 → 网卡层: 叫帧 Frame

每经过一层 都会再这个数据增加一些首部信息( 有可能还会加尾部信息 ) 比如 TCP 首部 IP 首部 以太网首尾部.

帧的物理特性长度 必须在 46-1500 字节 之间.

数据在网线中参数的教育 叫分组 ( Packet )

由于 TCP UDP ICMP IGMP 都要向 IP 传送数据. 所以 IP 生成的首部 要加入某种标识 表明数据属于哪一层, 这个就叫 协议域 1 是 ICMP 2 是 IGMP 6 是 TCP 17 是 UDP

类似的 很多应用程序都能用 TCP 或 UDP 来传送数据. 运输层生成报文首部时候 也有一个应用程序的标识符.

分用: 主机收到一个以太网数据帧时 数据就开始从协议 由底向上升 同时去掉各种报文首部.

编程接口: 使用 TCP、IP 协议的应用程序 通常采用两种应用编程接口API : Socket 和 TLI 运输层接口 ( Transport Layer Interface )

链路层

链路层目的:

  • IP 模块: 发送和接受 IP 数据包.
  • ARP 模块: 发送和接受 ARP 应答
  • RARP 模块: 发送和接受 RARP 应答

环回接口: Loopback Interface *允许运行在同一主机上的 客户程序和服务器程序 通过 TCP/IP 进行通信

A类 网络 127 就是给环回接口预留的. 根据惯例: 大多数系统把 127.0.0.1 分配给这个接口. 并命名为 Localhost 一个传给环回接口的 IP 数据包不能在任何网络上出现.

IP: 网际协议

*IP 是 TCP/IP 协议中最核心的协议 . *所有的 TCP、UDP、ICMP、IGMP 数据 都以 IP 数据报格式传输

不可靠: 不能保证 IP 数据报能成功抵达目的地. 如: 路由器暂时用完了缓冲区, IP 有个最简单的处理算法: 丢弃该数据报.然后发送 ICMP 消息报给信源端.

IP 数据包结构 : 一个刻度表示1个二进制位(比特)。
普通 IP 首部长 20字节

  • 版本4位 :  表示协议版本号,即常说的IPv4 ;

  • 头长4位 : 数据包头部长度。

    它表示数据包头部包括多少个32位长整型,也就是多少个4字节的数据。无选项则为5(红色部分)。

  • 服务类型8位 :  每个位的意义如下:

    1. 过程字段: 3位, 取值:0(正常)- 7(网络控制) 数据包重要性,取值越大数据越重要.
      1. 延迟字段: 1位, 取值:0(正常)、1(期待低的延迟)
      2. 流量字段: 1位, 取值:0(正常)、1(期待高的流量)
      3. 可靠性字段: 1位, 取值:0(正常)、1(期待高的可靠性)
      4. 成本字段: 1位, 取值:0(正常)、1(期待最小成本)
      5. 保留字段: 1位,未使用
  • 包裹总长16位 :  当前数据包的总长度,单位是字节。当然最大只能是65535,及64KB。

  • 重组标识16位 :  发送主机赋予的标识,以便接收方进行分片重组。

  • 标志3位 : 

    1. 保留段位(2):1位,未使用
      1. 不分段位(1):1位,取值:0(允许数据报分段)、1(数据报不能分段)
      2. 更多段位(0):1位,取值:0(数据包后面没有包,该包为最后的包)、1(数据包后面有更多的包)
  • 段偏移量13位 : 与更多段位组合,帮助接收方组合分段的报文,以字节为单位。

  • 生存时间8位 :  ping命令看到的TTL(Time To Live) 就是这个,每经过一个路由器,该值就减一,到零丢弃。

  • 协议代码8位 :  使用该包裹的上层协议,如TCP=6,ICMP=1,UDP=17

  • 头检验和16位 : 是IPv4数据包头部的校验和。

  • 源始地址32位 :  我们常看到的IP是将每个字节用点(.)分开,如此而已。
  • 目的地址32位 : 同上。

  • 可选选项 :  主要给一些特殊的情况使用,往往安全路由会当作攻击而过滤掉.
  • 用户数据

最小的延迟 : Telnet 最大吞吐量 : FTP
最高可靠性 : SNMP 网络管理 和 路由选择协议
最小费用: 用户网络新闻

TTL Time-To-Live 生存时间: 设置了 数据包 可以经过的最多路由器数! 默认32/64 每经过一个路由器,值就减去1. 值为零时. 数据包被丢弃.并发送 ICMP 报文通知源主机

IP 路由选择

IP 层在内存中有个路由表.收到一个数据包 并进行发送时 它都要对该表搜索一次.

路由表

目的 IP 地址: 下一站/下一条 路由器的 ip 地址: 标志: 指明目的 ip 地址是网络地址 还是主机地址 . 为数据包的传输指定一个网络接口.

IP 路由选择是 逐跳进行的. IP 并不知道 到达任何目的的完整路径. (除了那些与主机直接相连的)

IP 路由功能:

搜索路由表 找到能与目的 ip 地址完全匹配的表 (网络号 主机号 都要匹配)

搜索路由表 找到能与目的的网络号相匹配的表 如果找到 就把报文发送给该表木自动的下一站路由器. 以太网上的所有主机都是通过这种表目进行寻径的

搜索路由表 寻找标为默认的表.

如果上面的步骤都没有成功 那么该数据包 就不能被传送..程序会报错.

完整主机地址匹配在网络号匹配之前执行. 当他们都失败后 才选择默认路由器.

子网寻址:

现在所有的主机都要求 支持子网编地 不能把 IP 看成 由 单纯的网络号+主机号组成 而是 把主机号再分成一个子网号和主机号!!! 原因是 AB 类地址 为主机号分配了太多的空间. 可容纳的主机数 2的24次-2 和 2的16次-2
全0 和全1 是无效的 所以要减2

事实上 一个网络中人们不会安排那么多主机.

如: B 类网络 16位网络号+ 16位主机号. 这16位主机号 下面可以再分子网 比如8位用于子网号码 8位用于主机号 那么 就允许有254个子网 每个子网可以有254台主机

大多数子网 都是 B类的.其实还能用 C 类地址 只是它可用的比特数比较少而已.

很少出现 A 类地址的子网例子是因为 A 类地址本身就少. 但是大多数 A 类地址都是惊喜子网划分的.

子网 对外部路由器来说 隐藏了内部网络组织的细节.

如: b 类地址下有 1000个子网. 你要知道子网号码 数据包才能准确的送到你的网络.

子网掩码: 除了 IP地址 主机还需要 有多少 bit 用途子网号 多少 bit 用于主机号

掩码 是一个32bit 的值. → 11111111111111111111111111111111 值为1的比特 留给网络号和子网号 值为0的比特 留给主机号

B类
16位网络号 + 8为子网号 + 8位主机号 → 1111111111111111+11111111+00000000 → 也就是255.255.255.0

16位网络号 + 10位子网号 + 6位主机号 → 1111111111111111 + 1111111111 + 000000 → 也就是255.255.255.192 给定 IP 地址 和 子网掩码后: 主机就能确定 IP 数据包的目的:

  1. 子网上的主机
  2. 本网络 其他子网中的主机
  3. 其他网络上的主机

如果知道本机的 IP 地址 那么就直达它是 ABC 的哪类. 可以从 IP 的第一段取值范围看.

也就知道网络号和子网号之间的分界线. 再根据子网掩码 就能知道 子网号与主机号之间的分界线

例子:

假设 本机 IP 地址 140.252.11.1 → 可以看出是 B 类地址 16位 网络号. 子网掩码: 255.255.255.0 →除去前面 两个 255 也就是16位网络号码 还剩下255.0 可以算出 255=2的8次-1 所以 子网号码是8位 主机号也有8位.

如果目的 IP 是 140.252.4.5 可以看出B 类别网络号是相同的 ( 140.255 )

但是子网号是不同的 ( 1和4 )

如果目的 IP 是 140.255.1.22 可以看出网络号 还是一样 ( 140.255 ) 子网号也是一样 但是主机号不同

如果目的 IP 是 192.43.235.6 一个 C 类别地址. 那么网络号是不同的 其他肯定不同.

国际在线 允许一个含有子网的网络 使用多个子网掩码.

ifconfig: 这个命令一般在引导时运行.

环回接口: Lo0 一个 A 类地址.

netstat: -i 打印出接口信息 -n 打印出 IP 地址 netstat -in 看每个网卡的 IP

ARP

ARP 为 IP地址到对应的硬件地址 提供动态映射.

RARP 被那些没有磁盘驱动器的系统使用. 如无盘工作站 需要系统管理员手工设置.

ARP广播: ARP发送一份称作 ARP请求的以太网数据帧给以太网上的每个主机。 ARP请求数据帧中包含目的主机的 IP地址(主机名为 bsdi), 其意思是“如果你是这个 IP地址的拥有者,请回答你的硬件地址。

目的主机 收到这个广播,发现是找自己的 (根据 IP 地址) 于是发送一个 ARP 应答. 这个应答包里面包含自己的IP+Mac 地址.

网络接口 有硬件地址: 48 bit TCP/IP 有IP 地址: 32 bit 要参数数据. 必须要知道 硬件地址才能. 只有 ip 地址是不行的. ARP 就是 给硬件地址 和 IP 地址 提供动态映射.

ARP 高速缓存:

ARP 高效运行的关键是: 每个主机上都有一个 ARP 高速缓存. 这个缓存 存放了 最近的 ip 地址 和 Mac 地址 的映射历史记录. 每项记录的生存时间一般是20分钟. 从映射被创建开始计时.

查看 本地 ARP 缓存: arp -a -a 是显示全部的意思

ARP 格式

前两个字段: 以太网的源地址 和 目的地址

目的地址 全是1 是特殊地址: 也就是广播地址. 电缆上 所有的网卡 都要接受广播的数据帧

帧类型: 2 字节.

op 操作字段: 时钟操作类型 ARP 请求 值为1 ARP 应答 值为2 RARP 请求 值为3 RARP 应答 值为4

对于 不存在主机的 ARP 请求: 比如 主机已经关机.

ARP 高速缓存超时: arp 一般都要设置超时. 管理员 可以用 arp 命令固定 arp 而不设置超时.

ARP 代理: arp 请求是从 一个网络发送到另一个网络的. 那么 连接这两个网络的路由器 就能回答双方的 arp 请求.

这个 就是 ARP 代理 : Proxy ARP 这个功能 可以欺骗 发送端 让它误以为路由器就是主机. 事实上 目的主机在路由器的另一端

arp -d 删除某项 arp 对应.

arp -s 增加arp内容

RARP: 逆地址解析协议

有硬盘的电脑 一般是从 硬盘上的配置文件中读取 IP 地址.

无盘机,或者 无盘工作组 需要别的办法来获取 IP

每个网卡都是有唯一的硬件地址的.由网卡厂商配置的. 大概就是 开机 取得 网卡的 mac 地址. 发送一个 RARP 请求 (局域网内广播) 请求别的主机 相应这个无盘系统的 IP 地址.

ICMP: internet 控制报文协议

icmp 覆盖范围很广
从 致命差错到 信息差错.

Ping 程序

名字起源于 声呐定位操作. 目的是为了测试另一台主机是否可达.

如果不能 ping 到某台主机 那么一般不能 Telnet 或者 ftp 进去 如果不能 telnet 某台电脑 一般可以用 ping 程序来确定问题出在哪.

PIng 还能 测试到一台主机的往返时间, 以表明主机离我们多远.

通常 第一个 ping 值的 往返时间比后面的值大 是因为目的主机的硬件地址 不在 arp 高速缓存里 所以慢. 因为 要发送和接受 arp 请求

ping 程序 为我们提供了 查看 IP 记录路由 的机会. ping -R 选项.

IP 时间戳

ping 程序是对两个 TCP/IP 系统的连通性进行测试的基本工具 只利用 ICMP 回显请求和回显应答报文. 而不用经过 传输层 (TCP/UDP)

Traceroute & TTL

发 UDP 数据报给服务器. 目的端口号是一个不可能的端口. 当数据报到达服务器. 目服务器的 UDP 模块 会产生一份 端口不可达的 ICMP 报文. 就表示到达目的主机. 结束路由追踪.

流程:

  1. 本机发送TTL=1 的 IP 数据报 给目的主机. 经过第一个路由器时. TTL=0 路由器丢弃该数据报, 并返回一个 ICMP 报文. 这报文里面有第一个路由器的地址.
    1. 本机发送TTL=2 的 IP 数据报 给目的主机. 经过第二个路由器时. TTL=0 路由器丢弃该数据报, 并返回一个 ICMP 报文. 这报文里面有第二个路由器的地址.
      1. 本机发送TTL=3 的 IP 数据报 给目的主机. 经过第三个路由器时. TTL=0 路由器丢弃该数据报, 并返回一个 ICMP 报文. 这报文里面有第三个路由器的地址.
      2. 本机发送TTL=4 的 IP 数据报 给目的主机. 经过第四个路由器时. TTL=0 路由器丢弃该数据报, 并返回一个 ICMP 报文. 这报文里面有第四个路由器的地址.
      3. ………
      4. 特殊端口号的 UDP 数据报到达服务器,返回 端口不可达的 ICMP 报文.
      5. 结束

      路由器 只会在 TTL=0 时 返回一个 ICMP 数据报. Traceroute 只需区分 接受到的ICMP 报文是超时还是端口不可达.以判断什么时候结束.

IP 数据报 从一台电脑到另一台电脑 所 经过的 路由.

traceroute 程序 不需要 路由器有任何的特殊功能.

ttl : 防止数据报在选路时无休止的在网络中流动.

路由收到 ttl =0 的数据报 会丢弃该数据报.然后给信源发一份 ICMP 超时的信息.

Traceroute 必须可以给 数据报 设置 TTL 字段. 这个需要 管理员权限.

每个 路由器 发送3份数据报. 每收到一份 ICMP 报文. 就显示出往返时间. 5秒内 没有收到3份中的任意一份响应. 就打个星号. 并发送下一份数据报.

往返时间: 是往返的总时间.

IP 选路

选路是 IP 最重要的功能之一.

路由表的维护: 路由表中的信息 决定 IP 层的所有决策.

IP 搜索 路由表 步骤:

  1. 搜索匹配的主机地址
  2. 搜索匹配的网络地址
  3. 搜索 默认表项 (一般 是路由表中 一个指定的网络表项 网络号=0 )

先匹配主机地址 在匹配网络地址 .

选路机制: 搜索路由表 并决定 向哪个网络接口发送分组. 选路策略: 只 决定把哪些路由放入路由表规则

IP: 执行选路机制 路由守护程序: 提供选路策略

简单路由表: 列出路由表: netstat -r

netstat -rn

用数字格式 打印出 IP 地址

Routing tables

Internet: Destination Gateway Flags Refs Use Netif Expire default 172.19.16.1 UGSc 138 157 en5 default 172.19.16.1 UGScI 9 0 en0 127 127.0.0.1 UCS 1 0 lo0 127.0.0.1 127.0.0.1 UH 102 5031509 lo0 169.254 link#5 UCS 2 0 en5 169.254 link#4 UCSI 3 0 en0 169.254.136.96 link#4 UHLSW 1 1 en0 169.254.229.64 link#4 UHLSW 1 5 en0 169.254.255.255 link#5 UHLSW 2 22 en5 172.19.16/24 link#5 UCS 74 0 en5 172.19.16/24 link#4 UCSI 53 0 en0 172.19.16.1/32 link#5 UCS 2 0 en5 172.19.16.1 0:2:85:a:75:40 UHLWIir 10 0 en0 1199 172.19.16.1/32 link#4 UCSI 2 0 en0 172.19.16.1 0:2:85:a:75:40 UHLWIir 140 234 en5 1168 172.19.16.14 0:50:56:9e:66:dd UHLWIi 2 8169 en5 1178 172.19.16.15 0:c:29:b5:d1:ee UHLWIi 2 24097 en5 1193 172.19.16.16 f4:ce:46:b1:19:6 UHLWIi 2 6232 en5 1192

说明: 倒数第三行

如果目的是 到172.19.16.14的 那么网关就把数据发给 .14的mac 地址.

Flags 标志: 对于一个给定的路由 可以有5种不同的标志

U 该路由 可用. **G 该路由 是到一个网关的. 没有这个标志 说明目的地是直接相连的. 重要标志: 区分了是间接路由 / 直接路由 .(直接连路由是没有G 标志的)

**H 有标志该路由 是到一个主机的.目的地址是一个完整的主机地址. 没标志:说明这个路由是到一个网络. 目的地址是一个网络地址: 一个网络号 或者网络号和子网号的组合. D 该路由 是由重定向报文创建的. M 该路由 已被重定向报文修改.

Refs: 参考计数 Reference count 列出 正在使用路由的活动进程个数

Use: 通过该路由发送的分组数: 如果我们是该用户的唯一用户,那么 运行 ping 发送5个分组后 值会变成5

最后一列: 本地接口的名字.

输出的

第二行: 环回接口 名字始终是 LoO 第三行: 默认路由 每个主机都有一个或多个 默认路由. 如果表中没有找到特定的路由 那么就发送到默认路由器.

初始化路由表

一般 用 ifconfig 默认设置接口地址时候 就自动创建一个直接路由.

对于点对点链路 或者 环回接口 路由是达到主机 对于广播接口 如 以太网 : 路由是达到网络

到达主机 或者网络的路由 如果不是直接相连的. 那么必须加入 路由表.

ICMP: 当路由 收到一份 IP 数据包 但又不能转发时. 就要发送一份 ICMP 主机不可达 的 差错报文.

转发 / 不转发:

动态选路协议:

相邻的路由器 之间 进行通信, 以告知对方 每个路由器当前所连接的网络.

路由器 之间 必须采用 选路协议进行通信. 选路协议有很多种. 路由器上有个进程: 路由守护程序 (Routing daemon) 运行选路协议.于相邻的路由器进行通信.

RIP: 选路信息协议

最广泛使用/也最容易受攻击的选路协议.

UDP: 用户数据报协议

进程的每个输出操作都正好 产生一个 UDP 数据包, 并组装成一份 待发送的 IP 数据包.

应用程序 必须关心 IP 数据包的长度. 如果超过 MTU 那么就要对 IP 数据包进行分片.

IP 分片

物理网络层 一般会限制 每次发送 数据帧的最大长度.

本机的 IP 层, 接收到一份 要发送的 IP 数据包时:

  1. 判断 向本地哪个接口发送数据. (选路)
    1. 查询 该接口获得其 MTU.
      1. IP 层: 要发送的数据包长度 和 MTU 进行比较. 有需要的话就进行分片.

        可以在原始发送端 或者 路由器上 进行 分片

数据分片后 只有达到目的地 才进行组装.

UDP ARP 的交互作用:

最大 UDP 数据报 长度

单播 广播 多播

广播 & 多播 仅适用于 UDP

单播: unicast 两个主机通信不会干扰其他主机.

广播: broadcast 主机向网上的所有其他主机 发送帧.

多播: multicast 给某个组 (组里有固定的成员) 发送数据 比如 给多人发送邮件.

网卡工作流程:

  1. 查看 由信道送过来的帧
  2. 是否接受该帧 如接受: 传送帧搭配设备驱动程序. 然后驱动程序 吧帧传给下一层. 比如帧类型是 IP 数据报 那么就传到 IP 层. IP 根据 IP 地址中的 源地址 和 目的地址,进行更多的过滤检测 如果正常 就传送给下一层 如: TCP UDP

    一般网卡 仅接受 帧的Mac地址是自己的帧 & 广播地址的帧.

*混合模式 / 混杂模式  接收每个帧的一个复制. Tcpdump 就使用这种模式.

受限的广播

255.255.255.255 主机 不知道自己网段的 网络掩码. 连自己 IP 都不知道. 这样的数据 只存在本地网络中

IGMP: internet 组管理协议.

DNS 域名系统:

域名系统( D N S)是一种用于 T C P / I P应用程序的分布式数据库,它提供主机名字和 I P地 址之间的转换及有关电子邮件的选路信息。

bootp 引导程序协议

SNMP 简单网络管理协议:

网络设备很多 比如: 路由器 打印机 等等 这些设备 都是运行 TCP/IP 协议的.

管理站 可以显示 所有被管设备的状态. 例如 是否掉线 各种流量等等

Telnet & Remote Login 远程登录.

Remote Login 是最广泛的应用之一.

TCP/IP 网络 两种应用 提供远程登录功能.

Telnet 协议

可以工作在任何主机. 任何操作系统 任何终端.

FTP 文件传送协议 (TCP 协议)

常见的应用程序. 文件传输的 Internet 标准.

文件传送. 文件存取区别: 文件传送: 由 FTP 应用提供 文件存取: NFS (Sun 的网络文件系统) 等应用提供

要使用 FTP 就要有登录服务器的注册账号密码 或者 通过允许匿名 FTP .

最早是为了 两台不同的主机 运行着不同的操作系统 不同的文件结构 或许还使用不同的字符集.

工作原理:

服务器: 以被动方式 打开众所周知的 用于 FTP 的端口 (21) 等待用户的连接.

客户端: 主动打开 TCP 21端口 ,与服务器建立连接. 由于该连接 是用于文件传输目的: 所以 IP 对数据连接的特点是 : 最大限度的提高吞吐量.

匿名 FTP

允许 任何人 注册并使用 FTP 来传输文件.

SMTP 简单邮件传送协议.

电子邮件 是最流行的应用程序 所有 TCP 连接中 大约一半是 用于 简单邮件传输协议的 SMTP

网络文件系统

NFS 网络文件系统

tcpdump

和 wireshark 差不多. 没有图形界面.