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

三次握手内部实现原理

socket()创建一个新的套接字

int socket(int domain, int type, int protocol);

参数:

domain:地址族,如 AF_INET(IPv4),AF_INET6(IPv6)

type:套接字类型,如 SOCK_STREAM(TCP),SOCK_DGRAM(UDP)

protocol:协议类型,通常为 0(默认协议)

返回值:成功返回套接字描述符,失败返回 -1

Linux操作系统流行一句话,“一切皆文件”,这里的文件不是说文件系统,磁盘里的某个文件,而是struct flie

也就是说,socket也其实也是一个struct file,将socket的所有底层都抽象为一个socket

bind()就是将套接字绑定到一个本地地址(IP+端口)

具体操作也就是将IP和端口号赋值到socket对象的成员里面去

int bind(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

参数:

sockfd:套接字描述符

addr:指向 struct sockaddr 类型的指针,包含要绑定的地址信息

addrlen:地址长度,通常为 sizeof(struct sockaddr_in)

返回值:成功返回 0,失败返回 -1

listen()将套接字设置为被动监听模式,准备接受连接请求

int listen(int sockfd, int backlog);

参数:

sockfd:套接字描述符

backlog:等待连接队列的最大长度

返回值:成功返回 0,失败返回 -1

Listen()函数的最主要作用就是:初始化半连接队列(哈希表) + 全连接队列(链表)

半连接队列的作用就是,区分来客户端的请求是第一次握手还是第三次握手

全连接队列的作用是,让accept()函数从其中取走已完成连接的socket

accept()接受一个来自客户端的连接请求

底层就是去全连接队列里取socket

int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);

参数:

sockfd:监听套接字描述符

addr:指向 struct sockaddr 类型的指针,接收客户端的地址信息

addrlen:地址长度指针,接收客户端地址长度

返回值:成功返回新的套接字描述符,失败返回 -1

connect()主动发起与服务器的连接

底层就是去,动态选择一个本地可用端口,作为发起连接的源端口

int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen);

参数:

sockfd:套接字描述符

addr:指向 struct sockaddr 类型的指针,包含服务器的地址信息

addrlen:地址长度,通常为 sizeof(struct sockaddr_in)

返回值:成功返回 0,失败返回 -1

相关文章:

  • easyExcel使用案例有代码
  • Nabla 分数阶微积分定义
  • 一次单精度天线的调优过滤
  • ZT21 【模板】差分
  • Python 面向对象编程-继承与多态
  • SyntaxError: positional argument follows keyword argument
  • CountDownLatch与CyclicBarrier使用及区别
  • Visual Studio Code集成MarsCode AI
  • 【Python 初级函数详解】—— 参数沙漠与作用域丛林的求生指南
  • 693. 交替位二进制数
  • ETL-kettle数据转换使用详解
  • 利用STM32TIM自制延迟函数实验
  • jeecgboot项目idea启动项目(二)
  • Java基础语法38(异常处理try-catch和throws)
  • 40岁开始学Java:避免创建不必要的对象
  • 分治算法+题目
  • 基金 word-->pdf图片模糊的解决方法
  • MyBatis调用外部静态方法
  • 飞致云开源社区月度动态报告(2025年2月)
  • 基于HTML的贪吃蛇小游戏
  • 360网站建设企业/建立网站的软件
  • 十大免费自助建站/seo对网络推广的作用是什么?
  • 公司网络建设计划书/seo搜索推广费用多少
  • 做高端品牌网站/seo是怎么优化
  • 有什么好看的网站资源/永久免费客服系统
  • 北京建设工程交易信息网站/搭建一个app平台需要多少钱