初见Linux-socket

什么叫网络编程?

就是使用网络协议,进行网络通信。
数据报->UDP 流式套接字-> TCP 原始套接字-> RAW

4个层级

应用层
通信层
IP层
链路层

为什么要分层?

每层有具体负责的任务

  • 网络接口层:MAC原地址 MAC目的地址 L/T 14字节的头。
    MAC是网卡地址,解决的是链路层的数据传输问题(局域网点对点的数据传输)。
    路由协议(BGP RIP OSPF)。
  • 网络层:IP层,解决远程的网络传输问题。
  • 传输层:TCP UDP ICMP 传输给哪个进程(应用程序)。端口,端口是哪个进程是用的。
  • 应用层:传输的数据。


    各个层的关系和大小

socket

socket原理图.png

以电话为例.png

在Linux中socket是一个特殊的文件。
socket用来进行远程的数据发送和接收。
write -->socket
read -->socket

创建socket

  • socket函数原型


    socket函数原型.jpg
  • 第一个参数用来指明socket对象所使用的地址簇或协议簇。


    参数1.png
  • 第二个参数为socket的类型


    参数2.jpg
socket(PF_INET,SOCK_STREAM,0); //IPV4 TCP
socket(PF_INET6,SOCK_DGRAM,0); //IPV6 UDP
socket(PF_INET,SOCK_RAW,PF_ICMP); //IPV4 原始套接字

设置socket

  • bind函数


    bind函数原型.png
  • 第二个参数是一个指向sockaddr结构的指针。struct sockaddr只是提供地址类型规范,根据不同的应用,sockaddr需要选用不同的类型。


    参数2.png
  • struct sockaddr 用来在函数间传递 struct sockaddr_in 用来使用数据的。
  • inet_pton()把字符串地址转化成可用IP地址。
  • 网络字节序转化函数:网络字节序<---->内存字节序
    -本地转网络
    htons -- short
    htonl--int
    -网络转本地
    ntons -- short
    ntonl -- int
  • 设置好之后需要开启服务器监听
    listen(fd,LISTSIZE);
    -监听句柄:同时监听等待多个新的链接。相当于邮局
    -链接句柄:服务器和客户端的通信。相当于邮递员

使用socket

  • accept
  • write
  • read
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 网络中进程之间如何通信 为了方便大家获取源代码,可以移步这里,GitHub源代码 进程通信的概念最初来源于单机系统...
    batbattle阅读 14,783评论 1 5
  • 大纲 一.Socket简介 二.BSD Socket编程准备 1.地址 2.端口 3.网络字节序 4.半相关与全相...
    VD2012阅读 7,284评论 0 5
  • Linux系统的一大特点是它的网络编程能力十分强大, 学习它, 让我们真正体会网络的魅力! 一. 客户机/服务器模...
    刘元旺阅读 11,568评论 0 5
  • 1/11 最近两天的天气太阳晒进落地窗。好到不行,中午的时候躲在有盆栽的窗户前 ,如果这个时候再有一只猫或者是一只...
    我不是完美小孩ZX阅读 1,166评论 0 0
  • 第一次拜读《刻意练习》这本书,还是在读书的时候,那时有大把的时间来进行技能学习。而工作以后,时间变得宝贵,知识更新...
    莫吟雪阅读 3,068评论 0 1

友情链接更多精彩内容