1. TCP/IP
1.1 ISO模型与TCP/IP模型介绍
图1 ISO、TCP/IP模型
从图7.1可看出,两模型的区别主要是在下两层和上三层,在实际使用中为了方便表示,会将TCP/IP的4层结构表示为图2的5层结构。
图2 TCP/IP 5层结构
1.2 网络层
- IPV4
报文格式:版本(4bit)、长度(4bit)、服务类型(1字节)、数据报总长度(2字节)、标识(2字节)、标志(3bit)、段偏移(15bit)、生存时间(1字节)、协议(1字节)、首部校验和(2字节)、源地址(4字节)、目标地址(4字节)、选项参数(3字节)、填充(1字节)、数据
图3 IPV4报文格式
- ARP
报文格式:
图4 ARP报文格式
以太网首部:源MAC地址和目的MAC地址和帧类型
帧类型:0x0806(表示ARP帧)
硬件类型:1表示以太网
协议类型:0x0800表示ip
硬件地址长度:6
协议地址长度:4
op:1表示位请求、2表示为应答、3表示为rarp(将物理地址映射到ip地址)请求,4表示rarp应答;
其通信方式:对未知MAC地址的目标,其ARP请求是广播出去的。
图5是其通信的一个示例,并对其进行了详细描述。
图5 pc通信
要求:对PC1到PC2的过程进行详细描述。
分析:两者需要ping通需要可以查到路由表、ARP和MAC表
假设此时刚启动计算机,并未做任何处理,且route两端的MAC地址分别为MAC1和MAC2。
① PC1 ping PC2,对源ip地址和目的ip地址进行封装;
② PC1查看路由表,得到10.0.1.254的地址,并未获得目标MAC地址,因而需要发送ARP;
③ PC1发送ARP请求报文;
④ Sw1接收时:tag VLAN10,并进行输入规则检查,对PC1的MAC表项进行学习;
⑤ SW1发送时:由于目标MAC地址为FFFF.FFFF.FFFF,泛洪出去。Trunk接口处判断出地址和trunk的native相同,因而需要untag,并进行输出规则检查;
⑥ 路由器判断出MAC表项内目标ip地址是自己,回应单播应答报文;
⑦ Sw1接收时:tag native10,并进行输入规则检查,对路由器的MAC表项进行学习;
⑧ SW2发送时:access untag,输出规则检查,并查找PC1的MAC表项发送应答报文;
⑨ PC1获得路由器MAC地址MAC1,并进行封装;
( ①——⑨完成了PC1到route的MAC地址的查询)
⑩ PC1发送 ICMP报文,此时源IP地址为PC1,目标IP地址为PC2,源MAC地址为PC1的,目标MAC地址为路由器的MAC1;
⑪ Sw1接收时:tag VLAN10,并进行输入规则检查,对MAC地址进行更新,并查找路由器MAC地址MAC1;
⑫ SW1发送时:Trunk接口处 untag,并进行输出规则检查,将报文发送给路由器;
⑬ 路由器接收报文;
( ⑩——十三 完成了PC1到route的ICMP报文发送)
(十四 到 二十二 是重复上面 ①到十三 的过程)
⑭ 路由器继续进行报文发送,此时路由器ip是源ip地址,PC2的ip为目标ip,源MAC地址为路由器的MAC2,并不知道目标的MAC地址,因而需要发送ARP请求;
⑮ 路由器发送ARP请求报文;
⑯ Sw2接收:tag native20,输入规则检查,并对路由器的MAC表项进行学习;
⑰ Sw2发送:由于目标MAC地址为FFFF.FFFF.FFFF,泛洪出去。Access untag,输出规则检查。
⑱ PC2判断出MAC表项内的目标ip地址是自己,回应单播响应;
⑲ Sw2接收:tag VLAN20,输入规则检查,学习PC2的MAC地址;
⑳ Sw2发送:untag,输出规则检查,并查找路由器的MAC地址表项发送应答报文;
21 路由器获得PC2的MAC地址,进行封装;
22 路由器发送ICMP,sw2处进行MAC地址更新,查找PC2的MAC地址,并将报文发送给PC2,PC2接收报文
23 PC2接收到ICMP后,发送ICMP响应,并更新老化时间和生存时间等。
图6 连接仿真实验
- ICMP
由于IP协议并不能保证接收端收到数据包,因而是一种不可靠的传输。为此,提出了ICMP(Internet Control Message Protocol),它提供ip数据包传输过程中发生的错误、失败等信息,以及ip数据包处理情况的消息,提供网络诊断等功能。
Ping和tracert都是基于ICMP协议;
ICMP本身是网络层的协议,但是报文不是直接传送给链路层,而实封装成IP数据报,即前面需加上20字节的ip报文信息,然后传送给数据链路层。
图7 ICMP报文格式
ICMP消息分为ICMP差错消息和ICMP查询消息
差错报告:路由器在处理ip数据报时可能遇到的问题,终点不可达(3)、参数问题(12)、时间超时(11)、源点抑制(4)、改变路由(5);
查询报文:帮助主机或管理员从一个路由器得到特定信息,发现网络上路由情况。回送请求和应答(8或0)、时间戳请求和应答(13或14)、地址掩码请求和应答(17或18)、路由器询问和通告(10或9)。
1.3 传输层协议
TCP:面向连接的、可靠的、有序的、流量控制的数据传输协议。(ftp、SMTP、telnet、http)
1) 三次握手,保证了数据传输的可靠性;
2) 端口号:端口号标识了上层应用层协议和服务,实现了网络通道的多路复用;(端口号标识应用程序,ip+端口号唯一标识某台主机的某个应用程序,0-1023为常用的总所周知的)
3) 完整性校验:通过对协议和载荷数据计算校验和,保证了接收方能检测出传输过程中可能出现的错误;
4) 确认机制:确保数据可靠传输;
5) 序列号:实现数据重组丢失检测;
6) 窗口机制:控制发送端和接收端的数据流量
常见TCP端口号如表1所示:
表1 常见TCP端口号
协议 | 端口号 | 协议 | 端口号 | 协议 | 端口号 |
FTP | 21 | HTTP | 80 | SMTP | 25 |
FT-data | 20 | HTTPS | 443 | POP3 | 110 |
Telnet | 23 | SQL | 1433 | Tacacs+ | 49 |
SSH | 22 | Oracel | 1521 | DNS | 53 |
表2 TCP头格式
TCP建立连接:三次握手(其过程如图8所示)
图8 TCP的三次握手
第一次握手:发起方向被叫方发送连接请求。发送同步报文SYN=1,将该段的序列号seq置为x。(x是一个随机数)。
第二次握手:被叫方向发起方返回连接确认。发送同步确认报文SYN=1,ACK=1将该段的序列号seq置为y(是一个随机数)。并将ACK置为有效ACK=1,ack=x+1。
第三次握手:发起方向被叫方进行再次确认。发送确认报文ACK=1,将该段的序列号seq=x+1(上个同步信息中的ack值), ack=y+1(上个同步信息中seq+1)
TCP端口连接:四次挥手(如图9所示)
图9 TCP四次挥手
UDP:面向无连接的、不可靠的、无序的、流量不可控的通信协议
UDP封装:
图10 UDP封装
图11 UDP头格式
UDP被设计成一个有效的和最小的传输协议。它只包括用于转发数据报至合适应用(端口号)的足够信息,并且执行一定的错误检查。UDP使用尽力方式传送数据报。由于某种原因传输失败,数据报被丢弃并且不试图作重传。