tcp 与udp 的区别

1.TCP和UDP对比

TCP(Transmission Control Protocol)可靠的、面向连接的协议(eg:打电话)、传输效率低全双工通信(发送缓存&接收缓存)、面向字节流。使用TCP的应用:Web浏览器;文件传输程序。

UDP(User Datagram Protocol)不可靠的、无连接的服务,传输效率高(发送前时延小),一对一、一对多、多对一、多对多、面向报文(数据包),尽最大努力服务,无拥塞控制。使用UDP的应用:域名系统 (DNS);视频流;IP语音(VoIP)。

TCP和UDP下socket差异对比图:

2.TCP详解

服务端示例

 1 import socket
 2 sk = socket.socket()
 3 sk.bind(('127.0.0.1',8898))  #把地址绑定到套接字
 4 sk.listen()          #监听链接
 5 conn,addr = sk.accept() #接受客户端链接
 6 ret = conn.recv(1024)  #接收客户端信息
 7 print(ret)       #打印客户端信息
 8 conn.send(b'hi')        #向客户端发送信息
 9 conn.close()       #关闭客户端套接字
10 sk.close()        #关闭服务器套接字

客户端示例

import socket
sk = socket.socket()           # 创建客户套接字
sk.connect(('127.0.0.1',8898))    # 尝试连接服务器
sk.send(b'hello!')
ret = sk.recv(1024)         # 对话(发送/接收)
print(ret)
sk.close()            # 关闭客户套接字

TCP三次握手流程:

一次挥手:客户端发送连接请求报文SYN = 1 ,seq=x

二次挥手:服务端发送确认报文,同时请求连接客户端 SYN =1, ACK = 1, ack = x+1, seq = y

三次挥手:客户端发送确认报文: ACK = 1,ack = y+1, seq = x+1,连接建立成功

TCP断开连接的四次挥手

一次挥手: 客户端向服务器发送连接释放报文,并且停止发送数据

二次挥手: 服务器发出确认报文,同意连接释放

客户端等待服务器发出连接释放报文

三次挥手:服务器向客户端发送连接释放报文,并且停止发送数据

四次挥手: 客户端发出确认报文, SYN = 1,同时开启   时间等待计时器,等待2倍最长报文段寿命,

    若服务端没接收到客户端发回的报文,则服务端率先进入closed状态,若服务端没有接收到客户端发来的确认报文,

    ,则一段时间后服务端会超时重发(即重新进行步骤3和4)

 为什么建立连接需要3次握手

3 udp实例

服务端示例

import socket
udp_sk = socket.socket(type=socket.SOCK_DGRAM)   #创建一个服务器的套接字
udp_sk.bind(('127.0.0.1',9000))        #绑定服务器套接字
msg,addr = udp_sk.recvfrom(1024)
print(msg)
udp_sk.sendto(b'hi',addr)                 # 对话(接收与发送)
udp_sk.close()                         # 关闭服务器套接字

客户端示例

import socket
ip_port=('127.0.0.1',9000)
udp_sk=socket.socket(type=socket.SOCK_DGRAM)
udp_sk.sendto(b'hello',ip_port)
back_msg,addr=udp_sk.recvfrom(1024)
print(back_msg.decode('utf-8'),addr)

猜你喜欢

转载自www.cnblogs.com/Arvin2018/p/10009400.html