TCP/IP是一组协议的代名词。TCP/IP协议簇分为四层,IP位于网络层,TCP位于传输层。 TCP/IP通信协议采用四层的结构,每一层呼叫它的下一层提供的网络来完成自己的需求。
- 应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP),文件传输协议(FTP),网络远程访问协议。
- 传输层:提供结点间数据传送服务。如传输控制协议TCP、用户数据报协议(UDP),TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传输数据,并确定数据已被送达并接收。
- 网络互联层:负责提供基本的数据封包传送功能,让每一块数据包都能达到目的主机(不检查是否被正确接收),如网际协议IP。
- 网络接口层:对实际的网络媒体的管理、定义如何使用实际网络来传送数据。
- 协议栈收到上层交付给自己的信息都要添加自己的信息
- 每一层都认为自己收到的是数据,不关心里面数据内容
二、OSI七层模型 OSI七层模型是逻辑上的定义,一个规范,OSI七层模型是一种框架性的设计方法,建立七层模型的主要目的是解决异种网络互联时遇到的兼容性问题,最重要的功能是帮助不同的类型主机实现数据传输。通过七个层次化结构模型使不同的网络之间实现可靠通讯。
三、TCP/IP协议栈与数据包封装 TCP/IP网络协议分为应用层、传输层、网络层和链路层。
- 应用层:Telnet,FTP,e-mail
- 传输层:TCP,UDP
- 网络层:IP,ICMP,IGMP
- 设备驱动程序及接口卡
传输层及其以下的机制由内核提供,应用层由用户进程提供,应用程序对通讯数据的含义进行解释,而传输层及以下处理通讯细节。将数据从一台计算机通过一定的路径发送到另一台计算机。应用层数据通过协议栈发到网络上,每层协议都要加上一个数据首部(header),称为封装。例:A主机到B主机:A经过A的协议栈,B收到数据后自底向上交付数据,交付时,每一层都把数据报分为两部分,①头部信息②有效载荷。每一层收到的数据报根据头部信息把有效载荷交付给谁。
- 每一层报头信息都有一个字段的信息,这个信息指示这个数据报下一个该交付给谁
不同的协议层对数据包都有不同的称谓。传输层叫段(segment),网络层叫数据报(datagram),链路层叫帧(frame)。数据封装成帧后发到传输介质上,到达目的主机后每层协议剥掉相应的首部,将最后应用数据交给应用程序处理。 当处于两个不同网络中的主机进行通信时,从一台计算机到另一台计算机传输过程中要经过一个或多个路由器。如图:
链路层下还有物理层,物理层是指电信号传递方式。比如现在以太网通用双绞线,同轴电缆、光钎等均属于物理层。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器是工作在物理层的网络设备。用于双绞线的连接和信号中继(将以衰减的信号再次放大使之传得更远)。 链路层有以太网、令牌环网等标准,链路层负责网卡设备驱动、帧同步(从网线上检测到什么信号算作新帧的开始)、冲突检测(若检测到冲突则自动重发)、数据差错校验等工作。交换机是工作在链路层的网络设备,可以在不同的链路网络之间转发数据帧(比如以太网与令牌环网之间)。交换机将进来的数据包拆掉链路层首部重新封装以后再转发。 链路层的IP协议是是构成Internet的基础。Internet上的主机通过IP地址来标识。Internet上有大量路由器负责根据IP地址来选择合适的路径来转发数据包。数据包从Internet上的源主机到目的主机往往要经过多个路由器。路由器是工作在网络层的网络设备,同时兼有交换机的功能,可以在不同的链路层接口之间转发数据包。因此路由器需要将进来的数据包拆掉网络层和链路层两层首部并重新封装。IP层不保证传输的可靠性,数据包在传输过程中可能丢失,可靠性可以在上层协议或应用程序中提供支持。 网络层负责的是点到点的传输(点指的是主机或路由器),而传输层可选择TCP或UDP协议。TCP是一种面向连接的、可靠的协议。TCP传递时双方需要建立连接,然后TCP协议保证数据收发的可靠性,若数据包丢失则自动重发,上层应用程序收到的总是可靠的数据流。 传输层的UDP是不可靠的协议,不面向连接,不保证传输到目的地,也不保证数据按顺序寄到目的地。使用UDP协议的应用程序需要自己完成丢包重发、消息排序等工作
主机收到数据包,经过的各层协议图解:
说明: 以太网驱动程序首先根据以太网首部中的“上层协议”字段确定数据帧的有效载荷(指去掉协议首部的实际传输的数据)是IP、ARP还是RARP协议的数据报,然后交给相应的协议处理。 若是IP数据报,IP协议再根据IP首部中的“上层协议”字段确定该数据的有效载荷是TCP、UDP、ICMP还是IGMP,然后交给相应的协议处理。 若是UDP或TCP,UDP或TCP再根据其首部“端口号”字段确定应该给哪个进程。注意:IP、ARP、RARP数据报均需要以太网驱动程序来封装成帧,但是从功能上将,ARP和RARP属于链路层,IP属于网络层。 ICMP、IGMP、TCP、UDP数据都需要IP协议来封装成数据报,但是功能上讲,ICMP、IGMP和IP同属于网络层,TCP和UDP属于传输层。*IP地址是标识网络中不同主机的地址,而端口号是标识同一台主机上不同进程的地址,IP地址+端口号就可以标识网络中唯一主机的唯一进程
四、以太网帧格式1.以太网帧格式
源地址和目的地址是指网卡的硬件地址(MAC地址),长度为48位,是在网卡出厂时固化的。 帧协议类字段有三种值:IP、ARP、RARP。帧末尾时CRC校验码。 以太网中数据长度规定最小46字节,最大1500字节,ARP和ARP数据包长度不够46字节,需要在后面补填充位。 最大1500是以太网最大传输单元(MTU:数据帧中有效载荷的最大长度,不包括帧首部长度),不同网络类型有不同的MTU。若数据包大于拨号链路的MTU,则需要对数据包进行分片。ifconfig用于显示或配置网络设备(网络接口卡)的命令
2.ARP数据报格式①基本概念 在网络通信时,源主机的应用程序知道目的主机的IP地址和端口号,但却不知道目的主机的硬件地址。而数据包首先被网卡接收,若收到的数据包的硬件地址和本机不符则直接丢弃。因此在通信前需获得目的主机的硬件地址。ARP协议(地址解析协议)就是起到通过目标地址的ip地址,查询目标设备的MAC,确保通信顺利。
②ARP请求与应答过程: 源主机发出ARP请求,询问IP地址是192.168.0.1的主机硬件地址是多少,并将这个请求广播到本地网段(以太网帧首部硬件地址填FF:FF:FF:FF:FF:FF表示广播),目的主机收到广播ARP请求,发现其中IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填在应答包中。arp-a 查看ARP缓存表,这个缓存表表项有过期时间,过期后自动失效,需要继续发请求获得硬件地址
③数据报格式
- 源MAC地址和目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层是以太网的情况是多于的,但是若链路层为其他类型的网络则可能是有必要的
- 硬件类型只的是链路层类型:1为以太网
- 协议类型指要转换的地址类型,0x0800表示IP地址
- OP为1表示ARP请求,为2表示应答
五、IP数据报1.IP数据报格式(IPV4)
IP数据报的首部长度和数据长度都是可变的,但总是4字节的整数倍 对IPV4,4位版本字段是4.4位首部长度的数值是以4位单位的,最小值为5,即首部长度最小是4*5=20字节。首部的最大长度是60字节。 8位服务类型字段有3个位用来指定IP数据报的优先级,还有4个位表示可选的服务类型(最小延迟,最大吞吐量,最大可靠性,最小成本),还有一个位总是0 16位总长度是整个数据报(包括IP首部和IP层有效负载)的字节数。 每传一个IP数据报,16位标识加1,用于分片和重新组装数据报。 3位标志和13位片移用于分片 生存时间是指源主机为数据包设定的丢弃时间,时间单位为跳(hop),每过一个路由器把该值减1,当减到0标识路由过长仍找不到目的主机网络,丢弃该包。 协议字段标识上层协议是TCP、UDP、ICMP还是IGMP。 IPv4的IP地址长度为32位。2.IP地址 IPv的IP地址长度为4字节,通常采用点分十进制表示法。Internet被各种路由器和网关设备风格成许多网段,为了标识不同网段,需要把32位的IP地址划分为网络号+主机号。网络号相同的各主机位于同一网段,相互间可以直接通信,网络号不同的主机之间通信需要路由器转发。IP地址=主机号+网络号
- A类:0.0.0.0~127.255.255.255
- B类:128.0.0.0~191.255.255.255 网络地址数量为65536
- C类:192.0.0.0~223.255.255.255 网络地址数据为256
- D类:224.0.0.0~239.255.255.255 用作多播地址
- E类:240.0.0.0~247.255.255.255 保留