zoukankan      html  css  js  c++  java
  • TCP协议

    重点知识点:四层协议

    1.OSI七层协议和TCP/IP四层协议

    OSI:从上到下为应用层、表示层、会话层、网络层、运输层、数据链路层、物理层

    TCP/IP四层协议:从上到下为应用层(应用层、表示层、会话层)、网络层、运输层、网络接口层(数据链路层和物理层);

    2.TCP报文结构

    1、端口号:用来标识同一台计算机的不同的应用进程。

    1)源端口:源端口和IP地址的作用是标识报文的返回地址。

    2)目的端口:端口指明接收方计算机上的应用程序接口。

    TCP报头中的源端口号和目的端口号同IP数据报中的源IP与目的IP唯一确定一条TCP连接。

    2、序号和确认号:是TCP可靠传输的关键部分。序号是本报文段发送的数据组的第一个字节的序号。在TCP传送的流中,每一个字节一个序号。e.g.一个报文段的序号为300,此报文段数据部分共有100字节,则下一个报文段的序号为400。所以序号确保了TCP传输的有序性。确认号,即ACK,指明下一个期待收到的字节序号,表明该序号之前的所有数据已经正确无误的收到。确认号只有当ACK标志为1时才有效。比如建立连接时,SYN报文的ACK标志位为0。

    3、数据偏移/首部长度:4bits。由于首部可能含有可选项内容,因此TCP报头的长度是不确定的,报头不包含任何任选字段则长度为20字节,4位首部长度字段所能表示的最大值为1111,转化为10进制为15,15*32/8 = 60,故报头最大长度为60字节。首部长度也叫数据偏移,是因为首部长度实际上指示了数据区在报文段中的起始偏移值。

    4、保留:为将来定义新的用途保留,现在一般置0。

    5、控制位:URG  ACK  PSH  RST  SYN  FIN,共6个,每一个标志位表示一个控制功能。

    1)URG:紧急指针标志,为1时表示紧急指针有效,为0则忽略紧急指针。

    2)ACK:确认序号标志,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段。

    3)PSH:push标志,为1表示是带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队。

    4)RST:重置连接标志,用于重置由于主机崩溃或其他原因而出现错误的连接。或者用于拒绝非法的报文段和拒绝连接请求。

    5)SYN:同步序号,用于建立连接过程,在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1。

    6)FIN:finish标志,用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本方数据流。

    6、窗口:滑动窗口大小,用来告知发送端接受端的缓存大小,以此控制发送端发送数据的速率,从而达到流量控制。窗口大小时一个16bit字段,因而窗口大小最大为65535。

    7、校验和:奇偶校验,此校验和是对整个的 TCP 报文段,包括 TCP 头部和 TCP 数据,以 16 位字进行计算所得。由发送端计算和存储,并由接收端进行验证。

    8、紧急指针:只有当 URG 标志置 1 时紧急指针才有效。紧急指针是一个正的偏移量,和顺序号字段中的值相加表示紧急数据最后一个字节的序号。 TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。

    9、选项和填充:最常见的可选字段是最长报文大小,又称为MSS(Maximum Segment Size),每个连接方通常都在通信的第一个报文段(为建立连接而设置SYN标志为1的那个段)中指明这个选项,它表示本端所能接受的最大报文段的长度。选项长度不一定是32位的整数倍,所以要加填充位,即在这个字段中加入额外的零,以保证TCP头是32的整数倍。

    10、数据部分 TCP 报文段中的数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段仅有 TCP 首部。如果一方没有数据要发送,也使用没有任何数据的首部来确认收到的数据。在处理超时的许多情况中,也会发送不带任何数据的报文段。

    3.TCP和UDP区别

    TCP:面向连接、可靠、速度慢、效率低

    UDP:不面向连接、不可靠、速度快、效率高

    4.TCP三次握手和四次挥手以及TimeWait作用

    参考:

    https://www.cnblogs.com/Jessy/p/3535612.html

    TimeWait作用:

    1。防止上一次连接中的包,迷路后重新出现,影响新连接
      (经过2MSL,上一次连接中所有的重复包都会消失)
    2。可靠的关闭TCP连接
      在主动关闭方发送的最后一个ack(fin) ,有可能丢失,这时被动方会重新发
      fin, 如果这时主动方处于CLOSED 状态 ,就会响应rst 而不是ack。所以
      主动方要处于TIME_WAIT 状态,而不能是CLOSED 。
    TIME_WAIT 并不会占用很大资源的,除非受到攻击。
    还有,如果一方send 或recv 超时,就会直接进入CLOSED 状态

    5.TCP拥塞机制

    (1)在通信子网出现过多数据包的情况,使得网络的性能下降,甚至不能正常工作,这种现象就称为拥塞。

    (2)网络拥塞的成因主要有三:1、处理器的速度太慢。2、线路容量的限制。3、节点输出包的能力小于输入包的能力。

    (3)拥塞控制与流量控制是相关的,流量控制在数据链路层对一条通信路径上的流量进行控制,其的是保证发送者的发送速度不超过接收者的接收速度,它只涉及一全发送者和一个接收者,是局部控制。拥塞控制是对整个通信子网的流量进行控制,其目的是保证通信子网中的流量与其资源相匹配,使子网不会出现性能下降和恶化、甚至崩溃,是全局控制。

    (4)拥塞控制的最终目标是:1、防止由于过载而使吞吐量下降,损失效率;2、合理分配网络资源;3、避免死锁;4、匹配传输速度。

    (5)对拥塞控制,可用的方法有两类:开环控制和闭环控制。
    1、开环控制的思想是通过良好的设计避免拥塞问题的出现,确保拥塞问题在开始时就不可能发生。开环控制方法包括何时接受新的通信何时丢弃包、丢弃哪些包。其特点是在作出决定时不考虑网络当前的状态。
    2、闭环控制的思想是反馈控制。即通过将网络工作的动态信息反馈给网络中节点的有关进程,节点根据网络当前的动态信息,调整转发数据包的策略。闭环控制过程包括三部分: ①监视系统  检测网络发生或将要发生拥塞的时间和地点。②报告  将监视中检测到的信息传送到可以进行拥塞控制的节点。③决策  调整系统的操作行为,以解决问题。

    (6)对应于开环控制的方法有:(基于拥塞预防)

    1、预定缓冲区 2、合理分配缓冲区 3、通信量整形法(A、许可证算法,B、漏桶算法,C、令牌漏桶算法。)

    对应于闭环控制的方法有:(基于拥塞抑制,即拥塞出现或即将出现时采取适当的措施进行控制,直到消除拥塞)

    1、阻塞包法。 2、负载丢弃法

    6.TCP滑动窗口控制流量

    https://www.cnblogs.com/luoquan/p/4886345.html

  • 相关阅读:
    从服务器角度分析RPG游戏——NPC的AI
    羽翼特效设计
    坐骑特效设计(二)
    坐骑特效设计
    Unity AssetBundle打包资源工具
    有趣的进度条
    原生与组件
    bower
    yeoman
    grunt+bower+yo
  • 原文地址:https://www.cnblogs.com/zzuli/p/9581828.html
Copyright © 2011-2022 走看看