TCP传输过程

一、概述

1、什么是TCP

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

2、什么是面向连接

面向连接的服务就是通信双方在通信时,要事先建立一条通信线路,其过程有建立连接、使用连接和释放连接三个过程。TCP,三次握手建立连接,数据传输使用连接,四次挥手释放连接。

3、什么是面向无连接

面向无连接是通信技术之一。是指通信双方不需要事先建立一条通信线路,而是把每个带有目的地址的包(报文分组)送到线路上,由系统自主选定路线进行传输。

4、面向连接与面向无连接的区别

  1. 面向连接

    1)、面向连接,通信双方在进行通信之前,要事先在双方之间建立起一个完整的可以彼此沟通的通道。
    2)、面向连接的服务是按顺序,保证传输质量的,可恢复错误和流量控制的可靠的连接。

  2. 面向无连接

    1)、通信双方不需要事先建立一条通信线路
    2)、无连接服务是不按顺序,不保证传输质量的,不可恢复错误不进行流量控制的不可靠连接。

5、TCP为什么是可靠通信方式

  1. 发送确认:发送端发送数据包,接收端实体对已成功收到的包发回一个相应的确认(ACK)
  2. 失败重传:如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将 会被进行重传。
  3. 数据包校验:TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。

二、Linux抓包分析

1. 建立与百度的连接套接字文件描述符8 端口号80

exec 8<> /dev/tcp/www.baidu.com/80

查看创建的套接字文件描述符

cd /proc/$$/fd

TCP传输过程

2. 监听网卡端口数据包

使用tcpdump抓包

tcpdump -i 网卡

tcpdump -nn 数字的方式显示IP和端口。一个n是ip

tcpdump port xx 抓指定端口的包,xx为端口号

tpcdump -nn -i enp0s3 port 80

3. 发起请求数据包

将请求数据标准输出到socket
echo -e "GET / HTTP1.1\n" 1>&8

4、端口监听数据

TCP传输过程

  1. TCP 三次握手
    TCP传输过程
    第一行 客户端发送请求连接(Seq)
    第二行 客户端接收到服务器的请求确认(Seq/Ack)
    第三行 客户端发送消息接收确认(Ack)
  2. TCP数据传输
    TCP传输过程
    第一行 客户端发送请求体 “GET / HTTP1.1”
    第二行 客户端收到服务器请求确认
    第三行 客户端收到服务器发送的数据包
    第四行 客户端发送接收确认
  3. TCP 四次挥手
    TCP传输过程
    第一行 服务器发送断开连接
    第二行 客户端发送收到
    第三行 客户端发送断开连接请求
    第四行 服务器发送收到

参考:百度百科