TCP/IP学习笔记(1)

1.概述

TCP/IP协议族是一个四层协议系统,自底而上分别是数据链路层、网络层、传输层、应用层.如下图:
TCP/IP学习笔记(1)_第1张图片

数据链路层

  • 数据链路层实现了网卡接口的网络驱动程序.
  • 网络层通过IP地址寻找一台主机,而数据链路层通过物理地址寻找一台机器.
  • ARP协议主要把IP地址转换为其物理地址.
  • RARP协议仅用于网络上某些无盘工作站,因为缺乏存储设备,无盘工作站无法记住自己的IP地址,但他们可以利用网卡上的物理地址来向网络管理者(服务器或网络管理软件)查询自身的IP地址,运行RARP服务的网络管理者通常存有该网络上所有机器的物理地址IP地址的映射.

网络层

网络层实现数据包的选路和转发.WAN(广域网)通常使用众多分级的路由器来连接分散的主机或LAN(局域网),因此,通信的两台主机一般不是直接相连的,而是通过多个中间节点(路由器)连接的,网络层的任务就是选择这些节点,以确定两台主机之间的通信,同时,网络层对上层协议隐藏了网络拓扑连接的细节,使得在传输层和网络应用程序看来,通信的双方是直接相连的.
网络层最核心的协议是IP协议。IP协议根据数据包的目的IP地址来决定如何投递它,如果数据包不能直接发送给目标主机,那么IP协议就为它寻找一个合适的下一跳路由器,并将数据包交付给该路由器来转发.
IP协议使用逐跳的方式确信通信路径。
网络层另外一个重要的协议是ICMP协议(因特网控制报文协议),他是IP协议的重要补充,主要用于检测网络连接,ICMP协议使用的报文格式. 如图1:
TCP/IP学习笔记(1)_第2张图片
8位类型字段用于区分报文类型,它将ICMP报文分为两大类:一类是差错报文,这类报文主要用来回应网络错误,目标不可到达(类型值为3)和重定向(类型值为5);另一类是查询报文,这类报文用来查询网络信息,比如ping程序就是使用ICMP报文查看目标是否可到达(类型值为8).

传输层

传输层协议主要有三个:TCP,UDP,SCTP。
TCP 为应用层提供可靠的,面向连接的和基于流的服务.TCP 协议使用超时重传,数据确认等方式来确保数据被正确的发送到迷的端。 基于流的数据没有边界(长度)限制.
UDP协议为应用层提供不可靠的,无连接的,基于数据报的服务.每个UDP数据报都有一个长度,接收端必须以该长度的最小单位将其所有内容一次性一次性读出.

应用层

TCP报文段:TCP的头部信息和内核缓冲区.
IP数据报:包括头部信息和数据部分,数据部分是一个TCP报文段,UDP数据报或者ICMP报文.
经过数据链路层封装的数据称为帧,传输媒介不同,帧的类型不同. (以太网帧,令牌环帧);
TCP/IP学习笔记(1)_第3张图片

                                                                             帧才是最终在物理地址上传送的字节序列。   

帧才是最终在物理地址上传送的字节序列。
IP协议、ARP和RARP协议都使用帧传输数据.所以帧的头部需要提供某个子段来区分它们,以一台网帧为例,它使用2字节的类型字段来标识上层协议,
如果类型字段为0x800,则帧的数据部分为IP数据报,
如果类型字段为0x806,则帧的数据为ARP请求或应答报文.
如果类型字段值为0x835,则帧的数据部分为RARP.

ARP协议工作原理

IP地址到以太网地址(M AC地址)的转换,其工作原理是:主机向自己所在的网络广播一个ARP请求,该请求包含目标机器的网络地址,此网络上的其它机器都将收到这个请求,但只有被请求的目标机器会回应一个ARP应答,其中包含自己的物理地址.

ARP告诉缓存的查看和修改

删除对应的ARP缓存项。
sudo arp-a 192.168. 20.170
添加对应的ARP缓存项.
sudo arp -a 192.168.1.109 08:00:27:53:10:67
sudo tcpdump - i eth0 -ent ‘(dst(目的地址) 192.168.1.109 and src(源地址) 192.168.1.108)’

DNS工作原理

DNS是一套分布式的域名服务系统,每个DNS服务器上都存放着大量的机器名和IP地址的映射,并且是动态的.
linux 下用host命令访问DNS服务器。
IP协议是TCP/IP协议族的动力,它为上层协议提供无状态、无连接、不可靠服务.
无状态服务的优点:简单、高效,我们无须为保持通信的状态而分配一些内核资源,也无须每次传输数据的时候携带状态信息,在网络协议中,无状态是很常见的,比如UDP协议和HTTP协议都是无状态协议,以HTTP协议为例,一个浏览器的连续两次请求之间没有任何关联,它将被web服务器独立的处理.

使用IP服务的上层协议(比如TCP协议)需要自己实现数据确认、超时重传等机制以到达可靠传输的目的.

IPv4头部结构

