【TCP/IP】

   TCP数据传输时,上层协议标识会添加在下层报文头部

      #应用层端口号会添加在‘TCP/UDP’的报文头部中

      #传输层协议号会添加在‘IP’的报文头部中

      #网络层协议类型号会添加在‘以太网帧’的报文头部中

【HTTP 80/TCP】

可以理解为http的端口号是80,使用的是TCP上层协议

一、TCP和UDP协议

TCP/IP协议族的传输层主要有两个:

      #TCPTransmission  Control Protocol,传输层控制协议)

      #UDPUser  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、可以单独插入条目