TCP协议

TCP:

特性:面向连接的、可靠的、字节流服务  全双工模式

使用TCP协议通信的双方必须先建立连接,才能开始数据的读写,双方都必须为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。

TCP协议的这种连接是一对一的。因此目标是个多个主机地址的应用程序不能使用TCP服务。

字节流服务的概念:发送端执行的写操作次数和接收端执行的读操作次数之间没有任何数量关系,也就是说当发送端应用程序连续执行多次写操作时,TCP模块先将这些数据放入TCP发送缓冲区中,当TCP模块真正开始发送数据时发送缓冲区中这些等待发送的数据可能会被封装成一个或者多个TCP报文发出,因此说TCP模块发送出的TCP报文段个数和应用程序执行的写操作数之间没有固定的数量关系。

TCP是可靠的原因主要有:

1、TCP协议采用发送应答机制也就是说发送端发送的每个TCP报文段都必须得到接收方的应答,才认为这个TCP报文段传输成功

2、TCP协议采用超时重传机制,就是说发送端在发送一个TCP报文段之后启动一个定时器,如果一定时间内没有收到接收方的应答,他就会重新发送该报文段。

TCP的头部结构:

 

16位端口号:告知主机该报文段来自哪里以及传给哪个上层协议或应用程序

32位序号:一次TCP通信(从TCP连接建立到断开)过程中某一个传输方向上的字节流的每个字节的编号。

32位确认号:用作对另一方发送来的TCP报文段的响应,其值是收到的TCP报文段的序号值加1.

4位头部长度:标识该TCP头部有多少个32bit字

6位标志位

URG标志:表示紧急指针是否有效

ACK标志:表示确认号是否有效,ACK携带的报文段我们称为确认报文段

PSH标志:提示接收端应用程序应该立即从TCP接收缓冲区中读取数据,为接收后续数据腾出空间。

RST标志:表示要求对方重新建立连接,携带RST标志的TCP报文段称为复位报文段。

SYN标志:表示请求建立一个连接,携带SYN标志的报文段称为同步报文段

FIN标志:表示通知对方本段要关闭连接,携带FIN标志的TCP报文段为结束报文段。

TCP 编程流程:

     服务端:socket()   bind()   listen()   accept()   recv()  send()   close()

     客户端:socket()  connect()  send()   recv()  close()

TCP的连接与关闭

 

报文段1:客户端向服务器发送连接请求,发送SYN报文段携带的序列号给服务端

报文段2:服务器同意与客户端建立连接,同时发送自己SYN报文段携带的序列号给客户端,并对客户端发来的同步报文段进行确认发送ACK确认号,即第一个同步报文段值+1。

报文段3:客户端收到服务器发送的确认号以及自己的SYN序列号之后,对服务器发送ACK报文段确认号进行确认。

报文段4是关闭连接的过程,即客户端向服务器发送要关闭连接的请求

报文段5是服务器向客户端发送来确认该结束报文。

报文段6是服务器紧接着向客户端发送自己的结束报文

报文段7是客户端收到服务端发来的结束报文给予确认。

在关闭连接的过程中报文段5是可以省略的因为结束报文段6也携带了该确认信息TC

 

TCP连接与关闭的状态转换图

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值