zoukankan      html  css  js  c++  java
  • TCP/IP|| 建立连接或终止

      1.TCP是一个面向连接的协议,在双方发送数据时需要之间建立连接.

      当使用telnet命令是连接对应的端口产生TCP连接,通过tcpdump命令查看TCP报文段的输出

      

      源>目的:标志

      

    在标识中有4个bit标志,分别表示

    标志 3字符编写 描述

    S

    F

    R

    P

    .

    SYN

    FIN

    RST

    PSH

    同步序号

    发送方完成数据发送

    复位连接

    将数据送往接受进程

    标志比特均为0

       2.ack表示确认,只有在首部中的ACK标志比特设置为1标示

      3.win字段标示发送端窗口大小,当没有进行交换,大小默认为4096

      4.<mss 1024>标示发送端指明的最大报文段长度选项,发端不接收超过这个长度的TCP报文段.

    2.建立连接协议

        1.请求端发送一个SYN指明客户打算连接的服务端口,以及初始序号,SYN报文段为1

        2.服务器发回包含服务器的初始化序号SYN报文段作为应答,将确认序号设置为客户SYN加1以对客户的SYN报文段进行确认,一个SYN占用一个序号.

        3.客户必须将确认的序号设置为服务器的ISN加1对服务器的SYN进行确认已完成连接,这种过程叫3次握手(three-way handshake)

        当建立连接发送SYN时,为连接选择一个初始序号,ISN随时间变化,因此每个连接拥有不同的SYN,

    3.连接终止协议

        在终止连接时需要经过4次握手实现,由TCP的半关闭状态造成,一个TCP为全双工,因此每个方向必须单独关闭,原则是当一方完成数据连接时通过发送一个FIN来终止方向连接,意味着FIN在这一方向没有数据流动.

        一个TCP在收到一个FIN时也可以发送数据.在进行FIN的一方执行主动关闭,另一方执行被动关闭,当服务器收到FIN,发回一个ACK,确认序号为收到序号+1,一个FIN占用一个序号,通过服务器还向应用程序传送一个文件终结符,接着服务器程序关闭连接,导致服务端发送一个FIN,客户必须发回确认.

      

      3.服务类型字段

          当出现超时时m出现[tos 0x10] 作为最小时间延迟

      4.最大报文长度

        MSS用于表示TCP穿往另一端的最大快数据长度,当建立连接时,双方需要告知MSS,通常情况下为1024,最终IP数据报通常为40 bit,20bitTCP首部和20bitIP首部

        当目的IP地址为“非本地(nonlocal)”,MSS通常默认值为536,区分地址的方法为当目的IP地址的网络号雨子网号和我们相同,则是本地的,否则为不同,可以通过设置MSS为尽可能多的大来确认

        MSS让主机限制另一端发送数据库的长度,加上主机可以控制数据报的长度,可以使用较小的MTU来连接主机避免分段.

       5.TCP半关闭

        半关闭主要可以在结束发送时接收另一端的能力,围绕这个特性,需要为应用程序说明,

      6.TCP state change

      

      

      

        状态变迁的子集是典型的,在导致TSTABLELSHED状态变迁打开一连接导致,离开的变迁对应一个关闭连接。

         2MSL状态作为TCP实现的报文段最大生成时间MSL是任何报文在被丢弃前在网络最长时间,在对一个给定MSL时,处理的原则是当TCP执行一个主动关闭后发挥最后一个ACK,连接在TIME_WAIT状态中停留的时间为2倍的MSL,使TCP发送最后的ACK以免丢失。

         FIN_WAIT_2状态为发送FIN并在另一端确认,除非进行半关闭,否则将等待另一层的应用层意识到收到一个文件的结束符号说明,并向我们发送一个FIN来关闭另一端的连接,只有另一端的进程完成关闭,FIN_WAIT_2状态才可以进入TIME_WAIT状态,但也有可能进入COLSE_WAIT状态.

        

      7.检测半打开连接

        如果一方处于异常终止或者未知连接状态,成为TCP的半打开连接状态,只要不打算在半打开连接传输数据,人处于连接状态泽不会检测到另一方的异常,当用户处于半打开连接状态时,再重启后服务器的ARP为空,因此需要ARP的请求和应答.

      8.同时打开z

        两个应用程序同时主动打开时存在的,每一方发送SYN,同时传递给对方,需要每一方使用的端口作为本地端口,称作同时打开(simulataneous open),在同时打开的状态下,进入SYS_SENT状态,每一端收到SYN时,状态变为SYN_RCVD,同时发送SYN确认,当受访收到SYN对应的ACK时,变迁为ESTABLISHED

      9.同时关闭

        在发送FIN,也有可能存在同时关闭(simltaneous close).在应用层中发出关闭命令,两段从ESTABLELISHED变为FIN_WAIT_1,导致双方发送FIN,收到FIN后,状态从FIN_WAIT_1变迁到CLOSING,发送最后的ACk,当收到最后的ACK时,状态变为TIME_WAIT

        

      10TCP选项

      在RFC 1323中,定义了TCP选项

      选项的开始1字节的kind字段标示选项的类型,0和1占1bit,len字节,说明总长度,包括kind和len.

      无操作选项允许发送方填充字段为4bit的倍数        

          

  • 相关阅读:
    SpringBoot学习
    Matlab立体标定mat转换成Opencv的CvMat
    由lib引发的血案(opencv找不函数问题)
    C# 使用Epplus导出Excel [4]:合并指定行
    C# 使用Epplus导出Excel [3]:合并列连续相同数据
    C# 使用Epplus导出Excel [2]:导出动态列数据
    C# 使用Epplus导出Excel [1]:导出固定列数据
    C# Excel常用控件总结
    C# IsNullOrEmpty与IsNullOrWhiteSpace
    C# 读App.config配置文件[2]: .Net Core框架
  • 原文地址:https://www.cnblogs.com/EraserHead/p/6698223.html
Copyright © 2011-2022 走看看