zoukankan      html  css  js  c++  java
  • TCP介绍

    TCP是一种面向连接、可靠的、基于字节流的传输层通信协议,在因特网协议族中,tcp是位于IP层之上,应用层之下的中间层,不同主机的应用层之间经常要可靠的,像管道一样的连接,但是ip层不提供这样的流机制,而是提供了不可靠的包交换。

    应用层向TCP层发送用于网间传输的,用8位字节表述的数据流,然后TCP把数据流区分成适当长度的报文段,之后把结果传给IP层,由他来通过网络将包传送给接收端实体的TCP层。TCP为了保证包发送丢包,就给每个包一个序号,同样序号也保证了传送到接受实体的包的是按照序号接受了,然后接收端实体对已成功收到的包发回一个相应的确认(ACK),如果发送端实体在合理的往返时延内未收到确认,那么对应的数据包就被假设为已丢失,将会被进行重新传送。TCP用一个校验和函数来检查数据是否有错误,在发送和接受时都要计算校验和。

    • 在数据准确性和合法性上,TCP用一个校验和函数来检验数据是否有错误,在发送和接受端都要计算校验和,同时可以使用MD5认证对数据加密。
    • 在保证可靠性上,采用了超时重传和捎带确认机制。
    • 在流量控制上,采用滑动窗口的协议,在协议中规定,对于窗口内未经确认的分组需要重传。

    在拥塞控制上,采用了TCP拥塞控制算法,该算法有三个部分:加性增、乘性减;启动慢;对超时事件做出反应。

    首部格式

     

    TCP的首部格式图右图所示:

    Source Port是源端口,16位。

    Destination Port是目的端口,16位。

    Sequence Number是发送数据包中的第一个字节的序列号,32位。

    Acknowledgment Number是确认序列号,32位。

    Data Offset是数据偏移,4位,该字段的值是TCP首部(包括选项)长度除以4。

    标志位: 6位,URG表示Urgent Pointer字段有意义:
    ACK表示Acknowledgment Number字段有意义
    PSH表示Push功能,RST表示复位TCP连接
    SYN表示SYN报文(在建立TCP连接的时候使用)
    FIN表示没有数据需要发送了(在关闭TCP连接的时候使用)
    Window表示接收缓冲区的空闲空间,16位,用来告诉TCP连接对端自己能够接收的最大数据长度。
    ---Checksum是校验和,16位。
    ---Urgent Pointers是紧急指针,16位,只有URG标志位被设置时该字段才有意义,表示紧急数据相对序列号(Sequence Number字段的值)的偏移。
    连接建立
    TCP采用三次握手协议来建立连接,当主动方发出SYN连接请求后,等待对方回答SYN+ACK,并最终对对放的SYN执行ACK确认,这种建立建立的方法剋有防止产生错误的连接,三次握手的过程如下:
    1. 客户端发送SYN报文给服务器,进入SYN_SEND状态。
    2. 服务器收到SYN报文,回应一个SYN(SEQ=y)ACK(ACK=x+1)报文,进入SYN_RECV状态。
    3. 客户端收到服务器的SYN报文,回应一个ACK(ACK=y+1)报文,进入Established状态。
    三次握手完成,TCP客户端和服务器段就可以成功的建立连接了,就可以开始传输数据了。
    连接终止
    建立一个连接需要三次握手,而终止一个连接需要经过4次握手,这是由于TCP的半关闭(half-close)造成的,具体过程如下 :
    1. 某个应用进程首先调用close,称该端执行主动关闭,该端的TCP于是发送一个FIN分节,表示数据发送完毕。
    2. 接受到这个FIN的对端执行被动关闭,这个FIN由TCP确认。
    3. 一段时间之后,接受到这个文件结束符的应用进程将调用close关闭它的套接字,这导致了他的TCP也发送了一个FIN。
    4. 接到这个FIN的元发送端TCP确认这个FIN。
     可靠性
    TCP提供一种面向连接的。可靠的字节流服务,面向连接以为着两个使用TCP的应用在彼此交换数据包之前必须建立一饿TCP连接,在一个TCP连接中,仅有两方进行彼此通信,广播和多播是不能用于TCP的。TCP有如下方式来保证可靠性:
    1. 应用数据被分割成TCP认为最合适发送的数据块。有TCP传递给IP的信息称为报文段或者段(segment)。
    2. 当TCP发送一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到这个确认,将重发这个报文段。当TCP收到发自TCP连接另一端的数据,它将发送一个确认,TCP有延迟确认的功能。
    3. TCP将保持它首部和数据的检验和,这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化,如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文。
    4. 既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段到达也可能失序,如果必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。
    5. IP数据报会发生重复,TCP的接收端必须丢弃重复的数据。
    6. TCP还能提供流量控制,TCP连接的每一方都有固定大小的缓冲空间。
    7. 重传策略
    8. 窗口确认
    参考连接:https://baike.baidu.com/item/TCP/33012?fr=aladdin
     
  • 相关阅读:
    Js $.merge() 函数(合并两个数组内容到第一个数组)
    11.联结表---SQL
    函数作用域
    递归特性
    计算递归函数理解
    递归、问路函数
    全局变量用大写,局部变量用小写
    全局变量与局部变量
    函数形参和实参
    函数和过程
  • 原文地址:https://www.cnblogs.com/VARForrest/p/9641668.html
Copyright © 2011-2022 走看看