精华内容
下载资源
问答
  • (一)深入浅出TCPIP之理解TCP报文格式和交互流程
    千次阅读 多人点赞
    更多相关内容
  • TCP交互流程

    千次阅读 2018-07-12 17:31:00
    前言:在FPGA上实现TCP协议实际是一个不太好的计划,因为FPGA最擅长的是流水线处理方式,而TCP存在交互,导致FPGA需要进行反馈式的处理。但是由于项目新增的附加要求而又只能在FPGA上去实现TCP协议,才有了这篇总结...

     

    前言:在FPGA上实现TCP协议实际是一个不太好的计划,因为FPGA最擅长的是流水线处理方式,而TCP存在交互,导致FPGA需要进行反馈式的处理。但是由于项目新增的附加要求而又只能在FPGA上去实现TCP协议,才有了这篇总结。

    关于在FPGA上实现TCP的具体过程在另外一篇随笔上进行详细介绍。

    TCP报文格式

    源端口号(16bit)

    目的端口号(16bit)

    序列号(32bit)

    确认序列号(32bit)

    首部长度

    (4bit)

    保留(6bit)

    URG

    ACK

    PSH

    RST

    SYN

    FIN

    窗口(16bit)

    校验和(16bit)

    紧急指针(16bit)

    选项和填充

    数据

    ARP报文格式:

    以太网目的地址(48bit)

    以太网源地址(48bit)

    帧类型

    (16bit)

     

    硬件类型(16bit)

    协议类型(16bit)

    硬件地址长度(8bit)

    协议地址长度(8bit)

    操作码(16bit)

     

    发送者硬件地址(48bit)

    发送者IP地址(32bit)

    目标硬件地址(48bit)

    目标IP地址(32bit)

    TCP数据传输流程

     搭建的测试环境很简单,就是用一根网线将两台笔记本连接起来,其中一台电脑上模拟客户端,另一台电脑模拟服务端,用wireshark进行报文抓取。

    测试地址如下:

    交互端

    MAC地址

    IP地址

    TCP端口号

    服务器(Server

    a0:88:69:8f:2f:64

    192.168.1.124

    6920 (0x1b08)

    客户(Client

    a0:88:b4:77:46:44

    192.168.1.115

    3005 (0x0bbd)

     

    1. 地址解析(ARP

    (1)客户端向服务器发送一个寻址ARP包。

    客户端发送ARP报文,寻找ip地址为192.168.1.115的主机的mac地址是多少。

     

    (2)服务器收到ARP包后,向客户端发送一个带地址的ARP包。

    服务端告诉客户端,我的mac地址是a0:88:69:8f:2f:64。

     

    ARP结束(在TCP数据传输的后续过程中还会进行多次这样的ARP过程)。

     

    2.TCP交互过程:

    序列号

    确认序列号

    SeqNum

    AckNum

    2.1 建链(三次握手)

    使用socket调试工具进行tcp调试。

         

    STEP1客户端向服务器发送一个数据包(SYN),请求建立连接。Flags=0x02

    初始SeqNum(ISN)由客户端随机产生,AckNum为0。

    [SYN]包:SeqNum=0x753bb0dd     AckNum=0x00000000

     

    STEP2服务器收到SYN请求数据包后,对客户端进行确认。Flags=0x12

    初始SeqNum(ISN)由服务器随机产生,AckNum=客户端SeqNum + 1。

    [SYN,ACK]包:SeqNum=0x98d82910     AckNum=0x753bb0de

    STEP3客户端收到确认包后,再对服务器进行确认。Flags=0x10

    SeqNum=收到上一帧的AckNum,AckNum=收到上一帧的SeqNum + 1。

    [ACK]包:SeqNum=0x753bb0de     AckNum=0x98d82911

     

    2.2 数据传输(数据包+ACK包)

          

    STEP1发送数据:客户端向服务器发送一个带有数据的数据包。Flags=0x18

    SeqNum=收到上一帧的AckNum,AckNum=收到上一帧的SeqNum。

    STEP2确认收到:服务器收到该数据包,向客户端发送一个确认包。Flags=0x10

    SeqNum=收到上一帧的AckNum,AckNum=收到上一帧的SeqNum + payload字节长度。

    (1)发送长度为10字节的数据

    [PUSH,ACK]包:SeqNum=0x753bb0de  AckNum=0x98d82911

     

    [ACK]包:SeqNum=0x98d82911     AckNum=0x753bb0e8

    (2)发送长度为14字节的数据

    [PUSH,ACK]包:SeqNum=0x753bb0e8  AckNum=0x98d82911

     

    [ACK]包:SeqNum=0x98d82911     AckNum=0x753bb0f6

    2.3 断链(四次挥手)

        

    STEP1客户端完成数据传输后,主动向服务器发送一个终止包(FIN)。Flags=0x11

    SeqNum=收到上一帧的AckNum,AckNum=收到上一帧的SeqNum。

    [FIN,ACK]包:SeqNum=0x753bb101      AckNum=0x98d82911

     

    STEP2服务器收到终止数据包后,向客户端发送确认包进行确认。Flags=0x10

    SeqNum=收到上一帧的AckNum,AckNum=收到上一帧的SeqNum + 1。

    [ACK]包:SeqNum=0x98d82911     AckNum=0x753bb102

    STEP3服务器完成数据传输后,向客户端发送一个终止包(FIN)。Flags=0x11

    SeqNum=收到上一帧的AckNum,AckNum=收到上一帧的SeqNum。

    [FIN,ACK]包:SeqNum=0x98d82911      AckNum=0x753bb102

    STEP4客户端收到终止数据包后,向服务器发送确认包进行确认。Flags=0x10

    SeqNum=收到上一帧的AckNum,AckNum=收到上一帧的SeqNum + 1。

    [ACK]包:SeqNum=0x753bb102     AckNum=0x98d82912

     

    3.TCP重传机制

     TCP重传目的是防止报文的丢失。在使用TCP进行数据传输时,启动重传计时器(retransmission timer),在收到ACK确认报文后,停止重传计时器。TCP重传过程中有两个重要的参数,往返时间(RTT)和重传超时(RTO)。RTT是指发送端口从报文发出直至收到ACK确认报文所花费的时间。通过对RTT的值多次测量求平均来确定RTO的值。在默认配置下,Windows系统最大的重传次数为5次,Linux系统最大的重传次数为15次。


    4. 分片、分段

     4.1. 最大传输单元(MTU

    分片是针对IP协议存在的,IP报文的分片与重组是在网络层完成的。在以太网中,MTU=1500字节,对长度大于MTU的报文进行分片处理,分片后的IP报文不一定按序到达对端。

    4.2. 最大分段大小(MSS

    分段是针对TCP协议存在的,TCP报文的分段与重组是在传输层完成的。MSS是指TCP报文每一次可以传输的最大数据段,TCP协议在三次握手建立连接的前两次握手中会协商双方的MSS值,MSS值的配置在TCP协议的选项字段中,TCP连接的双方会在握手中通过MSS值通知对方自己能够接收数据段的最大长度。

    在一般情况下,MSS=MTU-IP首部长度-TCP首部长度=1500-20-20=1460字节。如果在三次握手的过程中不对MSS值进行配置,默认的MSS为536字节。

    TCP的options字段:

     

    5. 滑动窗口技术

     由于FPGA资源有限,在FPGA中一般无法实滑动窗口机制。

    在发送端将数据分为四类:在窗口之外的已经成功发送并且被确认的数据、在窗口内的已经发送但未被确认的数据、在窗口内的接收端允许发送但未发送的数据、在窗口之外的接收端不允许发送的数据。

    在接收端将数据分为三类:已经接收并回复确认但未被上层应用接收的数据、已经接收但未回复确认的数据、等待接收的数据。

    注:在使用TCP协议进行数据传输中,并不是对于每一个报文段都回复ACK包,而是有可能对两个甚至多个报文段只回复一个ACK包。

    转载于:https://www.cnblogs.com/beisu/p/9300689.html

    展开全文
  • 该实验是了监听WebMail发信交互过程,所以程序要完成的工作是抓取客户端和mail服务器交互的数据包,并从原始数据包中取出有效数据,这些数据...实验内容:监听WebMail发信交互过程。 哈工大威海信息内容安全实验报告。
  • TCP交互过程(小包的响应性)

    千次阅读 2013-01-10 10:43:45
    TCP小包传输——在保证响应和避免拥塞之间的权衡。 1。经受时延的ACK: 原理:端点收到数据包,并不立刻回ACK,直到有数据包发送或定时器超时再捎带上ACK。 应用:TCP小包传输的一般方法。【总是独立于Nagle...

    (保留版权,欢迎转载。请保留出处,注明原始链接!谢谢。)

    TCP小包传输——在保证响应和避免拥塞之间的权衡。


    1。经受时延的ACK:

    原理:端点收到数据包,并不立刻回ACK,直到有数据包发送或定时器超时再捎带上ACK。

    应用:TCP小包传输的一般方法。【总是独立于Nagle和其他算法存在,LInux实现是200ms。】


    2。Nagle算法:

    原理:在TCP连接上,仅允许有一个未被确认和未完成的数据包;在端点上,搜集将要发送的多个数据包,直到ACK到达时或拼接的数据包足够大时一起发出。【例外情况:当对端发出多个包时(如1个ACK和1个数据包),端点可针对性的发出两个包。】

    应用:在慢速广域网上,避免大量小包引起拥塞,降低网络开销。

    禁止:当要传输的多个连续小包有组合意义时,如X Windows的功能键,Nagle算法会造成明显的响应延迟。【具体原因:接收方对收到的单个小包无法解析并生成响应,只好继续等待后续数据包,而发送方却仍等待已发数据包的ACK,结果方相互停等,直至任何经受时延的ACK触发,才破解死锁状态。】(TCP_NODELAY套接口选项)


    3。CORK算法:

    与Nagle相似,都会拼包;不同之处:Nagle算法见ACK来就发新数据包,而Cork则可持续缓存拼接未来的新数据包。(当然经受时延的ACK仍然起作用。当计时器超时,拼接的数据包或仅ACK都立刻发出。)

    4。其他参考:

    a. 网络编程中Nagle算法和Delayed ACK的测试

    http://www.blogjava.net/killme2008/archive/2011/06/30/353441.html

    (描述了除X Window 组合键外的另一种连续小包的组合意义:发送请求头部 -> 发请求主体 -> 接收响应)

    b. 动手实现TCP的Nagle算法,提高网络应用程序的性能

    http://blog.csdn.net/windcsn/article/details/428166

    (深入分析Nagle的实现机制)(也有经受时延的ACK?怎么回事?)

    c. 糊涂窗口综合症和Nagle算法

    http://www.cnblogs.com/zhaoyl/archive/2012/09/20/2695799.html

    (澄清TCP详解卷一的相关细节)(也有经受时延的ACK?怎么回事?)

    d. TCP的Nagle算法和Delayed ACK机制导致从Windows Azure Table Service获取小数据记录的高延时

    http://www.cnblogs.com/polymorphism/archive/2012/12/10/High_Latency_for_Small_Size_Entities_in_Table_Service.html

    (发端的Nagle与收端的Delayed ACK相互作用导致延迟的另外一例)

    e. Nagle的算法

    http://en.wikipedia.org/wiki/Nagle's_algorithm

    (原始协议)

    f. Nagle算法

    http://blog.csdn.net/igame/article/details/1801860

    (泛泛概念)

    g. Boost socket performance on Linux

    http://www.ibm.com/developerworks/linux/library/l-hisock/index.html

    (TCP几种常规调试方法)

    h. TCP delayed acknowledgment
    http://en.wikipedia.org/wiki/TCP_delayed_acknowledgment

    (经受时延的ACK)

    i. 再探Linux下的TCP延迟确认机制
    http://pananq.com/index.php/tag/delayed-ack/

    (结合实例分析详细)

    展开全文
  • 举例了解一下TCP报文段中的ACK和Seq的含义 5.流程分析 6.为什么要进行三处握手? 1.首先准备好抓包工具wireshark w i r e w h a r k 官 网 下 载 地 址 : wirewhark官网下载地址: wirewhark官网下载地址:...


    1.首先准备好抓包工具wireshark

    w i r e w h a r k 官 网 下 载 地 址 : wirewhark官网下载地址: wirewharkhttps://www.wireshark.org/


    2.准备一段简单的socket程序

    🏆(1)服务端程序如下

        public void server06() throws IOException {
            try {
                serverSocket = new ServerSocket(8080);
                serverSocket.accept();
                Thread.sleep(Integer.MAX_VALUE);
            } catch (InterruptedException e) {
                e.printStackTrace();
            } finally {
                serverSocket.close();
            }
        }
    

    🏆(2)客户端程序如下

        public void client06() throws IOException {
            try {
                socket = new Socket("127.0.0.1", 8080);
                clientOutputStream = socket.getOutputStream();
                clientOutputStream.write(new byte[]{'1', '2', '3', '4', '5', '6'});
            } finally {
                clientOutputStream.close();
                socket.close();
            }
    
    
        }
    

    3.打开wireshark工具进行抓包

    在这里插入图片描述
    因为我这个是本地程序测试,所以对本地回环/回调接口进行抓包,也就是上图中的loopback
    在这里插入图片描述
    此 时 在 8080 端 口 没 有 抓 取 到 任 何 数 据 , 因 为 此 时 我 们 的 程 序 还 未 启 动 此时在8080端口没有抓取到任何数据,因为此时我们的程序还未启动 8080


    先启动服务端小程序,然后再启动客户端小程序
    在这里插入图片描述

    此 时 再 去 看 w i r e s h a r k 窗 口 , 就 会 发 现 抓 取 了 很 多 包 此时再去看wireshark窗口,就会发现抓取了很多包 wireshark
    在这里插入图片描述

    前 三 行 就 是 所 谓 的 三 次 握 手 的 流 程 前三行就是所谓的三次握手的流程
    在这里插入图片描述

    4.举例了解一下TCP报文段中的ACK和Seq的含义

    在这里插入图片描述
    Seq(序号):简单了说序号就是该报文段首字节的字节流编号。比如,A主机向B主机发送一个大小为500000字节的数据流(报文),最大报文段长度(MSS)为1000字节,所以要为该数据流(报文)构建500个报文段,所以第一个报文段的seq(序号)就是0,第二个报文段的分配序号为1000,第三个2000,以此类推…

    ACK(确认序号):它的意思是期望下一次对方发送给我以ACK为起始字节的数据。比如说,B主机发送给A主机一个报文段(范围为0~1000的所有字节);此时A主机打算发送一个报文段给B,它的目的是期望B主机给它发送1001及以后的数据,那么此时A->B报文段中的ACK=1001


    5.流程分析

    第一次握手:
    在这里插入图片描述

    首先客户端向服务端发送SYN标志,目的是告诉服务器我想与你建立连接(此时len = 0代表没有数据发送)

    第二次握手:
    在这里插入图片描述
    第二次发送了SYN和ACK标志位。ACK = 1表示服务端期待下一次客户端发送给我的序号(seq)是1,seq=0也很好理解,这两次都没发送数据肯定是0呀(如果你看完了第4步seq和ack的例子应该很好理解)

    第三次握手:
    在这里插入图片描述

    • 此时的Seq=1应该好理解,因为上一次服务端发送给我的ACK=1(期待我发送1及其以后的数据给它),由于len=0,所以本次也不发送任何数据,三处握手不传输任何核心数据。
    • 此时ACK=1就是我期待服务端下一次发送给我的起始字节序号。
      在这里插入图片描述

    到这里三次握手就结束了,此外你可以看看三次握手之后的传输数据流程
    在这里插入图片描述
    相信应该比较容易理解(我代码中write了6个字节)
    注意客户端的59712端口是系统分配的,我没有进行显示bind


    6.为什么要进行三处握手?

    其实这是因为无论是客户端还是服务端都无法确认对方能到接收到它的信息。最重要的原因还是防止已经失效的报文段突然又被服务端接收

    展开全文
  • TCP和UDP的Client-Server交互流程

    千次阅读 2019-07-03 09:04:37
    1.TCP Client-Server交互流程 2.UDP Client-Server交互流程 注:图片来源(https://www.cs.dartmouth.edu/~campbell/cs60/socketprogramming.html#x1-100013)。 3.一个形象的比喻 建立TCP连接就像是一个电话...
  • 网络层等到数据链层用mac地址作为通信目标,数据包到达网络等准备往数据链层发送的时候 ,首先会去自己的arp缓存表(存着ip-mac对应关系)去查找改目标ip的mac地址,如果查到了, 就讲目标ip的mac地址封装到链路层...
  • TCP/IP数据链路层的交互过程 网络层等在数据链路层用MAC地址作为通信目标,数据包到达网络层等往数据链路层发送的时候,首先回去ARP缓存表去查找ip对应的MAC地址,如果查到了,就将此ip对应的MAC地址封装到链路层...
  • tcp rtsp交互抓包

    2022-03-29 17:41:34
    使用vlc客户端拉取rtsp流,抓取了整个交互过程中的包,包括rtsp信令、音视频流数据(rtp、rtcp)
  • TCP协议是一种面向连接的协议,在数据传输之前必须先建立连接。 服务器大都可以与多个客户保持连接,因此通信过程中需要至少两个套接字 监听套接字 已连接套接字 监听套接字:有服务器端调用socket()函数创建,...
  • TCP交互数据流及成块数据流

    千次阅读 2018-03-20 22:02:22
    这些协议依据数据传输的多少能够分为两类:交互数据类型和成块数据类型。 交互数据类型,如:Telnet。这类协议一般仅仅做小流量的数据交换,比方每按下一个键,要回显一些字符。 成块数据类型,如:FTP,这类协议...
  • TCP握手交互实例演习

    千次阅读 2018-06-03 12:41:06
    TCP握手交互实例演习 1. 编写Server端 2. 编写Client端 3. Client端与Server端交互,并捕获交流包 3.1. 将Server与Client进行编译成可执行档 3.2. 使用Wireshark进行捕获网络包 3.3. Server与Client在Ubuntu上运行 ...
  • TCP客户端与服务器的交互过程

    千次阅读 2006-10-03 11:22:00
    1,Server 创建ServerSocket,调用accept方法,等待客户连接2,Client 创建Socket请求与Server连接3,Server 接受请求,创建一个新Socket与该客户建立专线连接4,建立连接的两个Socket在一个单独的线程(由Server...
  • TCP协议的连接建立过程和释放过程简单介绍

    万次阅读 多人点赞 2019-01-22 11:44:24
     计算机网络协议众多,TCP协议只是其中的一个。因为它的可靠性,很多数据传输都使用TCP协议,它也是面试时候考察的重点,所以有必要把学习到的知识点记录下来。  TCP协议的主要特点  1、TCP是面向连接的运输层...
  • TCP握手过程和挥手过程

    千次阅读 2018-09-12 16:19:11
    TCP报文首部 源端口和目的端口,各占2个字节,分别写入源端口和目的端口; 序号,占4个字节,TCP连接中传送的字节流中的每个字节都按顺序编号。例如,一段报文的序号字段值是 301 ,而携带的数据共有100字段,显然...
  • 举一个基本的例子来说明服务器端和客户端之间的数据交互,采用TCP协议实现。 题目: 客户端能够接收用户输入的两个数并发送到服务器; 服务器端能够接收到这两个数并将其相加并将结果返回给客户端; 客户端接收到...
  • Https:深入浅出HTTPS的交互过程

    千次阅读 2020-04-15 13:56:40
    说到HTTPS,就需要知道HTTP。...也就是说,他是不安全的。 然而在我们主机与目标服务器进行信息交互过程中,不可避免地会涉及到支付、登录后等进行的一系列需要保密和其他的相关操作信息。于是出现了HTTPS协议。
  • Telnet协议(图解交互过程

    千次阅读 2019-06-20 14:45:40
    TelneT默认端口号修改: (1)修改/etc/services中的默认端口 (2)修改/usr/lib/systemd/system/telnet.socket中的默认端口 ...(3)修改端口:命令:semanage port -a -t telnetd_port_t -p tcp 9...
  • TCP进行数据传输时,可以分为成块数据流和交互数据流两种,如果按字节计算,成块数据与交互数据的比例约为90%和10%,TCP需要同时处理这两类数据,且处理的算法不同。书籍本章中以Rlogin应用为例观察交互数据的传输...
  • TCP连接过程及报文解析

    千次阅读 2018-08-07 14:39:00
    这篇文章就通过WireShark抓包来了解TCP连接建立和断开的过程。 实验方法: 写一段简单的代码 代码客户端和服务端,分别部署,让客户端主动像服务器发起连接,随后断开。让WireShark抓股这个过程中产生了哪些包,并...
  • 文章目录TCP3.1 三次握手(重点)3.2 四次挥手(重点)3.3 通过序列号与确认应答提高可靠性3.4 重发超时的确定3.5 以段为单位发送数据3.6 利用窗口控制提高速度3.7 滑动窗口控制3.8 窗口控制中的重发控制 TCP TCP ...
  • 如何实现基于tcp进行http交互

    千次阅读 2015-07-28 14:41:42
    如何实现基于tcp协议进行http协议交互。手机网页遥控器,其实就是在 android端利用 SocketServer 启动tcp协议进行http协议交互。源码开放给大家了,大家可以根据自己的需要,进行修改。 点击下满链接 下载代码 demo
  • TCP协议详解

    千次阅读 2022-03-30 22:15:54
    过程: 1.双方首先进行,需要为连接分配必要的内核资源,管理连接状态和数据传输 2.双方读写都是通过同一个连接进行的 3.完成数据交换后,通信双方应该断开连接以释放系统资源 需要注意: 1.TCP协议用于1对1,即不能...
  • TCP协议是一个Stream的协定,就像是电源一样,只要不断电,Stream和电流一般,Socket即为插座,TCP是支持可靠、双向、连接架构的字节数据流。 重要的C# API说明 IPAddress addr = IPAddress.Parse(“127.0.0.1”); ...
  • TCP/IP握手过程

    千次阅读 2018-05-23 19:25:14
    本文在github上学习tcp ip协议时看到,写的非常好,原文链接在此:tcp-ip-protocal TCP(传输控制协议) 传输控制协议(Transmission Control Protocol,TCP)是一种面向连接的、可靠的、基于字节流的传输层通信...
  • 通过之前的抓包WireShark抓包报文结构分析,我们大概可以看出,WireShark的报文结构类似于TCP/IP四层模型。报文封装的最内层为封装的业务数据,最外层对应报文转发所需参数。 实际对应起来就是报文最外层的...
  • DHCP协议的交互过程

    千次阅读 2018-01-13 14:16:26
     标准的DHCP server 和client的交互过程如下图所示,  图 DHCP交互过程时序图 如果客户通过别的手段获得了网络地址,它可以使用DHCPINFORM请求获得其它配置参数,服务器接收到DHCPINFORM包,并建立一...
  • HTTPS原理及交互过程

    千次阅读 2017-07-30 16:43:55
    HTTP是一个客户端和服务器端请求和应答的标准(TCP)。客户端是终端用户,服务器端是网站。通过使用Web浏览器、网络爬虫或者其它的工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求。(我们称这个...
  • TCP/IP的TCP socket通信过程

    万次阅读 多人点赞 2017-12-27 20:36:04
    传统的TCP/IP通信过程依赖于socket,位于应用层和传输层之间,使得应用程序可以进行通信。相当于港口城市的码头,使得城市之间可以进行货物流通。服务器和客户端各有不同的通信流程。一、服务器 1、建立连接阶段...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 168,356
精华内容 67,342
关键字:

tcp交互过程