TCP/UDP 编程模型

TCP编程模型

TCP/UDP 编程模型
  1. server创建socket套接字
  2. socket套接字–可以理解为文件描述符(file descriptor),UNIX把网络看成文件
/**
 * @param domain domain参数指定了一个通信域;它选择了将被用于通信的协议族。 比如 AF_UNIX AF_INET
 * @param type type of sockfd 通信协议
 *              SOCK_STREAM : 数据流协议    TCP协议
 *              SOCK_DGRAM  : 数据报协议    UDP协议
 * @param protocol 特殊通信类型 一般指定为0
 * @return On success, a file descriptor for the new socket is returned.

 *         On error, -1 is returned, and errno is set appropriately.

 */
int socket(int domain, int type, int protocol);
2. bind 绑定指定的IP 和 Port端口
~~~c
typedef unsigned int socklen_t ;
int bind(int sockfd, const struct sockaddr *addr,socklen_t addrlen);
/*
    bind 绑定的地址,必须是没有被注册过的
    On success, zero is returned.

    On error, -1 is returned, and errno is set appropriately.

*/
  1. listen

  2. 所谓监听服务,服务器可以 使 绑定的套接字变为被动模式 只能用于接收client的connect 请求

  3. *不能用于 read or write
int listen(int sockfd, int backlog);
// backlog 包括连接上的client和在连接的client 最大数量  如何大于这个数量,client会受到ECONNREFUSED;
  1. accept && connect

  2. 3次握手

Client doing Server closed closed SYN_SENT [SYN]Seq=n —> listen

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
  1. recv && send
ssize_t recv(int sockfd, void *buf, size_t len, int flags);
ssize_t send(int sockfd, const void *buf, size_t len, int flags);
  1. close
#include
int close(int fd);  // on success return zero,On error, -1 is returned and errno is set appropriately.

UDP编程模型

TCP/UDP 编程模型
  1. socket
  2. bind
  3. recvfrom && sendto
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
        struct sockaddr *src_addr, socklen_t *addrlen);
ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
        const struct sockaddr *dest_addr, socklen_t addrlen);
  1. close

TCP与UDP的区别

TCP

  • Transmission Control Protocol 传输控制协议
  • 面向连接 (客户端需要调用connect进行连接,三次握手)
  • 可靠 数据传输保证数据的完整性和有序性 数据检验、超时自动重传、丢失重传、滑动窗口机制(保证数据收发一致)应答机制
    A B C D E —> ABCDE
  • 传输效率比较慢
  • 安全性要高

UDP

  • User Datagram Protocol 用户数据报文协议
  • 不连接 (客户端和服务器不会建立连接)
  • 不可靠 数据传输可能导致数据丢失 接收到的数据顺序和发送数据的顺序可能不一致
    A B C —> C A
  • 传输效率比较高
  • 安全性比较低

TCP UDP Transmission Control Protocol 传输控制协议 User Datagram Protocol 用户数据报文协议 面向连接(三次握手四次分手) 无连接 可靠、安全、保证数据有序 不可靠、不安全、数据可能丢失、顺序不确定 延时重传、丢失重传、应答、检验、滑动窗口 没有重传、没有检验、没有应答 复杂、传输效率稍低 简单、高效、传输速度快 适合场合:安全性高、数据量少 适合场景:视频传输、数据量大的情况、对数据安全性要求不高 SOCK_STREAM SOCK_DGRAM socket/bind/listen/accept/recv/send/connect/close socket/bind/recvfrom/sendto/close

