一、tcp协议
传输控制协议TCP(Transmission Control Protocol)提供可靠的、面向连接的协议(eg:打电话)、传输效率低、全双工通信(发送缓存&接收缓存)、面向字节流。使用TCP的应用:Web浏览器;电子邮件、文件传输程序。
他的报文格式是:
![](https://i-blog.csdnimg.cn/blog_migrate/28387c44745f5b3ca7ae0fcd36ca38c6.jpeg)
- 源端口(2字节):发送端应用程序的端口号,与源IP地址确定一个唯一地址
- 目的端口(2字节):接收端计算机应用程序的端口号,与目的IP地址确定唯一的地址
- 序号(4字节):TCP是面向字节流传输的,他为每一个字节编了一个序号,该报文段中序号为传输数据第一个字节的序号,例如:一个报文端的数据部分大小为100个字节,他的序号为400,那么下一次报文段的序号就为500
- 确认号(4个字节):指明了下一个期待接收的字节序号,表明该序号之前的所有字节都正确接收到了,只有当ACK为1的时候确认号才有效。B已经收到编号为700的数据,那么它的确认号就是701。
- 数据偏移/首部长度(4个字节): 用来表示TCP报文数据段的起始处和TCP报文起始处的距离,即TCP报文首部的长度,由于首部含有可选项,所以TCP报头长度是不确定的。
- 保留:为了将来定义新的用途保留,现在一般都置为0
- URG紧急控制位:与紧急指针配合使用,当URG为1的时候,就是通知系统这个报文段有紧急数据,需要优先传输。
- ACK确认控制位:当他为1的时候,确认号字段才有效,TCP规定,在连接建立后,所有ACK都应该置为1
- PSH推送控制位:当报文段的psh为1的时候,接收方接到该报文段,就立刻将他交付给接收应用进程,而不是等缓存已满的时候再交付。
- RST复位控制位:当报文段的RST为1的时候,说明该TCP连接出现错误,必须释放连接,并重新建立连接。
- SYN同步控制位:在连接建立时用来同步序列号,当SYN=1,ACK=0时说明这是一个连接请求报文段,如果对方同意建立连接则应该在响应的报文段中将SYN=1,ACK=1,表示接受请求