一、概述
1、什么是TCP
传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
2、什么是面向连接
面向连接的服务就是通信双方在通信时,要事先建立一条通信线路,其过程有建立连接、使用连接和释放连接三个过程。TCP,三次握手建立连接,数据传输使用连接,四次挥手释放连接。
3、什么是面向无连接
面向无连接是通信技术之一。是指通信双方不需要事先建立一条通信线路,而是把每个带有目的地址的包(报文分组)送到线路上,由系统自主选定路线进行传输。
4、面向连接与面向无连接的区别
-
面向连接
1)、面向连接,通信双方在进行通信之前,要事先在双方之间建立起一个完整的可以彼此沟通的通道。
2)、面向连接的服务是按顺序,保证传输质量的,可恢复错误和流量控制的可靠的连接。 -
面向无连接
1)、通信双方不需要事先建立一条通信线路
2)、无连接服务是不按顺序,不保证传输质量的,不可恢复错误不进行流量控制的不可靠连接。
5、TCP为什么是可靠通信方式
- 发送确认:发送端发送数据包,接收端实体对已成功收到的包发回一个相应的确认(ACK)
- 失败重传:如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将 会被进行重传。
- 数据包校验:TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。
二、Linux抓包分析
1. 建立与百度的连接套接字文件描述符8 端口号80
exec 8<> /dev/tcp/www.baidu.com/80
查看创建的套接字文件描述符
cd /proc/$$/fd
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 三次握手
第一行 客户端发送请求连接(Seq)
第二行 客户端接收到服务器的请求确认(Seq/Ack)
第三行 客户端发送消息接收确认(Ack) - TCP数据传输
第一行 客户端发送请求体 “GET / HTTP1.1”
第二行 客户端收到服务器请求确认
第三行 客户端收到服务器发送的数据包
第四行 客户端发送接收确认 - TCP 四次挥手
第一行 服务器发送断开连接
第二行 客户端发送收到
第三行 客户端发送断开连接请求
第四行 服务器发送收到
参考:百度百科