工程师进阶:深入TCP协议

可能很多人对TCP协议都不陌生,网上也有很多资料关于TCP协议的讲解说明,但大多都比较片面,不能很全面的说明它的来龙去脉 。小编也是整理了很久,找了很多资料,加上自己的理解写出了这篇文章,希望能帮助大伙更好的去理解 。
本篇文章内容比较多,也有比较多的生词,大伙可能需要多阅读几遍外加自己的学习才能更好的去理解 。

工程师进阶:深入TCP协议

文章插图
 
TCP/IP协议的起源在世界上各地,各种各样的电脑运行着各自不同的操作系统为大家服务,这些电脑在表达同一种信息的时候所使用的方法是千差万别 。就好像世界各地的口音和语言都是千差万别的,这会让他们无法很好的合作 。计算机使用者意识到,计算机只是单兵作战并不会发挥太大的作用 。只有把它们联合起来,电脑才会发挥出它最大的潜力 。于是人们就想方设法的用电线把电脑连接到了一起 。
但是简单的连到一起是远远不够的,就好像语言不同的两个人互相见了面,完全不能交流信息 。因而他们需要定义一些共通的东西来进行交流,TCP/IP就是为此而生 。TCP/IP不是一个协议,而是一个协议族的统称 。里面包括了IP协议,IMCP协议,TCP协议,以及我们更加熟悉的http、ftp、pop3协议等等 。电脑有了这些,就好像学会了外语一样,就可以和其他的计算机终端做自由的交流了 。
TCP/IP协议分层
TCP/IP协议族按照层次由上到下,层层包装 。
工程师进阶:深入TCP协议

文章插图
 
应用层:
向用户提供一组常用的应用程序,比如电子邮件、文件传输访问、远程登录等 。远程登录TELNET使用TELNET协议提供在网络其它主机上注册的接口 。TELNET会话提供了基于字符的虚拟终端 。文件传输访问FTP使用FTP协议来提供网络内机器间的文件拷贝功能 。
传输层:
提供应用程序间的通信 。其功能包括:一、格式化信息流;二、提供可靠传输 。为实现后者,传输层协议规定接收端必须发回确认,并且假如分组丢失,必须重新发送 。
网络层 :
负责相邻计算机之间的通信 。其功能包括三方面 。
一、处理来自传输层的分组发送请求,收到请求后,将分组装入IP数据报,填充报头,选择去往信宿机的路径,然后将数据报发往适当的网络接口 。
二、处理输入数据报:首先检查其合法性,然后进行寻径--假如该数据报已到达信宿机,则去掉报头,将剩下部分交给适当的传输协议;假如该数据报尚未到达信宿,则转发该数据报 。
三、处理路径、流控、拥塞等问题 。
网络接口层:
这是TCP/IP软件的最低层,负责接收IP数据报并通过网络发送之,或者从网络上接收物理帧,抽出IP数据报,交给IP层 。
TCP协议的头部信息
工程师进阶:深入TCP协议

文章插图
 
对于 TCP 头部来说,以下几个字段是很重要的
  • Sequence number,这个序号保证了 TCP 传输的报文都是有序的,对端可以通过序号顺序的拼接报文
  • Acknowledgement Number,这个序号表示数据接收端期望接收的下一个字节的编号是多少,同时也表示上一个序号的数据已经收到
  • Window Size,窗口大小,表示还能接收多少字节的数据,用于流量控制
  • 标识符
  • URG=1:该字段为一表示本数据报的数据部分包含紧急信息,是一个高优先级数据报文,此时紧急指针有效 。紧急数据一定位于当前数据包数据部分的最前面,紧急指针标明了紧急数据的尾部 。
  • ACK=1:该字段为一表示确认号字段有效 。此外,TCP 还规定在连接建立后传送的所有报文段都必须把 ACK 置为一 。
  • PSH=1:该字段为一表示接收端应该立即将数据 push 给应用层,而不是等到缓冲区满后再提交 。
  • RST=1:该字段为一表示当前 TCP 连接出现严重问题,可能需要重新建立 TCP 连接,也可以用于拒绝非法的报文段和拒绝连接请求 。
  • SYN=1:当SYN=1,ACK=0时,表示当前报文段是一个连接请求报文 。当SYN=1,ACK=1时,表示当前报文段是一个同意建立连接的应答报文 。
  • FIN=1:该字段为一表示此报文段是一个释放连接的请求报文 。
TCP协议的状态机TCP 的状态机是很复杂的,并且与建立断开连接时的握手息息相关,接下来就来详细描述下两种握手 。
工程师进阶:深入TCP协议

文章插图


推荐阅读