TCP/UDP简单理解

TCP和UDP都是网络传输层协议,IP协议负责数据传输。TCP提供可靠的连接,通过三次握手建立,保证数据有序、无丢失;UDP则是无连接的,不保证数据到达。文中介绍了TCP的三次握手过程,并提供了简单的TCP通信代码示例,对比了TCP的流式发送与UDP的无连接特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.IP协议负责把数据从一台计算机通过网络发送到另一台计算机。数据被分割成一小块一小块,然后通过IP包发送出去。由于互联网链路复杂,两台计算机之间经常有多条线路,因此,路由器就负责决定如何把一个IP包转发出去。IP包的特点是按块发送,途径多个路由,但不保证能到达,也不保证顺序到达。

2.TCP属于传输层,建立在IP协议之上,通过三次握手建立可靠的连接,然后对每个IP包编号,确保对方按顺序收到,丢包则重新发送。

3.三次握手:

1.客户端通过ip和端口号向服务器发起连接 发送 syn(同步序列编号) =j connect()函数 阻塞

2.服务器被动收到客户端请求 ,然后发送  ack (确认字符) =j+1 和 syn(同步序列编号) =k    accpet()函数阻塞

3.客户端收到服务器的确认信号后,像服务器也发送一个确认信号:ack=k+1

4.客户端和服务器简单通信代码

(1)客户端

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@author: liuyc
@file: tcp_client.py
@time: 2017/8/19 18:36
@describe:
"""

import socket

# 创建一个socket:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 建立连接:
s.connect(('127.0.0.1', 9999))


# 接收欢迎消息:
print(s.recv(1024).decode('utf-8'))
for data in [b'Michael', b'Tracy', b'Sarah']:
    # 发送数据:
    s.send(data)
    print(s.recv(1024).decode('utf-8'))
s.send(b'exit')
s.close()


(2)服务器

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@author: liuyc
@file: tcp_server.py
@time: 2017/8/19 19:33
@describe: tcp_server
"""

import socket
import threading
import time

# 首先,创建一个基于IPv4和TCP协议的Socket:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 然后 我们要绑定监听的地址和端口
s.bind(('127.0.0.1', 9999))

# 紧接着,调用listen()方法开始监听端口,传入的参数指定等待连接的最大数量:
s.listen(5)
print('Waiting for connection...')


def handle_msg(scok, addr):
    print("accept new connect from addr:{0}".format(addr))
    sock.send(b"Welcome")

    while True:
        data = sock.recv(1024)
        time.sleep(1)
        if not data or data.decode('utf-8') == "exit":
            break
        sock.send(('Hello, %s!' % data.decode('utf-8')).encode('utf-8'))
    s.close()
    print("colse connect from addr:{0}".format(addr))


while True:
    # 接受一个新的连接
    sock, addr = s.accept()
    # 创建线程来处理连接
    t = threading.Thread(target=handle_msg, args=(sock, addr))
    t.start()

2.UDP

TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据。相对TCP,UDP则是面向无连接的协议。

使用UDP协议时,不需要建立连接,只需要知道对方的IP地址和端口号,就可以直接发数据包。但是,能不能到达就不知道了。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值