天天看点

【Linux网络编程】TCP编程

00. 目录

01. tcp概述

02. tcp特点

03. tcp中cs架构

04. tcp相关函数

05. tcp服务端示例

06. tcp客户端示例

07. 附录

传输控制协议(tcp,transmission control protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由ietf的rfc 793定义。

tcp旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠tcp提供可靠的通信服务。tcp假设它可以从较低级别的协议获得简单的,可能不可靠的数据报服务。 原则上,tcp应该能够在从硬线连接到分组交换或电路交换网络的各种通信系统之上操作。

tcp是一种面向广域网的通信协议,目的是在跨越多个网络通信时,为两个通信端点之间提供一条具有下列特点的通信方式。

(1)基于流的方式;

(2)面向连接;

(3)可靠通信方式;

(4)在网络状况不佳的时候尽量降低系统由于重传带来的带宽开销;

(5)通信连接维护是面向通信的两个端点的,而不考虑中间网段和节点。

为满足tcp协议的这些特点,tcp协议做了如下的规定:

①数据分片:在发送端对用户数据进行分片,在接收端进行重组,由tcp确定分片的大小并控制分片和重组;

②到达确认:接收端接收到分片数据时,根据分片数据序号向发送端发送一个确认;

③超时重发:发送方在发送分片时启动超时定时器,如果在定时器超时之后没有收到相应的确认,重发分片;

④滑动窗口:tcp连接每一方的接收缓冲空间大小都固定,接收端只允许另一端发送接收端缓冲区所能接纳的数据,tcp在滑动窗口的基础上提供流量控制,防止较快主机致使较慢主机的缓冲区溢出;

⑤失序处理:作为ip数据报来传输的tcp分片到达时可能会失序,tcp将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层;

⑥重复处理:作为ip数据报来传输的tcp分片会发生重复,tcp的接收端必须丢弃重复的数据;

⑦数据校验:tcp将保持它首部和数据的检验和,这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到分片的检验和有差错,tcp将丢弃这个分片,并不确认收到此报文段导致对端超时并重发。

【Linux网络编程】TCP编程

基于 tcp 的网络编程开发分为服务器端和客户端两部分,常见的核心步骤和流程如下:

【Linux网络编程】TCP编程

4.1 socket函数

4.2 bind函数

4.3 listen函数

4.4 accept函数

4.5 connect函数

4.6 recv函数

4.7 send函数

server.c

client.c

7.1 【linux】一步一步学linux网络编程教程汇总

7.2 百度百科 tcp 传输控制协议