学习笔记——套接字socket

协议栈(Protocol Stack),也成为协议族(Protocol Suit),将各层协议按照层次顺序组合在一起,构成协议栈。

协议栈反映了网络中文件的传输过程,发送数据——由上层协议至底层协议;接受数据——由底层协议至上层协议。较为流行的是以太网的五层协议:运用层(HTTP,TELNET,DNS,EMILE)、传输层(TCP,UDP)、网络层(IP)、数据链路层(WI-FI)、物理层。

协议栈的构建有三种方法:函数调用(各层之间通过调用函数进行信息传递,Linux采用)、消息传递、包队列。

TCP/IP五层模型中,最上层应用层的运用程序基本都是通过Linux Socket 接口来与内核空间的协议栈进行通信的。Socket是操作系统为应用程序员提供的API,有时也称为“套接字”,其主要作用方式如下

  • 在客户/服务器(C/S)的结构中,通信双方一方作为服务器,一方作为客户机。服务器等待客户请求(listen),建立连接之后给出响应;客户则向服务器提出申请。为保证服务器能持续监听客户动态,服务器一般作为守护进程始终运行着,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应客户,自己继续监听服务端口。
    • 描述:
      • 即通信的步骤:服务器监听、客户端请求、建立连接。
      • 建立连接的方式有TCP和UDP两种,在这两种方式下均有16位的端口号
      • 主机在网络中依靠IP来唯一标识,但是主机中同时运行着很多进程。当主机收到报文数据后,是把这个数据传给QQ还是传给微信呢?就由引入了端口的概念,用端口号来唯一标识一个进程,共有两个字节(octet)16位,0~65535,共65536个端口号。
      • 网络中进行通信的是进程而不是主机,则要唯一标明这个进程需要:IP地址+端口号。
      • 套接字socket就是用来描述IP地址和端口号的,应用程序通过端口号来和外接程序进行通信。
    • 参数:
      • 套接字的地址结构,被写在sockaddr_in这个结构体中,是因特网类型下的套接字地址结构。这个结构体在<netinet / in>的头文件中定义。这个结构体包含三个内容:协议族(IPv4/IPv6等等),16位的TCP或者UDP端口号,32位的IPv4的地址。
      • sockaddr也是一个结构体,是通用的套接字地址结构。通常作为函数的参数传入。
    • 代码:
      • 一个进程弱项实现网络通信,首先应该做的是调用socket函数,socket(int family,int type,int protocol)三个参数分别指定通信协议类型(IPv4或IPv6),产生套接字的类型(字节流,数据报或者其他),protocol表示采用的传输协议(TCP或UDP或其他)。函数结果返回一个套接字标识符号 sockfd
      • bind()函数,可以用来将这个产生的标识符和特定的IP地址以及端口号进行绑定。
      • listen()函数,监听特定的套接字标识符。(服务器端使用)
      • accept()函数,建立连接。(服务器和客户端都要执行)建立好连接之后就可以进行数据传输了。
      • close()将该套接字关闭。

以上简述了套接字的使用,总而言之就是一种用来将数据报文分配给特定端口进程的一种方法。

 

猜你喜欢

转载自blog.csdn.net/dandandean_96/article/details/81508955
今日推荐