应用层-套接字(Socket)和应用程序的关系

1.系统调用
       大多数操作系统使用 系统调用(system call)的机制在 应用程序和操作系统之间 传递控制权。对程序员来说,每一个系统调用和一般程序设计中的函数调用非常相似, 只是系统调用是将控制权传递给了操作系统。如下图所示( 看了这个图,清晰多了,感谢谢希仁同志):  
应用层-套接字(Socket)和应用程序的关系 (z) - momo - momo

2.应用编程接口 API (Application Programming Interface) 
         如上图所示,当某个应用进程启动 系统调用控制权就从应用进程传递给了 系统调用接口。此接口再将 控制权传递给计算机的 操作系统操作系统将此调用转给某个 内部过程,并执行所请求的操作。 内部过程一旦执行完毕, 控制权就又通过 系统调用接口返回给应用进程。
       由上可知,系统调用接口 实际上就是应用进程的控制权操作系统的控制权进行转换的一个接口,即 应用编程接口 API。( 似乎,和平时api的概念不一样) 。

3.套接字的种类
         我想套接字(Socket)就是由操作系统提供的一组有关TCP/IP的API,自然由于操作系统不同Socket也会有所差异。至少有如下几种
       Berkeley UNIX 操作系统定义了一种 API,它又称为 套接字接口(socket interface)。( 很贝哥哥啊,和黄帝大人的名字一个球样
      微软公司在其操作系统中采用了套接字接口 API,形成了一个稍有不同的 API,并称之为 Windows Socket
      AT&T 为其 UNIX 系统 V 定义了一种 API,简写为  TLI (Transport Layer Interface)。  

4.套接字(Socket)的作用
     如下图所示,应用进程通过套接字接入到网络, 那些抓包工具难道是自己实现的和Socket相似的功能吗[quest-?]
应用层-套接字(Socket)和应用程序的关系 (z) - momo - momo

4.1 套接字(Socket)工作原理
       (1) 当应用进程需要使用网络进行通信时就发出 系统调用,请求操作系统为其 创建 “套接字”,以便把网络通信所 需要的系统资源分配给该应用进程。
       (2) 操作系统为这些资源的总和用一个叫做 套接字描述符 的号码来表示,并把此号码返回给应用进程。应用进程所进行的网络操作都必须使用这个号码。
       (3) 通信完毕后,应用进程通过一个 关闭套接字的系统调用通知操作系统回收与该“号码”相关的所有资源。
4.1.1 调用 socket 创建套接字 
应用层-套接字(Socket)和应用程序的关系 (z) - momo - momo

4.1.2 连接建立阶段
       (1) 当套接字被创建后,它的 端口号和 IP 地址 都是空的如上图中套接字的数据结构所示),因此应用进程要调用  bind(绑定)来指明套接字的本地地址。例如, 服务器端调用 bind 时就是熟知端口号本地IP地址填写到已创建的套接字中。这就叫做 把本地地址绑定到套接字
       (2) 服务器在 调用 bind 后,还 必须调用  listen(收听)把套接字设置为 被动方式,以便随时接受客户的服务请求。UDP服务器由于只提供无连接服务,不使用 listen 系统调用。
       (3) 服务器紧接着就调用  accept(接受),以便把远地客户进程发来的连接请求提取出来。系统调用 accept 的一个变量就是要指明从哪一个套接字发起的连接。

        如下图所示, Socket的调用顺序如下:
应用层-套接字(Socket)和应用程序的关系 (z) - momo - momo
4.1.3 服务器并发工作的原理
有点忘了,好像是这样的,一般Web服务器都在80端口创建了个套接字一直监听,有了新请求,就创建新线程(进程)和套接字以供服务器和客户端使用。如下图所示
应用层-套接字(Socket)和应用程序的关系 (z) - momo - momo

 
 
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值