【C++后端学习】08、C++网络编程_socket

一、Linux socket Api

TCP连接:
在这里插入图片描述

UDP连接:
在这里插入图片描述
MTU(以太网数据帧物理特性是其长度必须在46~1500字节之间)
==》单个UDP传输的最大内容1472字节(1500-20(IP数据头)-8(UDP数据头),如果有可选字节大于28),不过由于不同网络设备MTU值不同,一般将UDP数据控制在548字节。

SCTP:

  • SCTP和TCP之间的最大区别是SCTP的连接可以是多宿主连接的,TCP则一般是单地址连接的。在进行SCTP建立连接时,双方均可声明若干IP地址(IPv4,Ipv6或主机名)通知对方本端所有的地址,引入了 联合(association) 的概念,它也是存在于两台主机之间,但可以使用每台主机上的多个接口进行协作。

  • 其次SCTP是基于消息流,而TCP则是基于字节流。所谓基于消息流,是指发送数据和应答数据的最小单位是消息包(chunk)

  • 不同于TCP连接采用的三次握手机制,SCTP连接采用四次握手机制,有效的防止了类似于SYN Flooding的防范拒绝服务攻击。

  • SCTP 在数据传输中提供了消息分帧功能。
    在这里插入图片描述

    int socket (int domain, int type, int protocol); // 返回套接字句柄
    struct sockaddr_in{
    sa_family_t sin_family; // 地址簇
    uint16_t sin_port; // 端口
    struct in_addr sin_addr; // IP地址
    char sin_zero[8]; // 不适用
    }
    int bind (int sockfd, struct sockaddr * my_addr, int addrlen); // 为句柄设置端口、IP
    int connect (int sockfd, struct sockaddr * serv_addr, int addrlen); // 连接
    int listen (int sockfd, int backlog); // 开始监听连接
    int accept (int sockfd, void * addr, int * addrlen); // 阻塞态等待连接
    int send (int sockfd, const void * msg, int len, int flags); // 发送数据
    int recv (int sockfd, void * buf, int len, unsigned int flags); // 接收数据
    close()

二、boost asio

三、TCP/IP连接问题排查及解决

socket常见错误码:

10053  网络应用程序尝试发送的数据超出了网络的带宽或处理能力,从而导致数据发送失败。
10054 在客户端与服务端通信时服务端终止了连接。
10060 通常是远程服务器没有响应,可能是因为远程服务器不正常运行或出于某种原因关闭
10061 远程服务器拒绝连接,一般是由于防火墙设置所致

window下wireshark抓包分析工具

linux下查看tcp状态工具
netstat -nat // 查看tcp各个状态的数量
lsof -i:port // 检测打开套接字的情况
sar -n SOCK // 查看tcp创建的连接数
ping // 检测网络连接正常与否
tcpdump 抓包工具

TCP常见故障排查:
1、丢包、错包
ethtool -S ens32|grep errors 统计丢包、错包
原因可能是网线或网卡问题
2、队列溢出
TCP有SYN Queue和Accept Queue
使用ss -lnt|expand 工具查看服务端

step1: ping排除网络连接情况
step2: 网络工具尝试连接,若能连接转到step5,
step3: 查看客户端返回报错,初步判断错误类型
step4: 登录服务端查看服务端进程,使用netstat、sar、lsof、ss等工具排除服务端进程问题
step5: tcpdump抓包

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于C++后端开发技术路线,以下是一些主要的技术和步骤: 1. 掌握C++基础知识:了解C++语法、面向对象编程和数据结构等基本概念。 2. 学习网络编程:掌握Socket编程,了解TCP/IP协议栈和HTTP协议等网络通信基础知识。 3. 数据库开发:学习SQL语言和关系型数据库,如MySQL、Oracle等,了解数据库设计和优化原则。 4. 多线程和并发编程:熟悉多线程编程技术和同步机制,了解并发编程的相关概念和工具,如线程池、锁、条件变量等。 5. 分布式系统:了解分布式系统的基本原理和常用技术,如分布式存储、负载均衡、分布式缓存等。 6. 消息队列和异步编程:了解消息队列的使用场景和常见的消息中间件,如RabbitMQ、Kafka等,并掌握异步编程的基本思想和技术。 7. Web开发框架:熟悉C++的Web开发框架,如CppCMS、Wt、Crow等,并了解HTTP服务器的原理和常用技术。 8. 性能优化和调优:学习性能优化的方法和工具,如代码剖析、性能分析工具等,提升程序的性能和稳定性。 9. 安全防护:了解常见的Web安全漏洞和攻击手段,学习安全防护的基本原理和技术,如SQL注入、XSS攻击等。 10. 持续集成和部署:学习使用版本控制工具(如Git)、自动化构建工具(如Jenkins)、容器化技术(如Docker)等,实现持续集成和部署。 以上是C++后端开发技术路线的一些主要方向,根据个人兴趣和需求可以选择深入学习相应的领域。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值