TCP协议简介

TCP协议实现原理

TCP协议是端到端的传输控制协议,之所以是“端到端”的协议,是因为”路由“是由IP协议负责的,TCP协议负责为两个通信端点提供可靠性保证,这个可靠性不是指一个端点发送的数据,另一个端点肯定能收到(这显然是不可能的),而是指数据的可靠投递或者故障的可靠通知。

TCP的可靠性通过以下方式来保证:

  1. 超时重传:TCP每发送出一个报文段后,都会启动一个定时器,对目的端传回的确认信息进行确认计时,超时后便重传。
  2. 确认信号:当TCP收到一个来自TCP的报文段后,便会发送回一个确认信号。
  3. 检验和:TCP将始终保持首部和数据的检验和,如果收到的报文段的检验和有差错,便将其丢弃,希望发送端超时重传。
  4. 重新排序:由于IP数据报的达到可能失序,因此TCP将会数据进行重新排序,以正确的顺序交给应用层。
  5. 丢弃重复:由于IP数据报有可能重复,因此TCP将会丢弃重复的数据
  6. 流量控制:TCP连接的两端都有固定大小的缓冲区空间,TCP接受端只允许对端发送本端缓冲区能容纳的数据。TCP提供流量控制。在双方进行交互时,会彼此通知自己目前接收缓冲区最多可以接收的数据量(通告窗口),以此确保发送方发送的数据不会溢出接收缓冲区。

TCP数据包主要包括:

  1. SYN包:请求建立连接的数据包
  2. ACK包:回应数据包,表示接收到了对方的某个数据包
  3. PSH包:正常数据包
  4. FIN包:通讯结束包
  5. RST包: 重置连接
  6. URG包: 紧急指针

导致TCP协议发送RST包的原因:

  1. SYN 数据段指定的目的端口处没有接收进程在等待。
  2. TCP协议想放弃一个已经存在的连接。
  3. TCP接收到一个数据段,但是这个数据段所标识的连接不存在。接收到RST数据段的TCP协议立即将这条连接非正常地断开,并向应用程序报告错误。

一次完成的TCP通讯包括:建立连接、数据传输、关闭连接

建立连接(三次握手):

  1. 客户端通过向服务器端发送一个SYN来建立一个主动打开,作为三路握手的一部分。
  2. 服务器端应当为一个合法的SYN回送一个SYN/ACK。
  3. 最后,客户端再发送一个ACK。这样就完成了三路握手,并进入了连接建立状态。

数据传输:

  1. 发送数据端传输PSH数据包
  2. 接收数据端回复ACK数据包

关闭连接(四次挥手):

  1. 一端主动关闭连接。向另一端发送FIN包。
  2. 接收到FIN包的另一端回应一个ACK数据包。
  3. 另一端发送一个FIN包。
  4. 接收到FIN包的原发送方发送ACK对它进行确认。

TCP与UDP的区别:

  1. TCP面向连接;UDP是无连接的,即发送数据之前不需要建立连接。
  2. TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP不保证可靠交付。
  3. TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的,没有阻塞控制,因此网络出现拥塞不会使源主机的发送速率降低。
  4. 每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信。
  5. TCP首部开销20字节;UDP的首部开销小,只有8字节。
  6. TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道。

基于 linux 下网络通信套接字 TCP 的 socket 编程

  1. TCP/IP 通信是基于服务器/客户端的模式来实现的,首先是服务器端调用 socket 函数创建一个套接字,然后调用 bind 绑定函数,绑定函数主要是设置通信时使用哪种地址族(IPv4,IPv6 等),使用的端口号。然后调用listen 函数来监听客户端的连接请求。
  2. 客户端首先调用 socket 函数创建一个套接字,然后调用connect 函数连接服务器,这时服务器端的 listen 函数监听到客户端的连接请求就会调用accept 函数去接受请求,这样就建立好了连接。之后双方就可以调用 read/write 函数收发数据了,在完成通信以后服务器和客户端调用 close 函数关闭创建的套接字。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值