Chinaunix首页 | 论坛 | 博客
  • 博客访问: 219464
  • 博文数量: 63
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 472
  • 用 户 组: 普通用户
  • 注册时间: 2014-12-11 14:36
文章分类

全部博文(63)

文章存档

2016年(2)

2015年(23)

2014年(38)

我的朋友

分类: 网络与安全

2014-12-11 16:56:48

1. 理解:窗口和滑动窗口 TCP的流量控制 
TCP使用窗口机制进行流量控制
什么是窗口?

连接建立时,各端分配一块缓冲区用来存储接收的数据,并将缓冲区的尺寸发送给另一端

接收方发送的确认信息中包含了自己剩余的缓冲区尺寸

剩余缓冲区空间的数量叫做窗口

2. TCP的流控过程(滑动窗口)

2. TCP 与UDP的区别 

很多文章都说TCP协议可靠,UDP协议不可靠!为什么前者可靠,后者不可靠呢?既然UDP协议不可靠,为什么还要使用它呢?所谓的TCP协议是面向连接的协议,面向连接是什么呢?   
TCP和UDP都是传输层的协议!从编程的角度看,就是两个模块(模块就是代码的集合,一系列代码的组合提供相应的功能!模块化最终目的就是:分工协作!模块化好处:便于扩展开发以及维护!)。   
先说TCP协议:   
这 个协议,是面向的连接!面向连接这个概念,我们要从物理层看起。大家都知道,因为“信道复用技术”的迅猛发展,才促使了计算机网络的发展!如果没有“信道 复用技术”,那么单条线路上(这里的线路指物理传输介质,例如:双绞线、光纤、电话线)单位时间内只能供一台计算机使用!还是举例说明:就拿你自己的计算 机来说,你跟同学“小明”聊天的时候,就不能跟另外一位同学“小强”聊天,如果你想同时跟两位同学聊天,那么你就得装两条线路!那么同时与第三位、第四位 同学。。。第N位同学聊天的时候,你需要装几根线路?全世界人民聊天的时候,又需要装几根线路?   
“信道复用技术”实现了,在同一条线路上,单位时间内可供X台计算机同时通信!Toad知道以下几种复用技术:   
  1、频分复用    2、时分复用    3、波分复用    4、码分复用    5、空分复用    6、统计复用    7、极化波复用   
关于“信道复用技术”更深层次的问题,需要你自己去研究!   
上面我们提到了“信道复用技术”!知道了这一点,我们就很容易明白“物理信道”上的“虚拟信道”概念了!不同的信道复用技术,使用不同的复用技术,目的就是创建“虚拟信道”。   
一个TCP协议连接其实就是在物理线路上创建的一条“虚拟信道”。这条“虚拟信道”建立后,在TCP协议发出FIN包之前(两个终端都会向对方发送一个FIN包),是不会释放的。正因为这一点,TCP协议被称为面向连接的协议!   


UDP协议,一样会在物理线路上创建一条“虚拟信道”,否则UDP协议无法传输数据!但是,当UDP协议传完数据后,这条“虚拟信道”就被立即注销了!因此,称UDP是不面向连接的协议! 

TCP协议和UDP协议为什么会共存?

1. 大家要知道,一种物理线路,单位时间内,能够创建的“虚拟信道”是有限的!

2. 使用TCP协议传输数据,当数据从A端传到B端后,B端会发送一个确认包(ACK包)给A端,告知A端数据我已收到!UDP协议就没有这种确认机制!这就是为什么说TCP协议可靠,UDP协议不可靠. 

QQ普通会员就是使用的UDP协议进行传输数据!既然UDP协议自身没有确认机制,这个工作可以交给应用层的进程来完成(QQ)!大家使用QQ的时候,感觉出错的几率还是非常小吧!当然,把这个确认工作完全交给QQ自身来做,就直接导致了,QQ软件体积增大!   

 

有些应用,对数据传输可靠性要求非常高,例如大家浏览网页,通过网页注册帐号、转帐等服务,这是不容许出错的,使用TCP协议能把出错的可能性降到 最低(当然,网络自身很糟糕,TCP协议也没办法)。但是,提供这种可靠服务,会加大网络带宽的开销,因为“虚拟信道”是持续存在的,同时网络中还会出现 大量的ACK和FIN包!  

  因此,鱼和熊掌不可兼得,需根据实际情况选择传输协议.TCP协议提供了可靠的数据传输,但是其拥塞控制、数据校验、重传机制的网络开销很大,不适合实时通信,所以选择开销很小的UDP协议来传输数据。   

