tcp/ip复习

五层模型

  • 应用层 telnet ftp e-mail等(包括应用层,表示层,会话层)
  • 传输层 tcp udp (提供端到端的服务)
  • 网络层 ip icmp igmp (提供点到点的服务)
  • 链路层 设备驱动程序及接口卡(网络接口会发送和接收ip arp rarp数据)
  • 物理层 物理网络

七层模型

又称为OSI参考模型,由ISO制定的标准体系

  • 应用层 为应用提供服务
  • 表示层 数据格式转化,数据加密
  • 会话层 建立,管理和维护会话
  • 传输层 建立,管理和维护端到端的连接
  • 网络层 ip选址及路由选择
  • 数据链路层 提供介质访问和链路管理
  • 物理层 物理层

tcp/ip协议族所在层级

  • 应用层
  • 传输层
  • 网络层
  • 链路层

互联网地址

  • ip地址长32bit
  • 网络地址主机号位全为0
  • 点10分进制表示就是0.0.0.0-255.255.255.255
  • 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

封装过程

是一个自上而下,对数据进行分片,加装收不信息的过程(有时还具有尾部信息)

  • tcp传给ip的数据单元称作tcp报文段(tcp segment)
  • ip传给网络接口层的数据单元称作ip数据包(ip datagram)
  • 通过以太网传输的比特流称作帧(frame)
  • udp传给ip的信息单元称作UDP数据报(udp datagram)

链路层

链路层的目的

  • 为IP模块发送和接收IP数据报
  • 为ARP模块发送ARP请求和接收ARP应答
  • 为RARP发送RARP请求和应答

其余略

ip协议

  • 称之为网际协议
  • 是TCP/IP协议族中最为核心的协议
  • 不可靠, 它并不能保证IP数据报能成功到达目的地
  • 无连接, IP并不维护任何关于后续数据报的状态信息,每个数据报的处理都是相互独立的

IP数据报格式

  • 4位版本号,4位首部长度,8位服务类型(tos),16位总长度(字节数,指整个IP数据报的长度,以字节为单位,所以ip数据报最长可达到65535字节)

  • 16位标识,3位标志,13位片位移

  • 8位生存时间(TTL),8位协议,16位首部检验和

  • 32位源ip地址

  • 32位目的地址

  • 选项数据(如果有)

  • 数据

  • ttl(time-to-live)设置了数据报可以经过的最多路由器数,TTL的初始值为32或64,一旦经过一个路由器-1,当值为0时,ip数据报被丢弃,并发送ICMP报文通知源主机

  • 首部检验和,用于检验IP首部(20字节),求法(对首部每16bit进行二进制反码求和)

  • ICMP,IGMP,UDP,TCP使用相同检验和算法

  • 由于路由器经常只修改TTL字段(减1),因此当路由器转发一份报文时可以增加它的检验和,不需要对IP整个首部进行重新计算.

ip路由选择

  • ip层在内存中有一个路由表,当收到一份数据报并进行发送时,他都要对该表搜索一次。
  • 收到从链路层来的数据报时,ip先检查目的ip地址,如果为本机,按照协议字段送给相应上层协议处理之
  • 如果目的不是广播地址或者本机ip地址,
    • 如果IP层被设置为路由功能,转发之
    • 否则直接丢弃,不做任何处理
  • 路由表每项所包含信息
    • 目的IP地址(可以是网络地址也可以是完整的网络地址)
    • 下一站路由器的ip地址
    • 标志,其中之一表示ip地址是网络地址还是主机地址,另一个表示下一站路由器是否为真正的下一站路由器还是直接相连的接口
    • 为数据报的传输指定一个网络接口
  • ip并不知道目的的完整路径,需要通过路由表转发出去
  • 如果路由表里没有默认路由或者没有相匹配的主机号和网络号,就到不了了,会为发送数据报的应用程序返回一个不可到达的错误

