前言
TCP 把连接作为最基本的对象,每一条 TCP 连接都有两个端点,这种端点我们叫作套接字(socket),它的定义为端口号拼接到 IP 地址即构成了套接字,例如,若 IP 地址为 192.3.4.16 而端口号为 80,那么得到的套接字为`192.3.4.16:80`。IP 协议虽然能把数据报文送到目的主机,但是并没有交付给主机的具体应用进程。而端到端的通信才是应用进程之间的通信。TCP 报文是 TCP 层传输的数据单元,也叫报文段。TCP 报文的格式如下图所示:
我们从 TCP 的报文格式中能看到 6 个**标志位**:URG ACK PSH RST SYN FIN,每一个标志位表示一个控制功能。
-
**URG:**紧急指针标志,为1时表示紧急指针有效,为0则忽略紧急指针。
-
**ACK:**确认序号标志,为1时表示确认号有效,为0表示报文中不含确认信息,忽略确认号字段。
-
**PSH:**push标志,为1表示是带有push标志的数据,指示接收方在接收到该报文段以后,应尽快将这个报文段交给应用程序,而不是在缓冲区排队。
-
**RST:**重置连接标志,用于重置由于主机崩溃或其他原因而出现错误的连接。或者用于拒绝非法的报文段和拒绝连接请求。
-
**SYN:**同步序号,用于建立连接过程,在连接请求中,SYN=1和ACK=0表示该数据段没有使用捎带的确认域,而连接应答捎带一个确认,即SYN=1和ACK=1。
-
**FIN:**finish标志,用于释放连接,为1时表示发送方已经没有数据发送了,即关闭本方数据流。
TCP 的连接和断开的过程和这几个标志位有关。
1. 建立连接
TCP 的三次握手,意思就是建立连接的时候客户端与服务器之间需要三次数据包的交流。
-
客户端发送给服务器一个请求连接数据包,即发送了一个指向服务器目标端口的一个 SYN 位为 1 的TCP 报文。
-
服务器接收到客户端的连接请求之后,会回应一个 SYN 位为 1 的TCP 报文,表示同意连接。并且,会把 ACK 位也置 1 表示确认收到上次消息。
-
客户端接收到服务器的同意连接的数据包之后,还要回复一个 ACK 为 1 的 TCP 报文,表示确认收到。
如下图所示,这就是 TCP 的三次握手:
2. 数据传输
TCP 以段为单位发送数据
-
在建立 TCP 连接的同时,也可以确定发送数据包的单位,我们也可以称其为“最大消息长度”(MSS:Maximum Segment Size)。最理想的情况是,最大消息长度正好是 IP 中不会被分片处理的最大数据长度。
-
TCP 在传输大量数据时,是以 MSS 的大小将数据进行分割发送的。进行重发时也是以 MSS 为单位。
-
MSS 是在三次握手的时候,在两端主机之间被计算得出。两端的主机在发出建立连接的请求时,会在 TCP 首部中写入 MSS 选项,告诉对方自己的接口能够适应的 MSS 的大小(为附加 MSS 选项,TCP首部将不再是20字节,而是 4 字节的整数倍)。然后会在两者之间选择一个较小的值投入使用(在建立连接时,如果某一方的 MSS 选项被省略,可以选为 IP 包的长度不超过 576 字节的值(IP 首部 20 字节,TCP 首部 20 字节,MSS 536 字节))。
例如客户端发送一段 3500 长度的数据到服务端,假设确定的 MSS 长度为1000,数据传输的过程如下所示:
3. 断开连接
TCP 的四次挥手,意思就是释放连接的时候客户端与服务器之间需要四次数据包的交流。
-
客户端发送给服务器一个请求释放连接的数据包,即发送了一个指向服务器目标端口的一个 FIN 位为 1 的TCP 报文,表示客户端没有数据要发送了,但是仍然可以接收数据;并且 ACK 位也为 1,表示对上次传输数据结果的确认。并且之后处去等待状态,等待服务器的两次回应。
-
服务器接收到客户端的释放连接请求之后,会先回应一个 ACK 位为 1 的报文,表示确认收到。但是,这时服务器可能还有数据没有发送完成,继续发送数据。
-
服务器发送完数据之后,发送一个 FIN 为 1 的 TCP 报文,表示我也没有要发送的数据了,你可以释放连接了。当然 ACK 位仍然为 1 。
-
客户端接收到服务器的同意释放连接的数据包之后,回复一个 ACK 为 1 的 TCP 报文,表示确认收到。
如下图所示,这就是 TCP 的四次挥手:
4. 抓包分析
利用 wireshark 工具抓包分析可以很清晰的看到这两个流程。
-
打开 wireshark 软件 开启抓包,过滤规则设置为 tcp 。
-
开发板连接上网络后,运行 samples 里面的 tcp client 例程,
这样就可以很方便的看到 TCP 的三次握手与四次挥手的全过程,如下图所示:
数据传输的过程需要在以后用到 http client 传输较大数据的时候才能更好的看出来。
题外话
今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。
网络安全学习资源分享:
最后给大家分享我自己学习的一份全套的网络安全学习资料,希望对想学习 网络安全的小伙伴们有帮助!
零基础入门
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
【点击领取】网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!
1.学习路线图
攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去接私活完全没有问题。
2.视频教程
网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。【点击领取视频教程】
技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取技术文档】
(都打包成一块的了,不能一一展开,总共300多集)
3.技术文档和电子书
技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本【点击领取书籍】
4.工具包、面试题和源码
“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。
最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。
这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。
参考解析:深信服官网、奇安信官网、Freebuf、csdn等
内容特点:条理清晰,含图像化表示更加易懂。
内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…
因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取
CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享