UDP 协议是无连接的数据传输协议并且无重传机制,会发生丢包、收到重复包、乱序等情况。而对于数据精确性要求不高的状态数据以及视频数据,丢包的影响不大。因 为会不断收到新的包,丢失的个别包会有新的包来覆盖,所以只需在远程控制系统的通信部分自行处理乱序及重复包的问题,而对于丢包的问题一般不作处 理。    但对于命令包这种需要精确收发的数据, 可在程序的开发中加入丢包重发和超时丢弃的处理。 当然,如果开发的是对于实时性要求不高的事件型控制命令的传输,不希望发生指令的丢失也可以直接采用TCP协议。TCP的重传机制正好适合这种情 况。   

 

非面向连接的传输协议在数据传输之前不建立连接,而是在每个中间节点对非面向连接的包和数据包进行路由。没有点到点的连接,非面向连接的协议,如 UDP,是不可靠的连接。当一个UDP数据包在网络中移动时,发送过程并不知道它是否到达了目的地,除非应用层已经确认了它已到达的事实。非面向连接的协 议也不能探测重复的和乱序的包。标准的专业术语用“不可靠”来描述UDP。在现代网络中,UDP并不易于导致传输失败,但是你也不能肯定地说它是可靠的


TCP和UDP都是传输层的协议!

 应用层 (QQ)
物理连接层
各自协议使用的常用端口:如http, https, tcp, udp, ftp等等

TCP:
FTP:21, Telnet:23, SMTP:25

UDP:
DNS:53, TFTP:69, SNMP:161, RIP:520

https:
http:80

标志控制

URG:紧急标志
紧急(The urgent pointer) 标志有效。紧急标志置位,
ACK:确认标志
确认编号(Acknowledgement Number)栏有效。大多数情况下该标志
TCP三次握手是Syn Flood存在的基础 TCP三次握手是Syn Flood存在的基础
位是置位的。TCP报头内的确认编号栏内包含的确认编号(w+1,Figure:1)为下一个预期的序列编号, 同时提示远端系统已经成功接收所有。
PSH:推标志
该标志置位时,接收端不将该进行队列处理,而是尽可能快将数据转由应用处理。在处理 或 rlogin 等交互模式的连接时,该标志总是置位的。
RST:复位标志
复位标志有效。用于复位相应的TCP连接。
SYN:同步标志
同步序列编号(Synchronize Sequence Numbers)栏有效。该标志仅在三次握手建立TCP连接时有效。它提示TCP连接的检查序列编号, 该序列编号为TCP连接初始端(一般是)的初始序列编号。在这里,可以把TCP序列编号看作是一个范围从0到4,294,967,295的32位。 通过TCP连接交换的中每一个都经过序列编号。在TCP报头中的序列编号栏包括了TCP分段中第一个的序列编号。
FIN:结束标志
带有该标志置位的数据包用来结束一个TCP回话,但对应端口仍处于开放状态,准备接收后续数据。
处于,用于建立连接请求的(IP pet)按照TCP/IP协议堆栈组合成为TCP处理的分段(segment)。
分析报头信息: TCP层接收到相应的TCP和IP报头,将这些信息存储到内存中。
检查TCP校验和(checksum):标准的校验和位于分段之中(Figure:2)。如果检验失败,不返回确认,该分段丢弃,并等待进行重传。
查找协议控制块(PCB{}):TCP查找与该连接相关联的协议控制块。如果没有找到,TCP将该分段丢弃并返回RST。(这就是TCP处理没有情况下的机制) 如果该协议控制块存在,但状态为关闭,不调用connect()或listen()。该分段丢弃,但不返回RST。会尝试重新建立连接请求。
建立新的:当处于的socket收到该分段时,会建立一个子,同时还有socket{},tcpcb{}和pub{}建立。这时如果有错误发生, 会通过标志位来拆除相应的和释放内存,TCP连接失败。如果缓存队列处于填满状态,TCP认为有错误发生,所有的后续连接请求会被拒绝。 这里可以看出SYN Flood攻击是如何起作用的。
丢弃:如果该分段中的标志为或,或者没有SYN标志,则该分段丢弃。并释放相应的内存。
小结TCP与UDP的区别: 1.基于连接与无连接; 2.对系统资源的要求(TCP较多,UDP少); 3.UDP程序结构较简单; 4.流模式与数据报模式 ; 5.TCP保证数据正确性,UDP可能丢包,TCP保证数据顺序,UDP不保证。
阅读(2125) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~