TCP/IP学习笔记(1)_第4张图片
* 4位版本号指定IP协议的版本号,IPV4为4.
* 4位头部长度表示该IP头部有多少个32bit节。4位最大60字节.
* 8位服务类型:3位的优先权字段,4位TOS字段分别表示:最小延时,最大吞吐量,最高可靠性和最小费用(其中最多有一个被置为1).1位的保留字段(必须置为0) ;
* 16位总长度是指整个IP数据报的长度,最大为66535.
* 16位标识唯一标识了一个IP数据报,初始值随机生成,每发送一个加1.该值在分片时也被复制到每个分片中,同一个数据报的所有分片都有相同的标识值.
* 3位标志第一个字段保留,第二个表示“禁止分片”,第三位表示更多分片.
* 13位分片偏移分片是相对原始IP数据报开始处(仅指数据部分)的偏移,实际偏移值是该值的8位,
* 8位生存时间(TTL)是数据报到达目的地之前允许经过的路由器跳数.TTL值被发送端设置(一般为64),每经过一个路由,该值被减一.
* 8位协议被用来区分上层协议,/etc/protocols文件中定义了上层协议对应的protocols值,ICMP是1,TCP是6。UDP是17。
* 16位的校验和由发送端填充,劫手段对其使用CRC算法检验IP数据包头部.
* 32位的源端IP和目的端IP在传输过程中保持不变.
* 最后一个字段是可变长的可选信息.
IP分片
当IP数据报的长度超过帧的MTU时,它将被分片传输.分片可能发生在发送端,也可能发生在中转路由器上,而且可能在传输过程中被多次分片,但只有在最终的目标机器上,这些分片才会被内核中IP模块重新组装.
一个数据报的每个分片都具有自己的IP头部,它们具有相同的标识值,但具有不同的偏移量,并且除了最后一个分片外,其它分片都将被设置为MF(最大分片),每个分片的IP头部的总长度字段将被设置为该分片的长度.
以太网的MTU是1500。
用tcpdump查看IP分片机制.
1.在一个终端运行#tcpdump -ntv -i wanl(这个看你是连的无线还是有线) icmp //只抓取icmp报文.
2.在另一个终端运行$ping www.baidu.com -s 1473 //-s指定每次发送1473字节的数据.

IP (tos 0x0, ttl 64, id 57567, offset 0, flags [+], proto ICMP (1), length 1500)
    192.168.20.166 > 180.97.33.108: ICMP echo request, id 12425, seq 1, length 1480
IP (tos 0x0, ttl 64, id 57567, offset 1480, flags [none], proto ICMP (1), length 21)
    192.168.20.166 > 180.97.33.108: ip-proto-1

这两个IP分片的标识值都是57567,说明它们是同一个IP数据报的分片,第一个偏移量为0,第二个为1480,很明显,第二个分片的偏移量实际上是也是第一个分片的ICMP长度,第一个分片flag[+]表示设置MF代表还有分片.

IP路由

IP协议的一个核心任务是数据报的路由,即决定发送数据报到目的机器的路径,
如果IP模块发现这个数据不是发送给自己的,就调用数据报转发子模块处理该数据报. 数据报转发子模块将首先检测系统是否允许转发,如果不允许,就丢弃,如果允许,就对数据报做处理,将其交给IP数据报输出子模块.
IP模块实现数据报路由的核心数据结构就是路由表.
IP路由的选择分为3个步骤:
* 查找路由表中和数据报的目标IP地址完全匹配的主机IP地址,如果找到,它将匹配该路由项. 如果找不到,转到下一步.
* 查找路由表中和数据报的目标IP地址具有相同网络ID的网络IP地址,找到就使用该路由项,没找到则转到下一步.
* 选择默认路由项,这通常意味着数据报的下一跳路由是网关。

IP转发

路由器都能执行数据报的转发操作,而主机一般只发送数据和接收数据,这是因为主机上的/proc/sys/net/ipv4/ip_forward内核参数 被设置为0,可以改变参数使其能转发数据.
对于允许 IP数据报转发的系统(主机或路由器),数据报转发子模块将对期望转发的数据报执行以下操作:
* 检查数据报头部的TTL值,如果TTL值已经是0,则丢弃该数据报.
* 查看数据报头部的严格源路由选择选项,如果该选项被设置,则检测数据报的目的地址是否是本机的某个IP,如果不是,则发送一个ICMP源站选路失败报文给发端。
* 如果有必要,则给源端发送一个ICMP重定向报文,以告诉它的一个更合理的下一个路由.
* 将TTL减1;
* 处理IP头部选项.
* 如果有必要,则执行IP分片操作.

重定向

ICMP 重定向报文
TCP/IP学习笔记(1)_第5张图片

IPv6概述

IPv6的该进

  • 增加了多播和流的功能,为网络上的多媒体内容的质量提供精细的控制;
  • 引入自动配置功能,使得局域网管理更方便,增加了专门的网络安全功能。
  • IPv6协议并不是IPv4协议的简单扩展,而是完全独立的协议。

你可能感兴趣的:(TCP/IP,网络编程)