一 TCP/IP模型
1、主机到网络层
TCP/IP参考模型没有真正描述这一层的实现,只是要求能够提供给其上层-网络互连层一个访问接口,以便在其上传递IP分组。由于这一层次未被定义,所以其具体的实现方法将随着网络类型的不同而不同。本层主要为IP协议和ARP协议提供服务,发送和接收网络数据报。本层由于要实现跨网和跨设备的互通。有很多实现方式,如串行线路(SLIP),点对点PPP等。下面对以太网的实现方式简单介绍
2、网络互连层
网络互连层是整个TCP/IP协议栈的核心。它的功能是把数据包分组发往目标网络或主机。同时,为了尽快地发送分组,可能需要沿不同的路径同时进行分组传递。因此,分组到达的顺序和发送的顺序可能不同,这就需要上层必须对分组进行排序。
网络互连层定义了分组格式和协议,即IP协议(Internet Protocol)。
网络互连层的功能有路由,忘记互联,拥塞控制等
3、传输层
传输层的功能是使源端主机和目标端主机上的对等实体可以进行会话。在传输层定义了两种服务质量不同的协议。即:传输控制协议TCP(transmission control protocol)和用户数据报协议UDP(user datagram protocol)。
TCP协议是一个面向连接的、可靠的协议。它将一台主机发出的字节流无差错地发往互联网上的其他主机。在发送端,它负责把上层传送下来的字节流分成报文段并传递给下层。在接收端,它负责把收到的报文进行重组后递交给上层。TCP协议还要处理端到端的流量控制,以避免缓慢接收的接收方没有足够的缓冲区接收发送方发送的大量数据。
UDP协议是一个不可靠的、无连接协议,主要适用于不需要对报文进行排序和流量控制的场合。
4、应用层
TCP/IP模型将OSI参考模型中的会话层和表示层的功能合并到应用层实现。
应用层面向不同的网络应用引入了不同的应用层协议。其中,有基于TCP协议的,如文件传输协议FTP、虚拟终端协议TELNET、超文本链接协议HTTP,也有基于UDP协议的TFTP,网络管理协议SNMP,域名服务DNS,网络文件共享NFS,SAMBA等。
二 各层协议简介
以太网
1)源地址和目的地址是指网卡的硬件地址(MAC 地址),长度是48bit,是在网卡出厂时固化的。
2)注意网卡芯片(例如DM9000A)收到的数据就是如上所示的一长串数据;其中包括以太网帧头、IP报报头、传输层协议段头、应用层所需数据。
3)以太网帧中的数据长度规定最小46 字节,最大1500 字节,ARP 和RARP 数据包的长度不够46 字节,要在后面补填充位。最大值1500 称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU,如果一个数据包从以太网路由到拨号链路上,数据包度大于拨号链路的MTU了,则需要对数据包进行分片fragmentation)。ifconfig 命令的输出中也有“MTU:1500”。MTU 概念指数据帧中有效载荷的最大长度,不包括帧首部的长度。
4)CRC字段对帧内数据进行校验,保证数据传输的正确性,一般硬件实现
IP协议
IP协议为TCP,UDP,ICMP等协议提供传输的道路。IP层主要目的是提供子网互联,形成较大的网络,使不同的子网间能传输数据。
IP层主要作用:
数据传输:将数据从一个主机传输到另一个主机
寻址:根据子网划分和IP地址,发现正确的目的主机地址
路由选择:选择数据在互联网上的传输路径
数据报文的分段:当传输的数据大于MTU时,将数据进行分段发送和接收并组装
IP数据格式
(1)版本 占4位,指IP协议的版本。通信双方使用的IP协议版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)。IPv6为6,
(2)首部长度 占4位,可表示的最大十进制数值是15。请注意,这个字段所表示数的单位是32位字长(1个32位字长是4字节),因此,当IP的首部长度为1111时(即十进制的15),首部长度就达到60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此数据部分永远在4字节的整数倍开始,这样在实现IP协议时较为方便。首部长度限制为60字节的缺点是有时可能不够用。但这样做是希望用户尽量减少开销。最常用的首部长度就是20字节(即首部长度为0101),这时不使用任何选项。
(3)区分服务 占8位,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998年IETF把这个字段改名为区分服务DS(Differentiated Services)。只有在使用区分服务时,这个字段才起作用。
(4)总长度 总长度指首部和数据之和的长度,单位为字节。总长度字段为16位,因此数据报的最大长度为216-1=65535字节。
在IP层下面的每一种数据链路层都有自己的帧格式,其中包括帧格式中的数据字段的最大长度,这称为最大传送单元MTU(Maximum Transfer Unit)。当一个数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层的MTU值。
(5)标识(identification) 占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。
(6)标志(flag) 占3位,但目前只有2位有意义。
● 标志字段中的最低位记为MF(More Fragment)。MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个
● 标志字段中间的一位记为DF(Don’t Fragment),意思是“不能分片”。只有当DF=0时才允许分片。
(7)片偏移 占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,每个分片的长度一定是8字节(64位)的整数倍。
(8)生存时间 占8位,生存时间字段常用的的英文缩写是TTL(Time To Live),表明是数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在因特网中兜圈子,因而白白消耗网络资源。最初的设计是以秒作为TTL的单位。每经过一个路由器时,就把TTL减去数据报在路由器消耗掉的一段时间。若数据报在路由器消耗的时间小于1秒,就把TTL值减1。当TTL值为0时,就丢弃这个数据报。
(9)协议类型: 占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。
协议类型的含义:
值1 ICMP
值2 IGMP
值6 TCP
值17 UDP
(10)首部检验和 占16位。这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。
(11)源IP地址 占32位, 发送数据的主机或设备的IP地址。
(12)目的IP地址 占32位,接收数据的主机或设备的IP地址。
ARP地址解析协议
将计算机的网络地址(IP地址32位)转化为物理地址(MAC地址48位)
ARP数据格式
以太网目的地址:是硬件地址,包含六个字节的地址。例如: 00 1f 3cd1 b6 7d
以太网源地址: 是发出给ARP包的主机地址。格式与目的地址相同
以太帧类型: 用来表明上层协议的类型,如果是ARP协议的话就为:0806 。
硬件类型:如果是以太网则硬件类型为:0001 。
协议类型:这里一般写的是:0800 表示IP类型,ARP是IP协议族中的一个。
硬件地址长度:指的是MAC地址的长度,长度为6 单位是字节 。
协议地址产度:如果是IP4则这个值为4,单位是字节 。
Op为操作方式:如果为1则为请求包;如果为2则为回应包。
这里假设源主机为:A ,目的主机为:B 。其请求和回应这个都不变。
如果是请求包的话:
以太网首部的目的MAC地址为:FF:FF:FF:FF:FF:FF表示广播包。
ARP字段中的目的主机MAC地址字段为:00:00:00:00:00:00(十六进制表示) 起到填充的作用。
op操作符字段为:0001
如果是回应包的话:
以太网首部的目的MAC地址为:源主机的MAC地址。
ARP字段中的源主机MAC地址字段为:目的主机的MAC地址。
op操作符字段为:0002。
TCP协议
TCP特点:
1) 字节流的服务:使用tcp协议进行传输的应用程序之间传输的数据可视为无结构的字节流,基于字节流的服务没有字节序的困扰
2) 面向连接的服务:在数据进行传输之前,tcp协议需要先建立连接,之后的tcp报文在此连接的基础上传输
3) 可靠传输协议:基于校验和应答重复机制保证传输的可靠性,接收方对接收到的报文进行校验和计算,如果有误,不发送确认应答,发送方在超时后会自动重发报文
4) 缓存传输:缓存传输可以延迟传送应用层的数据,允许将应用程序需要传输的数据积攒到一定的数量集中发送
5) 全双工传输:个主机tcp协议以全双工方式进行数据流交换
6) 流量控制:tcp协议的滑动窗口机制,支持主机间的端到端的流量控制
TCP数据格式
TCP数据在iP报文中的位置
TCP数据包含头部和数据两部分,如下
源、目标端口号字段:占16比特。TCP协议通过使用"端口"来标识源端和目标端的应用进程。端口号可以使用0到65535之间的任何数字。在收到服务请求时,操作系统动态地为客户端的应用程序分配端口号。在服务器端,每种服务在"众所周知的端口"(Well-KnowPort)为用户提供服务。
序号字段:占32比特。用来标识从TCP源端向TCP目标端发送的数据字节流,当tcp开始连接的时候,发送一个序列号给接收端,连接成功后,这个序列号作为初始序列号ISN,建立连接成功后发送的第一个字节的序列号为ISN+1。
确认号字段:占32比特。只有ACK标志为1时,确认号字段才有效。它包含目标端所期望收到源端的下一个数据字节。发送方对发送的字节进行了编号,当接收方成功接收后,发送回接收成功的序列号加1表示确认,发送方再次发送的时候从确认号开始。
头部长度字段:占4比特。给出头部占32比特的数目。没有任何选项字段的TCP头部长度为20字节;最多可以有60字节的TCP头部。
标志位字段(U、A、P、R、S、F):占6比特。各标志的含义如下:
URG:紧急指针(urgent pointer)有效。
ACK:确认序号有效。
PSH:接收方应该尽快将这个报文段交给应用层。
RST:重建连接。
SYN:发起一个连接。
FIN:释放一个连接。
窗口大小字段:占16比特。此字段用来进行流量控制。单位为字节数,这个值是本机期望一次接收的字节数。
TCP校验和字段:占16比特。对整个TCP报文段,即TCP头部和TCP数据进行校验和计算,并由目标端进行验证。
紧急指针字段:占16比特。它是一个偏移量,和序号字段中的值相加表示紧急数据最后一个字节的序号。
选项字段:占32比特。可能包括"窗口扩大因子"、"时间戳"等选项。
UDP协议
UDP特点:
1)是无连接的。相比于TCP协议,UDP协议在传送数据前不需要建立连接,当然也就没有释放连接。
2)是尽最大努力交付的。也就是说UDP协议无法保证数据能够准确的交付到目的主机。也不需要对接收到的UDP报文进行确认。
3)是面向报文的。也就是说UDP协议将应用层传输下来的数据封装在一个UDP包中,不进行拆分或合并。因此,运输层在收到对方的UDP包后,会去掉首部后,将数据原封不动的交给应用进程。
4)没有拥塞控制。因此UDP协议的发送速率不送网络的拥塞度影响。
5)UDP支持一对一、一对多、多对一和多对多的交互通信。
6)UDP的头部占用较小,只占用8个字节。
UDP数据格式
UDP源端口和目标端口指定了2个16BIT的端口号。源端口号可选,如果指定了,则相应数据包发往该端口,如果没有指定,则设为0。
包长表示了整个UDP头部和UDP数据段的长度,单位为字节。由于UDP头部有8个字节,因此udp包长最小为8(数据可以为0)。UDP长度等于IP长度减去IP头部的长度
UDP校验和字段用以保证UDP数据包的完整性。该字段可选,没有计算校验和的UDP数据包应该将该字段设为0。(在可靠性很高的网络中,可以不计算校验和来减少主机的计算工作量