网络编程
TCP简介
TCP协议,传输控制协议(Transmission Control Prorocol)是一种面向连接的。可靠的、基于字节流的传输层通信协议
TCP通讯需要经过创建连接,传输数据,终止连接三个步骤
TCP特点
面向连接
通信双方必须先建立连接才能进行数据的传输,双方都必须为该连接分配必要的系统内核资源,以管理连接的状态和连接上的传输。
双方间的数据传输都可以通过这个连接进行。
完成数据交换后,双方断开此连接,以释放系统资源。
这种连接是一对一的
因此TCP不适用于广播的应用程序,基于广播的应用程序请使用UDP协议。
可靠传输
1)TCP采用发送应答机制
TCP发送的每个报文段都必须得到接收方的应答才认为这个TCP报文段传输成功
2)超时重传
发送端发出一个报文段之后就启动定时器,如果在定时时间内没有收到应答就重新发送这个报文段。
TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。
3)错误校验
TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。
- 流量控制和阻塞管理
流量控制用来避免主机发送得过快而使接收方来不及完全收下。
TCP和UDP的不同点
- 面向连接
- 有序的数据传输
- 重发丢失的数据包
- 无差错的数据传输(舍弃重复的数据包,舍弃重复的数据包)
- 阻塞/流量控制
可以通过这个连接进行。
完成数据交换后,双方断开此连接,以释放系统资源。
这种连接是一对一的
因此TCP不适用于广播的应用程序,基于广播的应用程序请使用UDP协议。
可靠传输
1)TCP采用发送应答机制
TCP发送的每个报文段都必须得到接收方的应答才认为这个TCP报文段传输成功
2)超时重传
发送端发出一个报文段之后就启动定时器,如果在定时时间内没有收到应答就重新发送这个报文段。
TCP为了保证不发生丢包,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的包发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据包就被假设为已丢失将会被进行重传。
3)错误校验
TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算校验和。
- 流量控制和阻塞管理
流量控制用来避免主机发送得过快而使接收方来不及完全收下。
TCP和UDP的不同点
-
面向连接
-
有序的数据传输
-
重发丢失的数据包
-
无差错的数据传输(舍弃重复的数据包,舍弃重复的数据包)
-
阻塞/流量控制
-
TCP通信模型,类似’打电话’,在通信开始前一定要先建立相关连接,才能发送数据;而UDP通信模型,类似’写信’,不需要建立相关连接,只需要发送数据即可
在Python中,用TCP进行socket编程也比较简单 -
客户端
- 要主动连接服务器的IP和指定端口
-
服务器
- 监听指定端口
- 对于每一个新的连接,创建一个线程或者进程
通常,服务器程序可以无限运行下去。