Chinaunix首页 | 论坛 | 博客
  • 博客访问: 52651
  • 博文数量: 10
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2014-06-29 16:18
文章分类
文章存档

2015年(2)

2014年(8)

我的朋友

分类: 网络与安全

2014-08-16 11:18:53

原文地址:TCP协议(1) 作者:wangspace


  1. TCP:(Transmission Control Protocol,传输控制协议)
  2.     TCP打算用在分组交换计算机通讯网络和这类网络的内部链接系统的主机间高可靠主机对主机协议。
  3. 1.范围:
  4.     TCP打算提供在多网络环境中的可靠进程对进程通信服务。
  5. 2. TCP的特点:
  6.     TCP提供面向连接的、全双工的、可靠地字节流服务。解决例如数据破坏、丢包、重复以及分片顺序混乱等问题。

  7. 3,TCP首部的格式:
  8. TCP Header Format
    
                                        
        0                   1                   2                   3   
        0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |          Source Port          |       Destination Port        |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                        Sequence Number                        |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                    Acknowledgment Number                      |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |  Data |           |U|A|P|R|S|F|                               |
       | Offset| Reserved  |R|C|S|S|Y|I|            Window             |
       |       |           |G|K|H|T|N|N|                               |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |           Checksum            |         Urgent Pointer        |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                    Options                    |    Padding    |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
       |                             data                              |
       +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    
                                TCP Header Format
    


  9.     1)源端口号(Source Port)
  10.         表示发送端端口号,字段长度16位。
  11.     2)目标端口号(Destination Port)
  12.         表示接受端端口,字段长度16位。
  13.     3)序列号(Sequence Number)
  14.         本分段首个数据字节的序列号。若存在SYN则序号是补始序列号且首个数据字节是ISN+1
  15.     4)确认序号( Acknowledgment Number)
  16.         确认序号字段长度32位。是下一次应该收到的数据的序列号。实际上,它是指收到确认应答减一为止的数据。
  17.         发送端受到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。
  18.     5)数据偏移(Data Offset)
  19.         该字段表示TCP所传输的数据部分应该从TCP包的那个位开始计算,当然也可以把它看做TCP首部长度。
  20.     6)保留( Reserved)
  21.         主要为以后扩展使用。
  22.     7)控制位(Control Flag)
  23.         字段长8位。
  24.         简要介绍:
  25.         URG:紧急指针有效
  26.         ACK:确认序号有效
  27.         PSH:接收方应该尽快将这个报文段交给应用成。
  28.         RST:重新连接
  29.         SYN:同步序号用来发起一个连接。
  30.         FIN:发送端完成发送任务。
  31.     8)窗口大小( Window Size )
  32.         该字段16 位。用于通知从相同TCP首部的确认应答号所指位置开始能够接收的数据大小。
  33.     9)校验和(Checksum)
  34.         这个校验和是针对首部和数据两部分.
  35.     10)紧急指针(Urgent Pointer)
  36.         该字段16位。只有URG控制位为1时才有效。该字段的数值表示报文段中的紧急数据指针。
  37.         正确来讲,从数据部分的首部到紧急指针所指示的位置为止为紧急数据。因此也可以说紧急指针指出了数据的末尾
  38.         在报文中的位置。
  39.     11)选项(Options)
  40.         该选项字段用于提高TCP的传输性能。因为根据数据偏移进行控制,所以其长度最大为40字节。

4.TCP连接的建立与终止


    4.1.建立连接协议:
        为了建立连接:
        1)请求端(通常称为客户)发送一个SYN段指明客户打算连接的服务器的端口,以及初始序号(ISN,1415531521).
        2)服务器发回包含服务器的初始化序号的SYN报文段作为应答。同时,将确认序号设置为客户的ISN加1对客户的SYN报文段进行确认。一个SYN将占用一个序号。
        3)客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认。
           
        这三个报文段完成连接的建立。这个过程也称为三次握手。
    4.2 连接终止协议
·     建立连接需要三次握手,而终止一个连接需要4次握手。如图:
                                    
    当服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1和SYN一样,一个FIN将占用一个序号。同时TCP服务器还向应用程序传送一个文件结束符。接着这个
    服务器程序就关闭它的连接,导致它的TCP端发送一个FIN,客户端必须发回一个确认,将确认序号设置为收到的序号加1.
    在这个图中,发送FIN将导致应用程序关闭它们的连接,这些FIN的ACK是由TCP软件自动的发起的。
    连接通常是由客户端发起的,这样一个SYN从客户传到服务器。每一端都能主动关闭这个连接。然而,一般由客户端决定何时终止连接,因为客户进程通常由用户交互控制,


    4.3.TCP的状态变迁图
        


    4.4同时打开
    每一方必须发送一个SYN,且这些SYN必须传递个对方。这需要每一方使用一个对方熟知的端口作为本地端口。这就是同时打开。
    下图显示状态变迁的过程:
        
        两端几乎在同时发送SYN,并进入SYN_SENT状态。当每一端收到SYN时,状态变为SYN_RCVD,同时它们在发送SYN并对收到的SYN进行确认。当双方都收到SYN及相应的ACK时,状态都变迁为E S TA B L I S H E D。
    5.同时关闭
        双方同时发送FIN状态;
        当应用层发出关闭命令时,两端均从ESTABLISHED变为FIN_WAIT_1。这将导致双方各发送一个FIN,两个FIN经过网络传送后分别送到另一端。收到FIN后,状态由FIN_WAIT_1变迁为CLOSING,并发送最后的ACK.dang收到最后的ACK时,状态变为TIME_WAIT。
        

RFC 793:
附件:RFC793.pdf
阅读(2412) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~