当前位置: 首页 > news >正文

网络编程之TCP协议

传输层协议:UDP和TCP的区别

UDP:用户数据报协议

1.面向数据报

2.无连接

3.不安全,不可靠(尽最大努力交付)

4.机制简单,传输效率高

TCP:传输控制协议

1.面向数据流(流式套接字)

2.建立连接

3.安全可靠的传输协议

        应用场景:HTTP,MQTT,FTP

TCP的传输过程 

        三次握手:TCP建立连接时,需要进行三次握手,确保收发数据前,都已准备就绪

假设客户端和服务端通信:

1.第一次握手:客户端給服务端一个SYN

2.第二次握手:服务端给客户端一个ACK+SYN

3.第三次握手:客户端给服务端一个ACK

        四次挥手:TCP断开连接时,需要进行四次挥手,从而确保通信双方都已收发数据结束。

 TCP编程

        C/S模型:

 客户端的函数接口:

 socket():创建套接字

.socket 
      套接字:通信对象的抽象, 网络通信的端口,一个通信链的句柄。
      

   int socket(int domain, int type, int protocol);
      功能:
        创建一个用来通信的接口(文件描述符)
      参数:
        domain:通信的协议族(AF_INET:IPv4协议族)
        type:
            SOCK_DGRAM:数据报套接字    (UDP使用此类型)
            SOCK_STEAM:流式套接字    (TCP使用此类型)
            SOCK_RAW:原始套接字
        protocol:
            默认传0 按照协议的默认属性创建
      返回值:
        成功返回用来进行通信的文件描述符
        失败返回-1 

 connect()

connect
      int connect(int sockfd, const struct sockaddr *addr,
                   socklen_t addrlen);
      功能:
        发送三次握手链接请求
      参数:
        sockfd:套接字文件描述符
        addr:存放目的地址空间首地址
        addrlen:目的地址长度
      返回值:
        成功返回0 
        失败返回-1 

send()

send
      ssize_t send(int sockfd, const void *buf, size_t len, int flags);
      功能:
        发送数据
      参数:
        sockfd:套接字文件描述符
        buf:存放数据空间首地址
        len:数据长度
        flag:属性默认为0 
      返回值:
        成功返回发送字节数
        失败返回-1 

recv() 

recv
      ssize_t recv(int sockfd, void *buf, size_t len, int flags);
      功能:
        接收数据 
      参数:
        sockfd:套接字文件描述符
        buf:存放数据空间首地址 
        len:最多接收数据长度 
        flags:接收属性默认为0 
      返回值:
        成功返回实际接收字节数
        失败返回-1 
        连接断开返回0 

服务端所要的函数接口 

bind() :绑定IP地址和端口号

5.bind
      int bind(int sockfd, const struct sockaddr *addr,
                socklen_t addrlen);
      功能:将一个套接字与IP地址和端口号绑定(只能绑定自己的IP地址)
      参数:
            sockfd:套接字文件描述符 
            addr:IP地址和端口号结构体首地址
            addrlen:长度
      返回值:
            成功返回0
            失败返回-1 

listen() 

listen
      int listen(int sockfd, int backlog);
      功能:
        监听三次握手链接请求
      参数:
        sockfd:套接字文件描述符
        backlog:最多允许等待尚未处理的三次握手链接个数
      返回值:
        成功返回0 
        失败返回-1 

accept() 

.accept
       int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);
       功能:
          处理三次握手等待队列中的第一个请求并建立一个用来通信的新套接字
       参数:
          sockfd:套接字文件描述符
          addr:存放发送端IP地址空间首地址 
          addrlen:想要接收的IP地址的长度 
       返回值:
          成功返回新文件描述符(通信套接字)
          失败返回-1 


http://www.mrgr.cn/news/93295.html

相关文章:

  • YOLOv8改进SPFF-LSKA大核可分离核注意力机制
  • java 查找两个集合的交集部分数据
  • 随机树算法 自动驾驶汽车的路径规划 静态障碍物(Matlab)
  • Qt:事件
  • NUMA架构介绍
  • vulnhub靶场之【digitalworld.local系列】的mercy靶机
  • 深度学习五大模型:CNN、Transformer、BERT、RNN、GAN详细解析
  • 【Embedding】何为Embedding?
  • tomcat的安装与配置(包含在idea中配置tomcat)
  • [mybatis]resultMap详解
  • TrustRAG:通过配置化模块化的检索增强生成(RAG)框架提高生成结果的可靠性和可追溯性
  • 前端权限流程(基于rbac实现思想)
  • 数据结构基础之《(19)—矩阵处理》
  • conda环境搭建记录
  • C++ 测试案例
  • TypeScript(正在修改)
  • 【ORACLE】ORACLE19C在19.13版本前的一个严重BUG-24761824
  • HRNet的pt模型转rknn并实现前向推理
  • 【项目日记(八)】内存回收与联调
  • 并查集—数组实现