子网地址

  • a类b类c类地址支持子网编址主机号可以拆分成子网号和主机号
  • 大多数是b类
  • c类太少,是因为可用比特数少
  • a类少是因为a类地址本身就少
  • 与c类相比,使用b类地址编址子网可以缩减因特网路由表规模
  • 子网对于子网内部的路由器是不透明的

子网掩码

  • 用于指示子网结构
  • 32位的值
  • 1占位表示网络号和子网号所占的位数

特殊ip地址

  • 网络号比特位全为零,主机号全为零的地址(128.x.x.0)—网络上的主机
  • 网络号为0的地址(例128.x.x.x)—网络上的特定主机
  • 网络号为127的IP地址(例127.0.0.1)—环回地址(localhost,如果有数据报时这个出口,会把数据报返还给用户)
  • 网络号全为1主机号全为1(例255.255.255.255)—受限的广播(永远不被转发)
  • 网络号不全为0主机号全为1的地址(例x.255.255.255)—以网络为目的的向该网络广播
  • 网络号不全为0子网号不全为0,主机号全为1的地址(例129.129.255.255)–以子网为目的的向该网络,子网广播
  • 网络号不全为0,子网号全为1主机号全为1的地址(例129.255.255.255)—以所有子网为目的的网络广播

arp

  • 称为地址解析协议
  • rarp称为逆地址解析协议
  • RARP是被那些没有磁盘驱动器的系统使用(一般是无盘工作站或X终端)
  • arp功能是从逻辑Internet地址到对应的物理硬件地址需要进行翻译
  • 它本来是用于广播网络的
  • 在链路层出口,必须有48bit以太网地址才能找到对应硬件接口(硬件接口,标识不同的以太网或令牌环网络接口)
  • A R P 的功能是 在 32 bit 的 I P 地 址 和 采 用 不 同 网 络 技 术 的 硬 件 地 址 之 间 提 供 动 态 映 射
  • arp发送arp请求给以太网上的每个主机,这个过程称之为广播
  • 目的主机收到arp请求后会发送一份arp应答
  • 收到arp应答后ip数据报就可以传输了
    • 下一步发送ip数据报到目的主机
  • 当应答完成,arp存在一份缓存,这个缓存存放了最近的英特网地址到硬件的映射关系
  • 缓存每一项的生存时间是20分钟

rarp

  • 逆地址解析协议
  • 用于无磁盘系统在引导时用来获取IP地址的
  • 分组格式基本与ARP一致
  • 请求方式是广播
  • 应答通常是单播

icmp

  • internet控制报文协议
  • 他传递差错报文以及其他需要注意的信息
  • 通常被IP层或更高层协议(TCP或UDP)使用
  • 一些报文也会把差错报文直接返回给用户进程
  • ICMP报文是在IP数据报内部传输的

结构

  • 20字节IP首部
  • ICMP报文
    • 8位类型
    • 8位代码
    • 16位检验和
    • 下面是不同类型代码所需处理的不同内容
      • 例如地址掩码请求报文
        • 类型17
        • 代码0
        • 检验和 16位
        • 标识符 16位
        • 序列号 16位
        • 32位子网掩码
  • 按照类型代码可以知道报文所描述的内容
    • 下面第一位是类型,第二位是代码
    • 例如 0 0 为回显应答ping应答 (查询报文)
    • 3 (0-15) 为目的不可达 (均属于差错报文)
    • 4 0 源端被关闭 (差错报文)
    • 5 (0-3)重定向 (差错报文)
    • 8 0 请求回显 ping请求 (查询报文)
    • 9 0 | 10 0 路由器通告和路由器请求 (查询报文)
    • 11 (0|1) 超时 (差错报文)
    • 12 (0|1) 报文参数出错 (差错报文)
    • (13 | 14) 0 时间戳请求与应答 (查询报文)
    • (15 | 16) 0 作废,信息请求和信息应答
    • (17 | 18) 0 地址掩码请求与应答(查询报文)

