【网络协议】聊聊套接字socket

这篇具有很好参考价值的文章主要介绍了【网络协议】聊聊套接字socket。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

网络编程我们知道是通过socket进行编程的,其实socket也是基于TCP和UDP协议进行编程的。但是在socket层面是感知不到下层的,所以在设置参数的时候,其实是端到端协议智商的网络层和传输层。TCP是数据流所以设置为SOCK_STREAM,而UDP是基于数据报的,设置为SOCK_DGRAM

基于 TCP 协议的 Socket 程序函数调用过程

整体流程其实就是显示服务端进行bind ip+端口 可以进一步确定机器和将数据发送给那个应用程序,然后就开始监听状态。

在内核中,为每个 Socket 维护两个队列。一个是已经建立了连接的队列,这时候连接三次握手已经完毕,处于 established 状态;一个是还没有完全建立连接的队列,这个时候三次握手还没完成,处于 syn_rcvd 的状态。

服务端拿出一个已经完成的连接进行处理,客户端通过connect函数创建连接,指明要连接的目标IP+port。内核会给客户端分配一个临时的端口。

监听的 Socket 和真正用来传数据的 Socket 是两个,一个叫作监听 Socket,一个叫作已连接 Socket。
连接建立完成,就通过一写一读的模式进行处理数据。

Socket 在 Linux 中就是以文件的形式存在的。除此之外,还存在文件描述符。写入和读出,也是通过文件描述符。
【网络协议】聊聊套接字socket,# 计算机网络,网络协议,网络

基于 UDP 协议的 Socket 程序函数调用过程

UDP因为不需要进行连接,所以只需要端口和IP使用senddtp就可以发送数据,recvfrom接收数据。
【网络协议】聊聊套接字socket,# 计算机网络,网络协议,网络

服务器如何接更多的项目?

因为上面的方式其实就是一个客户端对应一个服务端的模式,但是对于高性能、高并发系统来说,其实都是需要一个服务端进行同时处理上千上万的客户端请求处理,所以这种方式不可以,那么服务端最大TCP连接数其实是受到文件描述符限制 也就是ulimit 文件描述符的数目,另一个就是内存,每个TCP连接都要占用一定的内存,硬件资源也是有限制的。

多进程方式

一种方式就是有一个专门处理连接+转发任务的进程,但是当有新的客户端请求进来的时候,这个主进程会fork新的进程进行处理客户端的请求,因为是通过frok的形式,所以会复制文件描述符的列表,也会复制内存空间。所以子进程也可以访问内核态统一打开文件列表的文件,当子进程处理完毕之后,就可以通过函数的返回值进行判断。如果是整数就是父进程,如果是0就是子进程。

【网络协议】聊聊套接字socket,# 计算机网络,网络协议,网络

多线程方式

线程相比进程暂用的资源更少,但是对于C10K问题来说,其实还有有点捉襟见肘。

IO 多路复用

select模式
由于socket是文件描述符,所以可以通过一个线程进行所有的文件描述符,将所有的文件描述符放在一起,fd_set中,会实时监听,那些文件描述符有变化,当发生变化的时候就将fd_set设置为1,表示socket可读或者可写,然后继续调用select进行监听下一轮的变化。

epollo
因为监听这种方式需要遍历所有的文件描述符,并且有最大数据限制。
所以最好的方式是那个文件描述符有变化,进行主动通知的方式,在内核的实现方式不是通过轮训的方式,而是通过注册callback函数的方式,当某个文件描述符发送变化的时候,主动通知。
【网络协议】聊聊套接字socket,# 计算机网络,网络协议,网络
比如创建了m n x三个socket。那么会先创建一个epoll对象,也就是一个文件描述符,对应结构其实就是一个红黑树,保存所有这个监听所有的socket。当添加一个socket的时候,其实就是加入这个红黑树,红黑树的节点指向这个结构,将这个结构挂在被监听的socket事件列表中,当一个socket来了一个事件的时候,就可以从列表中获取epoll对象,并调用call back进行回调。
epoll 被称为解决 C10K 问题的利器

小结

本篇主要介绍了UDP和TCP网络编程流程细节,以及支撑大量连接的高并发的服务端不容易,多进程、多线程、IO多路复用等。

推荐阅读:https://blog.csdn.net/jia970426/article/details/130611163?spm=1001.2014.3001.5501

