首页 > 其他分享 >Tcp协议

Tcp协议

时间:2022-11-07 10:48:33浏览次数:59  
标签:协议 ACK 报文 TCP 发送 Client Tcp 连接

一.TCP/IP协议定义

 

TCP/IP(Transmission Control Protocol/Internet Protocol)是传输控制协议和网络协议的简称,它定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准。

TCP/IP 不是一个协议,而是一个协议族的统称,里面包括了 IP 协议、ICMP 协议、TCP 协议、以及 http、ftp、pop3、https 协议等。网络中的计算机都采用这套协议族进行互联。

TCP UDP 的报头和 Http 的报头差别很大;Http 是文本格式的协议 (按照字符串文本的方式处理的),而 TCP / UDP 都是二进制的协议 (以字节 / 比特位为单位进行组织的)

二.TCP报文

TCP 报文是 TCP 层传输的数据单元,也称为报文段
TCP 报文中每个字段如图所示:

源端口、目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通信。源端口、目标端口是用16位表示的,可推算计算机的端口个数为2^16个,即 65536 (0-65535) 序列号:表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字节都会按顺序编号。由于序列号由32位表示,所以每2^32个字节,就会出现序列号回绕,再次从0 开始 无限循环 确认号:(ack)表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。也就是告诉发送方:我希望你(指发送方)下次发送的数据的第一个字节数据的编号为此确认号:传输是否有问题? 首部长度:表示TCP报文段的首部长度,共4位,由于TCP首部包含一个长度可变的选项部分,需要指定这个TCP报文段到底有多长。它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。该字段的单位是32位(即4个字节为计算单位),4位二进制最大表示15,所以数据偏移也就是TCP首部最大60字节 控制位 URG(紧急位):表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgent pointer)只有当URG=1时才有效 ACK(确认位):表示是否前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。TCP规定,连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段 PSH(急切位):提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间。如果为1,则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序不将接收到的数据读走,就会一直停留在TCP接收缓冲区中 RST(重置位):如果收到一个RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST标志的TCP报文段称为复位报文段 SYN(同步位):在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1,带SYN标志的TCP报文段称为同步报文段 FIN(断开位):表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=1,即告诉对方:“我的数据已经发送完毕,你可以释放连接了”,带FIN标志的TCP报文段称为结束报文段 窗口大小:表示现在允许对方发送的数据量,也就是告诉对方,从本报文段的确认号开始允许对方发送的数据量,达到此值,需要ACK确认后才能再继续传送后面数据,由Window size value * Window size scaling factor(此值在三次握手阶段TCP选项Window scale协商得到)得出此值 校验和:提供额外的可靠性紧急指针:标记紧急数据在数据字段中的位置 选项部分:其最大长度可根据TCP首部长度进行推算。TCP首部长度用4位表示,选项部分最长为:(2^4-1)*4-20=40字节

三.TCP三次握手

 

1.pc1会发送syn 报文请求连接seq=x (数据段的序号)
SYN=1 (同步位为1代表请求建 立连接)
2.pc2收到请求包会回复SYN+ACK的报文
seq=y (pc2发送的数据段 序号)
ack=x+1 (确认号, 希望pc1回复的
报文序号为x+1) SYN=1(同步位等于1 代表收到了pc1的请求) ACK=1 (确认位为1代表同意建立连接)
3.pc1收到pc2的回复后会发送一个序号为x+1 的数据段
确认号为ack=y+1 (正式传输数据时 第一个包的序号
点什么.为y+1) 确认位为1代表同意连接
小写的ack确认号大写的ACK 是确认位

四.TCP四次挥手

 

  • 第一次挥手: Client端发起挥手请求,向Server端发送标志位是FIN报文段,设置序列号seq,此时,Client端进入FIN_WAIT_1状态,这表示Client端没有数据要发送给Server端了。
  • 第二次分手:Server端收到了Client端发送的FIN报文段,向Client端返回一个标志位是ACK的报文段,ack设为seq加1,Client端进入FIN_WAIT_2状态,Server端告诉Client端,我确认并同意你的关闭请求。
  • 第三次分手: Server端向Client端发送标志位是FIN的报文段,请求关闭连接,同时Client端进入LAST_ACK状态。
  • 第四次分手 : Client端收到Server端发送的FIN报文段,向Server端发送标志位是ACK的报文段,然后Client端进入TIME_WAIT状态。Server端收到Client端的ACK报文段以后,就关闭连接。此时,Client端等待2MSL的时间后依然没有收到回复,则证明Server端已正常关闭,那好,Client端也可以关闭连接了。

 

标签:协议,ACK,报文,TCP,发送,Client,Tcp,连接
From: https://www.cnblogs.com/sj5426/p/16865141.html

相关文章

  • TCP的三次握手和四次挥手
    三次握手客户端向服务器发送一个syn的报文请求建立连接服务器在接受到客户端发的报文后回复一个ACK确认包和一个需要客户端确认的syn包客户端在收到这二个包之后发送一......
  • 实验3:OpenFlow协议分析实践
    实验3:OpenFlow协议分析实践一、实验目的能够运用wireshark对OpenFlow协议数据交互过程进行抓包;能够借助包解析工具,分析与解释OpenFlow协议的数据包交互过程与机制......
  • 常见的开源协议介绍和使用
    开源协议规定了你在使用开源软件时的权利和责任,也就是规定了你可以做什么,不可以做什么的法律文件相关概念License:许可协议OpenSourceLicense:开源许可协议引用:将开......
  • 从序号和确认号理解TCP三次握手
    头部信息TCP首部存储的数据和建立连接有关,具体每个字段的用途可以参考这一篇文章,其中序号和确认号决定了发送数据的内容。头部中间部分"保留"和"窗口"中间是标志位,会携......
  • Python - 上下文管理器协议
    with语句的目的是简化try/finally,即便由于异常,return,sys.exit()调用而终止,也会执行指定的操作上下文管理器协议包含__enter__和__exit__两个方法with语句开始执行......
  • 实验3:OpenFlow协议分析实践
    实验3:OpenFlow协议分析实践一、实验目的能够运用wireshark对OpenFlow协议数据交互过程进行抓包;能够借助包解析工具,分析与解释OpenFlow协议的数据包交互过程与机制......
  • 4. 客户端从TCP服务端下载文件(低端版)
    服务器端:      客户端:      ......
  • 抓包分析 TCP 握手和挥手
    前言首先需要明确的是TCP是一个可靠传输协议,它的所有特点最终都是为了这个可靠传输服务。在网上看到过很多文章讲TCP连接的三次握手和断开连接的四次挥手,但是都太过于......
  • web基础与http协议
    一、HTML1.1、html概述HTML叫做超文本标记语言,是一种规范,也是一种标准,它通过标记符号来标记要显示的网页中的各个部分。网页文件本身是一种文本文件,通过在文本文件中添加......
  • 【lwip】10-ICMP协议&源码分析
    目录前言10.1ICMP简介10.2ICMP报文10.2.1ICMP报文格式10.2.2ICMP报文类型10.2.3ICMP报文固定首部字段意义10.3ICMP差错报告报文10.3.1目的不可达10.3.2源站抑制10.......