赞
踩
协议:
应用层-----http、https、ftp、DNS、SMTP、PoP3、RDP
传输层-----TCP、UDP
网络层-----IP协议(RIP、OSPF、BGP)、ICMP、IGMP、ARP
传输层两个协议的应用场景:
TCP(传输控制协议)---需要分段,编号,需要建立会话,有流量控制,可靠传输
UDP(用户数据报协议)---一个数据包就能完成数据通信,不用建立会话(不可靠传输)
两个对等运输实体在通信时传送的数据单位叫作运输协议数据单元
TCP 传送的数据单位协议是 TCP 报文段 (segment)。
UDP 传送的数据单位协议是 UDP 报文或用户数据报。
QQ聊天是UDP协议,QQ传输文件是TCP(不能只用一个数据包完成),访问网站、下载文件是TCP。
运输层的端口复用:
复用:应用进程都可以通过运输层再传送到 IP 层(网络层)
分用:运输层从 IP 层收到发送给应用进程的数据后,必须分别交付给指明的各应用进程。
运输层与应用层之间的关系:
http=TCP+80 (简单地说就是给TCP加一个端口一个名称)
https=TCP+443
ftp=TCP+21
STMP=TCP+25
PoP=TCP+110
RDP=TCP+3389
共享文件夹=TCP+445
SQL=TCP+1433
DNS=UDP+53 (极少数情况下使用TCP+53)
应用层协议和服务层之间的关系:服务运行后在TCP或UDP的某个端口侦听客户端请求(用端口来定位服务,用IP地址来定位计算机)
Web服务
ftp
Stmp
端口代表服务,访问端口失败意味着不能访问这个服务。
更改端口增加服务安全。(如何只开一个固定的端口保证服务的安全)
TCP/IP 运输层端口的标志:
端口用一个 16 位端口号进行标志,允许有 65,535 个不同的端口号。
端口号只具有本地意义,只是为了标志本计算机应用层中的各进程。
在互联网中,不同计算机的相同端口号没有联系。
两个计算机中的进程要互相通信,不仅必须知道对方的端口号,而且还要知道对方的 IP 地址。
常用的熟知端口:
Windows网络安全------防火墙的作用:能Ping别人,但别人不能Ping你(网卡拦截)
Windows防火墙不能防控木马程序(主机被植入木马程序后,木马主动连接客户端,拦不住)。
运输层的作用:
运输层向高层用户屏蔽了下面网络核心的细节(如网络拓扑、所采用的路由选择协议等),使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道。
(一)UDP协议:
UDP 只在 IP 的数据报服务之上增加了一些功能:复用和分用、差错检测
UDP 的主要特点:无连接。发送数据之前不需要建立连接。
使用尽最大努力交付。即不保证可靠交付。
面向报文。UDP 一次传送和交付一个完整的报文。
没有拥塞控制。网络出现的拥塞不会使源主机的发送速率降低。很适合多媒体通信的要求。
支持一对一、一对多、多对一、多对多等交互通信。
首部开销小,只有 8 个字节
(UDP 通信的特点:简单方便,但不可靠)
UDP 是面向报文的:
发送方 UDP 对应用层交下来的报文,既不合并,也不拆分,按照样发送。
接收方 UDP 对 IP 层交上来的 UDP 用户数据报,去除首部后就原封不动地交付上层的应用进程,一次交付一个完整的报文。
应用程序必须选择合适大小的报文。
若报文太长,IP 层在传送时可能要进行分片,降低 IP 层的效率。
若报文太短,会使 IP 数据报的首部的相对长度太大,降低 IP 层的效率
UDP 的首部格式:
(1) 源端口:源端口号。在需要对方回信时选用。不需要时可用全 0。
(2) 目的端口:目的端口号。终点交付报文时必须使用。
(3) 长度:UDP 用户数据报的长度,其最小值是 8(仅有首部)。
(4) 检验和:检测 UDP 用户数据报在传输中是否有错。有错就丢弃。
UDP 基于端口的分用:
接收方 UDP 根据首部中的目的端口号,把报文通过相应的端口上交给应用进程。
如果接收方 UDP 发现收到的报文中的目的端口号不正确(即不存在对应于该端口号的应用进程),就丢弃该报文,并由 ICMP 发送“端口不可达”差错报文给发送方。
在计算检验和时,临时把 12 字节的“伪首部”和 UDP 用户数据报连接在一起。伪首部仅仅是为了计算检验和。
计算 UDP 检验和的例子:
(二)TCP协议
关于TCP协议,我们主要学习TCP如何实现可靠传输,TCP协议如何实现流量控制,TCP协议如何网络拥塞。
TCP 最主要的特点:
TCP 是面向连接的运输层协议,在无连接的、不可靠的 IP 网络服务基础之上提供可靠交付的服务。为此,在 IP 的数据报服务基础之上,增加了保证可靠性的一系列措施。
TCP 是面向连接的运输层协议。(要先建立会话)
每一条 TCP 连接只能有两个端点 (endpoint),每一条 TCP 连接只能是点对点的(一对一)。【IP地址+端口实现,即套接字】
TCP 提供可靠交付的服务。
TCP 提供全双工通信。(同时收发)
面向字节流
(1)TCP 中的“流”(stream) 指的是流入或流出进程的字节序列。
(2)面向字节流:虽然应用程序和 TCP 的交互是一次一个数据块,但 TCP 把应用程序交下来的数据看成仅仅是一连串无结构的字节流。
【TCP 面向流的概念】:TCP 不保证接收方应用程序所收到的数据块和发送方应用程序所发出的数据块具有对应大小的关系。(数据包无固定的大小)
但接收方应用程序收到的字节流必须和发送方应用程序发出的字节流完全一样。
套接字:socket = (IP地址 : 端口号)
如:套接字 socket = (192.169.1.20 : 2028)
每一条 TCP 连接唯一地被通信两端的两个端点(即两个套接字)所确定:
TCP 连接 ::= {socket1, socket2} = {(IP1: port1),(IP2: port2)}
同一个 IP 地址可以有多个不同的 TCP 连接。
同一个端口号也可以出现在多个不同的 TCP 连接中。
理想传输条件的特点:传输信道不产生差错。不管发送方以多快的速度发送数据,接收方总是来得及处理收到的数据。
在理想传输条件下,不需要采取任何措施就能够实现可靠传输。
但实际网络都不具备理想传输条件。必须使用一些可靠传输协议,在不可靠的传输信道实现可靠传输。
可靠传输的工作原理-----停止等待协议
每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组。
全双工通信的双方既是发送方也是接收方。
假设仅考虑 A 发送数据,而 B 接收数据并发送确认。因此 A 叫做发送方,而 B 叫做接收方。
无差错的情况:
A 发送完分组 M1 后就暂停发送,等待 B 的确认 (ACK)。
B 收到 M1 向 A 发送 ACK。
A 在收到了对 M1 的确认后,就再发送下一个分组 M2。
出现差错的情况:
1.B 接收 M1 时检测出了差错,就丢弃 M1,其他什么也不做(不通知 A 收到有差错的分组)。
2.M1 在传输过程中丢失了,这时 B 当然什么都不知道,也什么都不做。
在这两种情况下,B 都不会发送任何信息,那A 如何知道 B 是否正确收到了 M1 呢?
解决方法:超时重传
A 为每一个已发送的分组设置一个超时计时器。
A 只要在超时计时器到期之前收到了相应的确认,就撤销该超时计时器,继续发送下一个分组 M2 。
若 A 在超时计时器规定时间内没有收到 B 的确认,就认为分组错误或丢失,就重发该分组。
确认丢失和确认迟到:
确认丢失----若 B 所发送的对 M1 的确认丢失了,那么 A 在设定的超时重传时间内将不会收到确认,因此 A 在超时计时器到期后重传 M1。
假定 B 正确收到了 A 重传的分组 M1。这时 B 应采取两个行动:
(1) 丢弃这个重复的分组 M1,不向上层交付。(2) 向 A 发送确认。
确认迟到---B 对分组 M1 的确认迟到了,因此 A 在超时计时器到期后重传 M1。
B 会收到重复的 M1,丢弃重复的 M1,并重传确认分组。
A 会收到重复的确认。对重复的确认的处理:丢弃
停止等待协议的优点是简单,但缺点是信道利用率太低。
提高信道利用率的方法就是提高分组发送时间Td,即流水线传输,发送方连续发出多个分组.
由于信道上一直有数据不间断地传送,流水线传输可获得很高的信道利用率。连续 ARQ 协议和滑动窗口协议采用流水线传输方式。
连续 ARQ 协议:
发送窗口:发送方维持一个发送窗口,位于发送窗口内的分组都可被连续发送出去,而不需要等待对方的确认。
发送窗口滑动:发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。
累积确认:接收方对按序到达的最后一个分组发送确认,表示:到这个分组为止的所有分组都已正确收到了。
累计确认的优点:容易实现,即使确认丢失也不必重传
缺点:不能向发送方反映出接收方已经正确收到的所有分组的信息
连续 ARQ 协议采用 Go-back-N(回退N),Go-back-N(回退N):表示需要再退回来重传已发送过的 N 个分组。
当通信线路质量不好时,连续 ARQ 协议会带来负面的影响。
TCP 报文段的首部格式:
TCP 虽然是面向字节流的,但 TCP 传送的数据单元却是报文段。
一个 TCP 报文段分为首部和数据两部分,而 TCP 的全部功能都体现在它首部中各字段的作用。
TCP 报文段首部的前 20 个字节是固定的,后面有 4n 字节是根据需要而增加的选项 (n 是整数)。因此 TCP 首部的最小长度是 20 字节。
--源端口和目的端口:各占 2 字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能通过端口实现。
--序号:占 4 字节。TCP 连接中传送的数据流中的每一个字节都有一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。
(如发送的数据为1234,则序号为1;发送的数据为567,则序号为5;发送的数据为89,则序号为8;而不是1,2,3依次计数)
--确认号:占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。
【若确认号 = N,则表明:到序号 N – 1 为止的所有数据都已正确收到。即若确认号为5,则5之前的1234数据已经收到】
--数据偏移(即首部长度):占 4 位,指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。单位是 32 位字(以 4 字节为计算单位)。
【首部之后是数据部分,但首部的长度不固定,可能会由于选项长度的变化而变化,数据偏移量的变化就是由于这个】
--保留:占 6 位,保留为今后使用,但目前应置为 0。
--紧急 URG:控制位。当 URG = 1 时,表明紧急指针字段有效,告诉系统此报文段中有紧急数据,应尽快传送 (相当于高优先级的数据)。
--确认 ACK:控制位。只有当 ACK =1 时,确认号字段才有效。当 ACK =0 时,确认号无效。
--推送 PSH (PuSH) :控制位。接收 TCP 收到 PSH = 1 的报文段后,就尽快(即“推送”向前)交付接收应用进程,而不再等到整个缓存都填满后再交付。
--复位 RST (ReSeT) :控制位。当 RST=1 时,表明 TCP 连接中出现严重差错(如主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。
--同步 SYN (SYNchronization) :控制位。
同步 SYN = 1 表示这是一个连接请求或连接接受报文。
当 SYN = 1,ACK = 0 时,表明这是一个连接请求报文段。
当 SYN = 1,ACK = 1 时,表明这是一个连接接受报文段。
--终止 FIN (FINish) :控制位。用来释放一个连接。
FIN=1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。
--窗口:占 2 字节。
窗口值告诉对方:从本报文段首部中的确认号算起,接收方目前允许对方发送的数据量(以字节为单位)。【窗口字段明确指出了现在允许对方发送的数据量。窗口值经常在动态变化】
--检验和:占 2 字节。检验和字段检验的范围包括首部和数据这两部分。
在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部。
--紧急指针:占 2 字节。在 URG = 1时,指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据),指出了紧急数据的末尾在报文段中的位置。
--选项:长度可变,最长可达 40 字节。(MSS 是 TCP 报文段中的数据字段的最大长度。
数据字段加上 TCP 首部才等于整个的 TCP 报文段。所以,MSS是“TCP 报文段长度减去 TCP 首部长度”)
【最大报文段长度 MSS,不能太大,也不能太小,应尽可能大(默认值= 536 字节)】
--填充:使整个 TCP 首部长度是 4 字节的整数倍。
最大报文段长度 MSS 是每个 TCP 报文段中的数据字段的最大长度,与接收窗口值没有关系。
TCP 报文段长度 = 数据字段长度 + TCP 首部长度
数据字段长度 = TCP 报文段长度 – TCP 首部长度
窗口扩大:TCP 窗口字段长度= 16 位,最大窗口大小 = 64 K 字节。
对于传播时延和带宽都很大的网络,为获得高吞吐率较,需要更大的窗口。
窗口扩大选项:占 3 字节,其中一个字节表示移位值 S。
新的窗口值位数从 16 增大到 (16 + S),相当于把窗口值向左移动 S 位。
移位值允许使用的最大值是 14,窗口最大值增大到 2(16 + 14) – 1 = 230 – 1。
窗口扩大选项可以在双方初始建立 TCP 连接时进行协商。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。