[https://blog.csdn.net/jia970426/article/details/132947333?spm=1001.2014.3001.5501]文章来源地址https://www.toymoban.com/news/detail-721852.html

到了这里,关于【网络协议】聊聊套接字socket的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python】Python 网络编程 ( Socket 套接字简介 | Socket 套接字使用步骤 | Socket 套接字服务端与客户端开发 )

    Socket 套接字 是一种 进程之间的 通信机制 , 通过套接字可以在 不同的进程之间 进行数据交换 ; 在 网络编程 中 , Socket 套接字 主要用于 客户端 与 服务器 之间的 通信 , 大部分 网络相关的应用程序 , 都使用到了 Socket 套接字技术 ; 套接字有两种类型 : 流套接字 : 提供了一个可

    2024年02月15日
    浏览(42)
  • 网络编程套接字(Socket)

    认识IP地址, 端口号, 网络字节序等网络编程中的基本概念; 学习socket api的基本用法; 能够实现一个简单的udp客户端/服务器; 能够实现一个简单的tcp客户端/服务器(单连接版本, 多进程版本, 多线程版本); 理解tcp服务器建立连接, 发送数据, 断开连接的流程; 通俗易懂地说,源

    2024年01月21日
    浏览(35)
  • 【网络编程】socket套接字

    如果我们的台式机或者笔记本没有IP地址就无法上网,而因为每台主机都有IP地址,所以注定了数据从一台主机传输到另一台主机 一定有源IP和目的IP 。 所以在报头中就会包含源IP和目的IP。 而我们把数据从一台主机传递到另一台主机并不是目的,真正通信的其实是应用层上的

    2024年02月02日
    浏览(43)
  • 计算机网络(2) --- 网络套接字UDP

    计算机网络(1) --- 网络介绍_哈里沃克的博客-CSDN博客 https://blog.csdn.net/m0_63488627/article/details/131967378?spm=1001.2014.3001.5501 目录 1.端口号 2.TCP与UDP协议 1.TCP协议介绍 1.TCP协议 2.UDP协议 3.理解 2.网络字节序 发送逻辑 3.socket 1.介绍 2.sockaddr结构 4.UDP协议编程 1.接口介绍 1.创建套接字

    2024年02月14日
    浏览(36)
  • 计算机网络(3) --- 网络套接字TCP

    计算机网络(2) --- 网络套接字UDP_哈里沃克的博客-CSDN博客 https://blog.csdn.net/m0_63488627/article/details/131977544?spm=1001.2014.3001.5501 目录 1.TCP 1.服务端接口介绍 1.listen状态 2.accept获取链接 2.客户端接口介绍 2.TCP的服务器和客户端接口实现 1.服务端 1.成员函数 2.接口 start()实现方式 1.单

    2024年02月14日
    浏览(40)
  • 【计算机网络】网络编程套接字(二)

    简单TCP服务器实现 我们将会使用到的头文件放在 comm.h 文件中 创建套接字 创建过程和UDP服务器几乎完全一样,除了使用的是TCP服务器使用的是流式服务(SOCK_STREAM),UDP使用的是数据包服务(SOCK_DGRAM) 服务器绑定 绑定的过程和UDP服务器也是相同的,可以看着复习一下 定义好 st

    2024年02月13日
    浏览(35)
  • 计算机网络---网络编程套接字(一)

    ✨ 计算机网络—网络编程套接字之UDP数据报套接字编程 作者介绍: 🎓作者:偷偷敲代码的青花瓷🐱‍🚀 👀作者的Gitee:代码仓库 📌系列文章推荐:计算机网络 ——网络原理之初识 ✨✨我和大家一样都是热爱编程✨,很高兴能在此和大家分享知识,希望在分享知识的同时,能和大

    2023年04月09日
    浏览(28)
  • 【计算机网络】网络编程套接字(一)

    目录 1.预备知识 1.1.理解源IP地址和目的IP地址 1.2.认识端口号 1.2.1.理解\\\"端口号\\\"和\\\"进程ID\\\" 1.2.2.理解源端口号和目的端口号 1.3.认识TCP/UDP协议 1.3.1.TCP协议 1.3.2.UDP协议 1.4.网络字节序 网络字节序和主机字节序的转换 2.socket编程接口 2.1.sockaddr结构 struct sockaddr_in 的具体结构: 2.

    2024年02月08日
    浏览(37)
  • 09.计算机网络——套接字编程

    ​ 内存中的多字节数据相对于内存地址有大端和小端之分,磁盘文件中的多字节数据相对于文件中的偏移地址也有大端小端之分,网络数据流同样有大端小端之分。 ​ TCP/IP协议规定,网络数据流应采用 大端字节序 ,即低地址高字节。不管这台主机是大端机还是小端机, 都会

    2024年02月16日
    浏览(37)
  • 【网络】socket套接字基础知识

    IP 每台主机都有自己的IP地址,所以当数据从一台主机传输到另一台主机就需要IP地址。报头中就会包含源IP和目的IP 源IP地址:发送数据报那个主机的IP地址,目的IP地址:想发送到的那个主机的IP地址 我们把数据从一台主机传递到另一台主机不是真正目的,真正通信的不是这

    2024年02月03日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包