ping程序

  • 其实就是发送icmp回显报文
  • 服务是直接内核支持的
  • ICMP报文中的标识符字段在Unix系统中被者之称了发送进程的ID
    • 所以开多个ping你可以正确识别返回信息
  • 序列号从0开始,每发送一次新的回显请求就+1
  • 请回想一下你用ping时打赢出来的内容
  • 发送第一个ping包其实耗时会多一些,(在arp缓存为空的情况下会发一个arp请求并接受应答)
  • 查看路由请加-R,用于记路由,mac请用traceroute,windows请用trace命令

UDP

  • 用户数据报协议
  • 位于运输层
  • 不具有可靠性,(只包裹后发给IP层,不保证到达)
  • 格式
    • ip首部
      • UDP首部
        • 16位源端口号,16位目的端口号
        • 16位UDP报文长度,16位UDP检验和
      • UDP数据(如果有)
  • 端口号表示发送进程和接收进程
  • TCP端口号和UDP端口号相互独立
  • UDP检验和(16bit字的二进制反码和)与IP检验和不同,其包涵了UDP数据报数据的检验,IP只包涵了首部检验
  • UDP和TCP都包涵了12字节的伪首部,用于计算检验和而设置的
    • 伪首部包含IP首部一些字段。其目的是让UDP两次检查数据是否已经正确到达目的地(例如,IP没有接受地址不是本主机的数据报,以及IP没有把应传给另一高层的数据报传给UDP)
      • 32位源IP地址
      • 32位目的IP地址
      • 00000000
      • 8位协议(UDP值是17)
      • 16位UDP长度(单位是字节,UDP如果不够算到1字节,末尾需填充0)
  • UDP检验和可选,但是如果没有计算检验和,UDP数据会被悄悄丢弃,因为发送端认为检验有差错(ip的处理也一致)
  • UDP最大长度是65507字节
  • 广播和多播仅用于UDP

广播和多播

  • 受限广播255.255.255.255
  • 指向网络的广播 a类 netid.255.255.255
  • 指向所有子网的广播 例: 子网掩码255.255.255.0 IP地址1 2 8 . 1 . 2 5 5 . 2 5 5
  • 多播使用d类ip2 2 4 . 0 . 0 . 0 到 2 3 9 . 2 5 5 . 2 5 5 . 2 5 5(成员是永久不变的)

tcp

  • 传输控制协议
  • 是全双工的协议
  • 可靠
    • 应用数据被TCP分割成最适合发送的数据库
    • 发出一个段后,启动定时器
    • 当收到发自另一端的数据,tcp将会发送一个确认
    • TCP将保持它首部和数据的检验和,这是一个端到端的检验和,如果检验和有差错,将希望发端超时并重发
    • ip数据报可能失序,所以tcp报文段到达也是失序,但tcp可以根据首部字段排序
    • tcp提供流量控制(滑窗机制,流量窗口)
  • 首部
    • 一般是20字节(不计入任选字段)
    • 16位源端口号,16位目的端口号
    • 32位序号 syn, 发一个+1个,发到头又从0开始
    • 32位确认序号,与ack相关,为1时确认
    • 4位首部长度(8字节计算算1长度,tcp最多有60字节首部长度)
    • 6位标志(保留的)
    • 16位窗口大小(表明滑动窗口的大小)
    • 16位检验和(tcp首部和tcp数据)
    • 16位紧急指针

tcp建立连接

三次握手

  • 1.请求端发送一个SYN段(报文段1,带有tcp分组序号和数据字节数)指明客户打算连接服务器的端口,以及初始序号ISN
  • 2.服务器发回包涵服务器的初始序号的SYN报文段(2)作为应答。同时,将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认。一个SYN将占用一个序号。(此处为ack将syn + 1表示确认序号)
  • 3.客户必须将确认序号设置为服务器的ISN加1,对服务器的SYN报文段进行确认(报文段3)

tcp关闭连接

四次握手

  • 请求端发送FIN报文
  • 服务器返回FIN的ack
  • 服务器再发送一个FIN报文
  • 请求端发送FIN的ack
  • 两端关闭
“我,鸡哥,打钱!”