Original: https://www.cnblogs.com/FlyingDoG–BoxPiG/p/16689498.html
Author: 打工搬砖日记
Title: TCP/UDP 编程模型

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/574036/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 07_Linux基础-计划任务-备份脚本-变量定义和使用

    07_Linux基础-计划任务-备份脚本-变量定义和使用 一. 计划任务 主要内容:周期性的计划任务crontab/var/spool/cron/ 统一存放计划任务的目录/var/…

    Linux 2023年6月6日
    075
  • Golang 实现 Redis(5): 使用跳表实现 SortedSet

    本文是使用 golang 实现 redis 系列的第五篇, 将介绍如何使用跳表实现有序集合(SortedSet)的相关功能。 跳表(skiplist) 是 Redis 中 Sort…

    Linux 2023年5月28日
    084
  • 深入理解Java类加载机制,再也不用死记硬背了

    谈谈”会”的三个层次 在《说透分布式事务》中,我举例里说明了会与会的差别。对一门语言的学习,这里谈谈我理解的”会”的三个层次: 第一…

    Linux 2023年6月14日
    089
  • windows下使用route添加路由

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月7日
    091
  • 用Windows Terminal替代cmd

    HKEY_CLASSES_ROOT\batfile\shell\open\command,默认项内容 把 "C:\Users\<user>\AppData\L…

    Linux 2023年6月13日
    096
  • Linux的OpenLava配置

    OpenLava OpenLava是基于LSF早期的开源版本发展而来,其 免费、 开源、 兼容IBM LSF的工作负载调度器。当你需要执行某项业务时候(比如跑渲染之类的),当有服务…

    Linux 2023年6月6日
    095
  • 安装及管理文件

    优点: 契合系统兼容性强 如果你可以看懂源代码,修改新增功能 比较自由 缺点: 如果编译出了问题,你看不懂源代码,无法解决 安装过程复杂 没有统一的管理人员 安装过程 程序包编译安…

    Linux 2023年6月6日
    084
  • C++的回调函数

    一、简介 本文主要介绍C++中如何使用回调函数。 二、回调函数介绍 回调函数主要在”回”字,和正常的函数调用方式不太一样。正常的函数由开发者自己定义返回类型…

    Linux 2023年6月7日
    085
  • linux下应用程序界面初始位置及鼠标拖动失效

    故事背景:最近在适配uos系统,客户端程序启动初始位置乱跳,并不是我设置的屏幕中间,鼠标拖动失效,一度怀疑自己的代码有问题,开始我们的探险之路吧。。。 探索之路:后来goolge发…

    Linux 2023年6月13日
    0106
  • 【转】 一条 SQL 的执行过程详解

    MySQL 体系架构 – 连接池组件 1、负责与客户端的通信,是半双工模式,这就意味着某一固定时刻只能由客户端向服务器请求或者服务器向客户端发送数据,而不能同时进行。 …

    Linux 2023年6月13日
    0109
  • Linux连接出现Permission denied (publickey,gssapi-with-mic,password

    新建的机器或者利旧的机器,当再次连接旧机器时出现以下报错: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@…

    Linux 2023年6月13日
    069
  • 鞍点

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    Linux 2023年6月7日
    0126
  • 位图

    例题1 给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个数是否在 这40亿个数中。 首先肯定不能用传统的int数据存储 因为内存不够 40亿的整数大概为1…

    Linux 2023年6月13日
    079
  • Linux快速入门(八)效率工具(SSH)

    (1)Kali(源主机),IP:10.211.55.4/24(2)Ubuntu(目标主机),IP:10.211.55.5/24 OpenSSH用于在远程系统上安全的运行 Shell…

    Linux 2023年6月6日
    073
  • 灵敏度分析简介

    参考文章1 😄参考文章2 😸参考文章3 😃 1. 灵敏度分析: 某一个假定的常量,在现实中不可能完全保持不变,可能发生一定范围的波动。灵敏度分析就是检验这部分波动对结果的影响。 灵…

    Linux 2023年6月14日
    088
  • 离线版centos8安装docker笔记

    嗨嗨哈哈,已经很久没有坐下来胡编乱造一点笔记了,平时云服务器搞惯了,一个命令就安装好了docker了的,但这次生不逢时的新机房就没那么幸运了,有多不逢时超乎想象,不仅仅服务器没有外…

    Linux 2023年5月27日
    0116
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球