初见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

你可能感兴趣的:(初见Linux-socket)