tcp总结与简单实现

1、TCP简介安全

1. TCP介绍服务器

 1)TCP协议,传输控制协议(Transmission Control Protocol,缩写为 TCP)是一种面向链接的、可靠的、基于字节流的传输层通讯协议
 2)tcp通讯的三个步骤
    建立链接、数据传输、终止链接网络

2. TCP特色
 
 1)面向链接
 1. 通讯双方必须先创建链接才能进行数据的传输
 2. 双方间的数据传输均可以经过这个链接进行,完成数据交换后,双方断开此链接,以释放系统资源
 3. 链接是一对一的,所以TCP不适用于广播的应用程序,基于广播的应用程序请使用UDP协议socket

 2)可靠传输,经过一套机制来实现可靠传输
 1. 发送应答机制
 2. 超时重传
 3. 错误校验
 4. 流量控制-阻塞管理tcp

 3)基于字节流的:以字节流的形式传递给目标主机spa

3. TCP与UDP的不一样点
 - 面向链接
 - 有序数据传输
 - 重发丢失的数据包
 - 舍弃重复的数据包
 - 无差错的数据传输
 - 阻塞/流量控制code

4.tcp与upd使用场景:视频

 1) udp:  广播数据时, 用udp   当对网络通信质量要求不高的时候,要求网络通信速度能尽可能的快,这时就可使用UDP ,好比QQ语音,QQ视频
 2) tcp: tcp比udp更安全,稳定,可是速度没有udp那么快,使用场景很是多;
 例如: http传输,文件传输,要求比较高的数据传输都会用tcp,目前大部分的传输都是基于tcp协议传输server

5. UDP与TCP的通讯模型 
  
 1) udp通讯模型
 udp通讯模型中,在通讯开始以前,不须要创建相关的链接,只须要发送数据便可,相似于生活中,"写信"",没有严格的客户端和服务端之分
       
 2) tcp通讯模型
 tcp通讯模型中,在通讯开始以前,必定要先创建相关的链接,才能发送数据,相似于生活中,"打电话"",tcp有严格的客户端与服务端之分对象

2、TCP网络程序-客户端

1. TCP客户端实现流程
 tcp流程步骤:
 1)建立tcp socket客户端对象
 2)与服务端创建链接
 3)收发数据(读写数据)
 4)关闭链接

2.示例代码:

  import socket

    # 建立socket
    tcp_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 目的信息
    server_ip = input("请输入服务器ip:")
    server_port = int(input("请输入服务器port:"))

    # 链接服务器
    tcp_client_socket.connect((server_ip, server_port))

    # 提示用户输入数据
    send_data = input("请输入要发送的数据:")

    tcp_client_socket.send(send_data.encode("utf-8"))

    # 接收对方发送过来的数据,最大接收1024个字节
    recv_data = tcp_client_socket.recv(1024)
    print('接收到的数据为:', recvData.decode('gbk'))

    # 关闭套接字
    tcp_client_socket.close()

3、TCP网络程序-服务端

1. TCP服务端建立及实现流程 
 tcp流程步骤:
 1)建立一个server_socket ,用于监听客户端的请求
 2)绑定端口
 3)server_socket开启监听listen,server_socket由主动模拟模式变为被动链接模式
 4)等待接收客户端的链接请求,一有客户端的链接请求,当即接受,而且建立一个与客户端socket对接的socket,新建立的socket用来与客户端的socket进行通讯
 5)使用新建立的socket与客户端的socket进行通讯(收发数据)
 6)关闭新建立的socket,该socket关闭后, 再也不与当前客户端通讯,结束与当前客户端的通讯
 7)关闭server_socket,该server_socket关闭后,再也不接收新的客户端请求

2.示例代码:

  import socket

    # 建立socket
    tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 本地信息
    address = ('', 8090)    # 元组

    # 绑定端口,tcp服务端必须绑定端口
    tcp_server_socket.bind(address)

    # 使用socket建立的套接字默认的属性是主动的,使用listen将其变为被动的,这样就能够接收别人的链接请求
    tcp_server_socket.listen(5) # backlog=5 表示积压的客户端链接请求最多5个, 超过5个,则拒绝链接

    # 若是有新的客户端来链接服务器,那么就产生一个新的套接字专门为这个客户端服务
    # client_socket用来为这个客户端服务
    # tcp_server_socket就能够省下来专门等待其余新客户端的链接
    client_socket, client_addr = tcp_server_socket.accept()

    # 接收对方发送过来的数据
    recv_data = client_socket.recv(1024)  # 最多接收1024个字节
    print('接收到的数据为:', recv_data.decode('gbk'))

    # 发送一些数据到客户端
    client_socket.send("thank you !".encode('gbk'))

    # 关闭为这个客户端服务的套接字,只要关闭了,就意味着为不能再为这个客户端服务了,若是还须要服务,只能再次从新链接
    client_socket.close()
相关文章
相关标签/搜索