【TCP/IP】
TCP数据传输时,上层协议标识会添加在下层报文头部
#应用层端口号会添加在‘TCP/UDP’的报文头部中
#传输层协议号会添加在‘IP’的报文头部中
#网络层协议类型号会添加在‘以太网帧’的报文头部中
【HTTP 80/TCP】
可以理解为http的端口号是80,使用的是TCP上层协议
一、TCP和UDP协议
TCP/IP协议族的传输层主要有两个:
#TCP(Transmission Control Protocol,传输层控制协议)
#UDP(User Datagram Protocol,用户数据报协议)
(1)、TCP协议
ØTCP是面向连接的,可靠的进程到进程通信的协议
ØTCP提供全双工服务,即数据可在同一时间双向传输,每一个TCP都有发送缓存和接收缓存
《名词解释》
面向连接:就比如我去别人家,双方先打好电话,看对方在不在家,在过去
可靠的:可靠不一定安全
进程到进程的:就是程序与程序之间
1、TCP报文段
ØTCP将若干个字节构成一个分组,叫做报文段(Segment)
ØTCP报文段封装在IP数据报中
源端口号 | 目标端口号 | |||||||
32位序列号 | ||||||||
32位确认号 | ||||||||
4位 首部长度 | 保留 6位 | U R G | A C K | P S H | R S T | S Y N | F I N | 16位窗口大小 |
16位校验和 | 16位紧急指针 | |||||||
选项 | ||||||||
图:TCP报文段的首部格式
(首部长度为20~60字节)
Ø源端口号:它是16位字段,为发送方进程对应的端口号
Ø目标端口号:16位字段,对应的是接收端的时程,接收端收到数据段后,根据这个端口号来确定把数据送给哪个应用程序的进程
Ø序号:当TCP从进程接收数据字节时,就把它们存储在发送缓存中,并对每一个字节进行编号;
#编号不一定从0开始,一般会产生一个随机数作为第1个字节的编号,
称为初始序号(ISN)/0~-1
#TCP每一个方向的编号是互相独立的
#当字节都被编上号后,TCP就给每一个报文段指派一个序号,保证数据正确性
Ø确认号:确认号是对发送端的确认信息,用它来告诉发送端这个序号之前的数据段都已收到,比如确认号是X,就是表示前一个X-1个数据段都已经收到
Ø首部长度:用它可以确定首部数据结构的字节长度,一般情况下TCP首部是20字节,但首部长度最大可以扩展为60字节
Ø保留:这部分保留位作为今后扩展功能用,到现在还没有使用到
Ø控制位:这六位有很重要的作用,TCP的连接,传输和断开都是受这六个控制位的指挥
URG:紧急指针有效位
ACK:当ACK=1时,确认序列号字段才有效;ACK=0,确认号字段无效
PSH:标志位,PSH=1时要求接收方尽快将数据段发送到应用层
RST:复位位,RST=1时通知重新建立TCP连接
SYN:请求位(同步序号位),TCP需要建立连接时将这个值设为1
FIN:断开(发送端完成发送任务位),FIN=1时是TCP完成数据传输并断开连接
Ø窗口值:进行流量控制,窗口的大小就是缓存的大小
Ø校验和:判断数据包的完整性(用来做差错控制的)。它与IP的校验和不同,TCP检验和的计算包括TCP首部、数据和其他填充字节。在发送TCP数据段时,由发送端计算校验和,当到达目的地时,又进行一次校验和计算。若两次的校验和一致,则说明该数据基本是正确的,否则将认为该数据已被破坏,接收端将丢弃该数据
Ø紧急指针:和URG配合使用,当URG=1时才有效
Ø选项:在TCP首部可以有多达40字节的可选信息
2、TCP连接
ØTCP是面向连接的协议,它在源点和终点之间建立一条虚连接
Ø在数据通信之前,发送端与接收端要先建立连接。等数据发送结束后,双方在断开连接
ØTCP连接的每一方都是由一个IP地址和一个端口号组成的
【连接建立】→→→称为三次握手
a)第一次握手
#PC1使用一个随机的端口向PC2的80端口发送建立连接的请求
#SYN=1,其它五个控制位为0
b)第二次握手
#PC2收到PC1的请求,向PC1回复一个确认信息
#ACK=1,确认序列号是PC1的初始序列号加1
#PC2也向PC1发送建立连接的请求
#SYN=1
c)第三次握手
#PC1收到PC2的回复(包含请求和确认)
#同时,也向PC2回复一个确认信息
#ACK=1
#其他五个控制位为0
#确认序列号是PC2的初始序列号加1
A.服务器向客户端发送FIN和ACK位置1的TCP报文段
B.客户端各服务器返回ACK位置1的TCP报文段
C.客户端向服务器发送FIN和ACK位置1的TCP报文段
D.服务器向客户端返回ACK位置1的TCP报文段
(2)、UDP协议
ØUDP是一个无连接,不保证可靠性的传输协议;也就是说发端不关心发送的数据是否到达目标主机,数据是否出错等,收到数据的主机也不会告诉发送方否收到了数据,它的可靠性由上层协议来保障
ØUDP不可靠,一般由上层程序或人提供可靠性
源端口号 | 目的端口号 |
UDP长度 | 校验和 |
图:UDP首部的格式
Ø源端口号:用来标识数据发端的进程,和TCP协议的端口号类似
Ø目的端口号:用来标识数据接收端的进程,和TCP协议的端口号类似
ØUDP长度:用来指出UDP的总长度,为首部加上数据
Ø校验和:用来完成UDP数据的差错校验,它的计算与TCP的校验和类似
二、TCP和UDP协议
Ø访问控制列表(ACL)是应用在路由器接口的指令表(即规则)
Ø这些指令列表用来告诉路由器,哪些数据包可以接收,哪些数据包需要拒绝
Ø原理:ACL使用包过滤技术,在路由器的3层、4层读取包头中的信息,如源地址、目的地址、源端口、目的端口等,根据预先定义好的规则,对包进行过滤,从而达到访问控制列表的目的
Ø路由器根据ACL中指定的条件来检测通过路由器的数据包,从而决定是转发还是丢弃该数据包
【ACL两种基本类型】
标准访问控制列表:检查数据包的源地址。它使用1~99之间的数字作为表号
扩展访问控制列表:对数据包的源地址与目标地址均进行检查。它也能检查特定
的协议、端口号以及其他参数,它使用100~199之间的数字作为表号
(1)、访问控制列表的工作原理
【访问控制列表的两个方向】
出:已经过路由器的处理,正离开路由器接口的数据包
入:已到达路由器接口的数据包,将被路由器处理
(2)、访问控制列表的类型
1、标准访问控制列表→→→尽量应用在离目标近的地方
Ø根据数据包的源IP地址来允许或拒绝数据包
Ø控制列表号是:1~99
2、扩展访问控制列表→→→尽量应用在离源近的地方
Ø根据数据包的源IP、目的IP、指定协议、端口和标志来允许或拒绝数据包
Ø控制列表号是:100~199
三、标准访问控制列表的配置
【创建ACL】
Router(config)#access-list access-list-number { permit| deny } source { source wildcard }
access-list-number:列表号1~99之间都行
permit|deny:如果满足测试条件,则允许或拒绝该通信流量
source:数据包的源地址,可以是主机地址,也可以是网络地址
source-wildcard:通配符掩码,也叫反码。
例如:允许来自网络192.168.1.0/24和主机192.168.2.2的流量通过;
router(config)# access-list 1 permit192.168.1.0 0.0.0.255
router(config)# access-list 1 permit192.168.2.2 0.0.0.255
【隐含的拒绝语句】
每一个ACL都有一条隐含的拒绝语句,拒绝所有流量
Router(config)# access-list 1 deny 0.0.0.0 255.255.255.255
【关键字host、any】
Router(config)#access-list 1 deny any
Router(config)#access-list 1 permit host 192.168.2.2
【删除已建立的标准ACL】
Router(config)#no access-list access-list-number
【将ACL应用于接口】
Router(config)#ip access-group access-list-number { in | out }
in:表示进 out:表示出
【在接口上取消ACL的应用】
Router(config)#no ip access-group access-list-number {in | out }
【查看ACL的配置】
Rouer#show access-list
【查看VLAN上应用的ACL配置】
Router#show ip int vlan 10
四、命名ACL与带表号ALC的比较优势
1、可以单独删除条目
2、可以单独插入条目