UDP 和TCP的应用

一、网络模型

(一)C/S 模型

客户端 / 服务器(Client/Server,C/S)模型是一种常见的网络架构。在这种模型中,客户端是主动的角色,向服务器发起请求;服务器端是被动的角色,等待客户端的请求并提供相应的服务。例如,在文件传输、即时通讯等应用中,通常采用 C/S 模型。

(二)B/S 模型

浏览器 / 服务器(Browser/Server,B/S)模型是随着互联网的发展而兴起的一种网络架构。在这种模型中,用户通过浏览器作为客户端,访问服务器上的资源。服务器端负责处理用户的请求,并将结果返回给浏览器。B/S 模型具有跨平台、易于部署和维护等优点,广泛应用于 Web 应用开发

(三)P2P 模型

点对点(Peer-to-Peer,P2P)模型是一种去中心化的网络架构。在这种模型中,各个节点之间直接进行通信,不需要通过中央服务器。P2P 模型具有高效、灵活、可扩展性强等优点,适用于文件共享、分布式计算等应用。

二、实现编程的方式

(一)UDP

  1. 特点
    • 无连接:在数据发送前,不需要建立连接,直接将数据发送到目标地址。
    • 不可靠:不保证数据的可靠传输,可能会出现数据丢失、重复、乱序等情况。
  2. 编程流程(C/S 模型)
    • 客户端:
      • 创建 socket:使用 socket 函数创建一个用于 UDP 通信的套接字。
      • 发送数据:使用 sendto 函数将数据发送到服务器端。
      • 接收数据(可选):使用 recvfrom 函数接收服务器端回发的数据。
    • 服务器端:
      • 创建 socket:使用 socket 函数创建一个用于 UDP 通信的套接字。
      • 绑定地址:使用 bind 函数将套接字与特定的 IP 地址和端口号绑定,以便接收客户端的数据。
      • 接收数据:使用 recvfrom 函数接收客户端发送的数据。
      • 发送数据(可选):使用 sendto 函数将数据回发给客户端。

(二)TCP

  1. 特点
    • 面向连接:在数据传输前,需要建立连接,确保数据传输的可靠性。
    • 可靠传输:通过确认机制、重传机制等保证数据的准确、完整传输。
  2. 编程流程(C/S 模型)
    • 客户端:
      • 建立连接:
        • 创建 socket:使用 socket 函数创建一个用于 TCP 通信的套接字。
        • 可选的 bind 操作:如果需要指定本地的 IP 地址和端口号,可以使用 bind 函数进行绑定。
        • 发起连接请求:使用 connect 函数向服务器端发起连接请求。
      • 通信过程:
        • 使用 read 函数读取服务器端发送的数据。
        • 使用 write 函数向服务器端发送数据。
      • 关闭连接:使用 close 函数关闭套接字,释放资源。
    • 服务器端:
      • 建立连接:
        • 创建 socket:使用 socket 函数创建一个用于 TCP 通信的套接字。
        • 绑定地址:使用 bind 函数将套接字与特定的 IP 地址和端口号绑定。
        • 监听连接请求:使用 listen 函数监听客户端的连接请求。
        • 接受连接请求:使用 accept 函数接受客户端的连接请求,建立连接。
      • 通信过程:
        • 使用 read 函数读取客户端发送的数据。
        • 使用 write 函数向客户端发送数据。
      • 关闭连接:使用 close 函数关闭套接字,释放资源。

三、相关函数详解

(一)recvfrom 函数

recvfrom 函数是用于接收数据的函数,在 UDP 和 TCP 编程中都可能用到。

  • sockfd:套接字文件描述符。
  • buf:保存数据的一块空间的地址。
  • len:这块空间的大小。
  • flags:接收方式的标志,0 表示默认的阻塞方式。
  • src_addr:用来保存发送方的地址信息。
  • addrlen:表示发送方实际的地址信息大小。
    返回值:成功返回接收到的字节数,失败返回 -1。

(二)bind 函数

bind 函数用于将套接字与特定的 IP 地址和端口号绑定。

  • sockfd:之前通过 socket 函数创建的文件描述符,套接字 ID。
  • addr:物理接口的结构体指针,表示该接口的信息。
  • addrlen:参数 addr 的长度。

(三)connect 函数

connect 函数用于客户端向服务器发起连接请求。

  • sockfd:本地 socket 创建的套接子 ID。
  • addr:远程目标主机的地址信息。
  • addrlen:参数 addr 的长度。
    返回值:成功返回 0,失败返回 -1。

四、地址

(一)绑定地址

绑定地址是指将服务器程序所在电脑的 IP 地址与套接字进行绑定。在服务器端,绑定地址是为了让客户端能够准确地找到服务器并与之进行通信。在客户端,如果需要指定特定的本地 IP 地址和端口号进行数据发送,也可以使用 bind 函数进行绑定,但通常情况下客户端可以省略 bind 操作,由默认接口发送数据。

(二)查看地址

在 Linux 系统中,可以使用 ifconfig 命令查看网卡相关信息,其中包含 IP 地址。在 Windows 系统下,可以在命令提示符中使用 ipconfig /all 命令查看 IP 地址等网络配置信息。

 

五、TCP 连接建立与断开

(一)TCP 三次握手建立连接

  1. 客户端向服务器发送连接请求,表示 “我要和你建立连接”。
  2. 服务器收到连接请求后,回复 “好的,可以建立连接”。
  3. 客户端收到服务器的回复后,再次发送确认信息 “好”,此时连接建立成功。

(二)TCP 四次挥手断开连接

  1. 客户端向服务器发送断开连接请求,表示 “我要和你断开连接”。
  2. 服务器收到断开连接请求后,回复 “好的,可以断开”。
  3. 服务器向客户端发送自己的断开连接请求,表示 “我也要断开”。
  4. 客户端收到服务器的断开连接请求后,回复 “好”,此时连接断开。

 

 

  • 24
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值